目次
1. 소개
Docker란?
Docker는 컨테이너형 가상화 기술을 활용하여 애플리케이션의 개발·배포·실행을 효율적으로 수행하기 위한 플랫폼입니다. 기존의 가상 머신(VM)과 달리 컨테이너는 호스트 OS의 커널을 공유하므로 시작이 빠르고 리소스 소비도 적습니다.Ubuntu에서 Docker를 사용할 때의 장점
Ubuntu는 Docker와의 친화성이 높은 Linux 배포판 중 하나입니다. 그 이유는 다음과 같습니다.- 공식 지원:Docker는 Ubuntu를 공식적으로 지원하며, 공식 저장소에서 쉽게 설치할 수 있습니다。
- 안정적인 패키지 관리:Ubuntu의 APT 패키지 관리자를 활용하여 Docker 버전 관리를 쉽게 할 수 있습니다。
- 광범위한 커뮤니티 지원:Ubuntu는 전 세계적으로 사용자가 많아 문제 발생 시 정보를 얻기 쉽습니다。
이 기사에서 배울 수 있는 내용
본 기사에서는 아래 내용을 차례대로 설명합니다。- Ubuntu에 Docker를 설치하는 방법
- Docker 이미지의 기본적인 조작
- Dockerfile을 사용한 커스텀 이미지 생성
- Ubuntu 컨테이너의 일본어 환경 설정
- Docker 이미지 최적화 및 경량화
- Ubuntu 컨테이너에서의 앱 개발
- 자주 발생하는 오류와 해결책
2. Ubuntu에서 Docker 설치
공식 리포지토리를 사용한 Docker 설치
Ubuntu에서는 공식 리포지토리를 이용하면 Docker를 쉽게 설치할 수 있습니다. 아래 절차에 따라 설정을 진행합시다.1. 기존 Docker 패키지 삭제
Ubuntu에는docker.io
라는 패키지가 기본으로 제공되지만, 이는 오래된 버전일 가능성이 있으므로 삭제해 둡니다.sudo apt remove docker docker-engine docker.io containerd runc
2. 필요한 패키지 설치
설치 전에 필요한 의존 패키지를 설치합니다.sudo apt update
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
3. Docker 공식 리포지토리 추가
Docker의 공식 GPG 키를 추가하고, 리포지토리를 설정합니다.curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
4. Docker 설치
리포지토리를 추가하면 Docker를 설치합니다.sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
5. 설치 확인
Docker가 올바르게 설치되었는지 확인하기 위해 버전 정보를 표시해 봅니다.docker --version
설치 후 초기 설정
1. Docker 서비스 시작 및 활성화
Docker 서비스를 시작하고, 시스템 부팅 시 자동으로 실행되도록 설정합니다.sudo systemctl start docker
sudo systemctl enable docker
2. 비root 사용자에게 Docker 사용 가능하게 하기
기본적으로 Docker는 root 사용자만 실행할 수 있기 때문에, 일반 사용자가 Docker 명령을 사용할 수 있도록 설정합니다.sudo usermod -aG docker $USER
설정을 적용하려면 한 번 로그아웃한 뒤 다시 로그인하십시오.3. 동작 확인
일반 사용자 권한으로hello-world
컨테이너를 실행하여 Docker가 올바르게 동작하는지 확인합니다。docker run hello-world
출력에 “Hello from Docker!” 라고 표시되면 설치가 성공한 것입니다。
3. Docker 이미지 기본 작업
Docker 이미지란?
Docker 이미지는 컨테이너를 만들기 위한 템플릿과 같은 것입니다. Ubuntu 기반 Docker 이미지를 이용하면 바로 Ubuntu 환경을 시작할 수 있습니다.Docker Hub에서 Ubuntu 이미지를 가져오기
Docker Hub에는 많은 공식 Docker 이미지가 등록되어 있습니다. Ubuntu 이미지를 가져오려면 아래 명령을 실행합니다.docker pull ubuntu
컨테이너 시작·정지
받은 Ubuntu 이미지를 사용하여 컨테이너를 시작할 수 있습니다.docker run -it ubuntu bash
이 명령을 실행하면 Ubuntu 컨테이너의 쉘이 열리고, 컨테이너 내부에서 조작이 가능해집니다.컨테이너 목록 표시
실행 중인 컨테이너를 확인하려면 다음 명령을 사용합니다.docker ps
모든 컨테이너(정지 중인 것도 포함)를 표시하려면 -a
옵션을 추가합니다.docker ps -a
컨테이너 정지와 삭제
실행 중인 컨테이너를 정지하려면 아래 명령을 사용합니다.docker stop [컨테이너ID또는이름]
불필요해진 컨테이너를 삭제하려면 다음 명령을 실행합니다.docker rm [컨테이너ID또는이름]
Docker 이미지 관리
다운로드된 Docker 이미지를 목록 표시하려면 아래 명령을 사용합니다.docker images
불필요한 이미지를 삭제하려면 다음 명령을 사용합니다.docker rmi [이미지ID]
4. Dockerfile을 사용한 커스텀 이미지 만들기
Dockerfile이란?
Dockerfile은 Docker 이미지를 만들기 위한 설정 파일입니다. Dockerfile에 기록된 지시에 따라 맞춤형 Docker 이미지를 만들 수 있습니다. 이를 통해 개발 환경을 통일하거나 필요한 패키지를 포함한 이미지를 만들 수 있습니다.Dockerfile의 기본 구문
Dockerfile에는 주로 다음과 같은 명령을 기록합니다。명령 | 설명 |
---|---|
FROM | 베이스 이미지 지정 |
RUN | 명령을 실행해 이미지 구축 |
COPY | 파일을 컨테이너에 복사 |
WORKDIR | 작업 디렉터리 설정 |
CMD | 컨테이너 시작 시 실행되는 기본 명령 |
ENTRYPOINT | 컨테이너 실행 시 엔트리 포인트 |
Ubuntu 기반 커스텀 이미지 만들기
다음 절차대로 Ubuntu 기반 커스텀 Docker 이미지를 만들어 봅시다。1. 작업 디렉터리 만들기
먼저, 새로운 프로젝트 디렉터리를 만들고 이동합니다。mkdir my-ubuntu-image
cd my-ubuntu-image
2. Dockerfile 만들기
디렉터리 안에Dockerfile
을 만들고, 아래 내용을 기록합니다。# Ubuntu 공식 이미지
FROM ubuntu:latest
# 유지보수자 정보(선택)
LABEL maintainer="your-email@example.com"
# 패키지 목록을 업데이트하고 기본 도구를 설치
RUN apt update && apt install -y curl vim git
# 작업 디렉터리 설정
WORKDIR /workspace
# 컨테이너 시작 시 실행할 명령
CMD ["bash"]
3. Docker 이미지 빌드
생성한Dockerfile
을 사용해 커스텀 이미지를 빌드합니다。docker build -t my-ubuntu-image .
-t
옵션으로 이미지 이름을 지정합니다。4. 이미지 확인
빌드된 이미지를 확인하려면, 아래 명령을 실행합니다。docker images
5. 컨테이너 시작
생성한 커스텀 이미지에서 컨테이너를 시작합니다。docker run -it my-ubuntu-image
이 컨테이너에는 curl
이나 vim
등의 도구가 설치되어 있을 것입니다。5. Ubuntu 컨테이너의 일본어 환경 설정
데폴트의 Ubuntu 이미지는 영어 환경이며, 일본어를 사용하려면 추가 설정이 필요합니다.일본어 로케일 설정
Ubuntu 컨테이너에서 일본어를 표시·입력할 수 있도록 일본어 로케일을 설치합니다.1. 필요한 패키지 설치
apt update
apt install -y language-pack-ja locales
2. 로케일 설정
로케일을 설정하고 적용합니다.locale-gen ja_JP.UTF-8
update-locale LANG=ja_JP.UTF-8
3. 설정 반영
export LANG=ja_JP.UTF-8
일본어 입력 환경 구축
터미널에서 일본어를 입력할 수 있도록ibus-mozc
를 도입합니다.apt install -y ibus-mozc
GUI 환경을 사용하는 경우, 아래 환경 변수를 추가하십시오.export GTK_IM_MODULE=ibus
export XMODIFIERS=@im=ibus
export QT_IM_MODULE=ibus
GUI 애플리케이션 사용
Docker 컨테이너 내에서 GUI 앱을 사용하려면 X 서버를 사용하는 방법이 있습니다. 호스트 측에 X 서버를 설치하고 X11을 활성화하여 컨테이너를 실행합니다.docker run -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix my-ubuntu-image
6. Docker 이미지 최적화 및 경량화
Docker 이미지를 최적화하면 컨테이너의 시작 속도를 높이고 스토리지 사용량을 줄일 수 있습니다. 여기서는 경량 이미지를 만들기 위한 방법을 소개합니다.경량 Ubuntu 기반 이미지를 만드는 방법
기본ubuntu:latest
는 크기가 커서, 보다 경량인 ubuntu:minimal
등을 사용하면 컨테이너 크기를 줄일 수 있습니다.FROM ubuntu:minimal
또한, Ubuntu보다 훨씬 가벼운 Alpine Linux를 사용하는 방법도 있습니다.FROM alpine:latest
RUN apk add --no-cache bash curl
이 방법을 이용하면 이미지 크기를 수백 MB 단위로 줄일 수 있습니다.불필요한 파일을 삭제하여 이미지 크기를 줄이기
apt-get
으로 설치한 불필요한 캐시를 삭제함으로써 이미지 크기를 축소할 수 있습니다.RUN apt update && apt install -y curl vim && apt clean && rm -rf /var/lib/apt/lists/*
이 rm -rf /var/lib/apt/lists/*
를 추가하면 패키지 목록을 삭제하고 불필요한 데이터를 줄일 수 있습니다.멀티스테이지 빌드 활용
예를 들어, 빌드 시에만 컴파일러를 사용하고 최종 이미지를 경량화할 수 있습니다.FROM ubuntu as builder
RUN apt update && apt install -y gcc
FROM ubuntu:minimal
COPY --from=builder /usr/bin/gcc /usr/bin/gcc
이 방법을 사용하면 개발 도구를 최종 이미지에 포함하지 않고 경량 환경을 만들 수 있습니다.7. 실전: Ubuntu 컨테이너로 앱 개발
여기에서는 Ubuntu 컨테이너를 사용하여 실제 개발 환경을 구축하는 방법을 소개합니다.Python 개발 환경 설정
Ubuntu 컨테이너 내에서 Python 개발 환경을 설정하려면, 아래 Dockerfile을 작성합니다。FROM ubuntu:latest
RUN apt update && apt install -y python3 python3-pip
CMD ["python3"]
이미지를 빌드하고, 컨테이너를 실행합니다。docker build -t python-dev .
docker run -it python-dev
이 환경에서는 python3
명령을 실행할 수 있으며, 스크립트 개발 및 테스트가 가능합니다。Node.js 개발 환경 설정
Node.js 개발 환경을 구축하려면, 아래 Dockerfile을 사용합니다。FROM ubuntu:latest
RUN apt update && apt install -y nodejs npm
CMD ["node"]
동일하게 빌드하고 실행합니다。docker build -t node-dev .
docker run -it node-dev
이 환경에서는 node
명령을 사용하여 JavaScript 실행 및 앱 개발이 가능합니다。8. FAQ·문제 해결
Docker를 사용하면 다양한 문제에 직면할 수 있습니다. 여기에서는 자주 묻는 질문과 그 해결책을 소개합니다.Docker와 가상 머신의 차이
- Docker: 호스트 OS의 커널을 공유하기 때문에 가볍고, 컨테이너 시작이 빠릅니다.
- 가상 머신(VM): 독립된 OS를 가지고 있어 리소스 소비가 많고, 시작도 느립니다.
Ubuntu 컨테이너의 데이터 영속성
컨테이너가 중지되어도 데이터를 유지하려면 볼륨 마운트를 이용합니다.docker run -v my_data:/data ubuntu
컨테이너를 삭제해도 my_data
볼륨에 데이터가 저장되어 재사용할 수 있습니다.자주 발생하는 오류와 해결책
1. permission denied
오류
Docker를 실행하려 할 때 permission denied
가 표시되는 경우, 현재 사용자가 docker
그룹에 속해 있지 않을 가능성이 있습니다. 다음 명령을 실행하여 사용자를 docker
그룹에 추가하십시오。sudo usermod -aG docker $USER
적용 후, 한 번 로그아웃하고 다시 로그인해야 합니다。2. image not found
오류
Docker Hub에서 이미지가 삭제된 경우, 새로운 태그를 지정하여 받아오세요。docker pull ubuntu:22.04
특정 버전을 명시함으로써 적절한 이미지를 받아올 수 있습니다。