“`html
Docker 입문: 컨테이너 가상화로 개발 환경 구축하기
최근 몇 년 동안 Docker는 개발 및 배포 방식에 혁명을 일으켰습니다. 컨테이너 가상화 기술을 통해 개발 환경을 일관되게 유지하고, 애플리케이션을 어디든 쉽게 배포할 수 있게 되었습니다. 이 글에서는 Docker의 기본 개념부터 실제 사용 방법까지, 초보자도 쉽게 따라 할 수 있도록 자세히 설명하겠습니다.
Docker란 무엇일까요?
Docker는 컨테이너 기반의 오픈소스 가상화 플랫폼입니다. 컨테이너는 애플리케이션과 그 실행에 필요한 모든 것 (코드, 런타임, 시스템 도구, 시스템 라이브러리, 설정 등)을 패키징하여 격리된 환경에서 실행할 수 있도록 해줍니다. 이렇게 하면 개발, 테스트, 배포 환경에서 일관성을 유지할 수 있고, 여러 애플리케이션을 하나의 서버에서 격리된 상태로 실행할 수 있습니다.
Docker의 장점
Docker는 다양한 장점을 제공합니다. 먼저, 개발 환경의 일관성을 보장합니다. ‘내 컴퓨터에서는 잘 되는데…’라는 문제를 해결해줍니다. 또한, 리소스 사용 효율성을 높여 서버 비용을 절감할 수 있습니다. 마지막으로, 애플리케이션 배포 속도를 크게 향상시켜 빠른 개발 주기를 가능하게 합니다. 제 경험상, Docker를 사용하기 시작한 후 배포 시간이 눈에 띄게 줄었습니다.
컨테이너 vs 가상 머신 (VM)
컨테이너와 가상 머신은 모두 가상화 기술이지만, 작동 방식에 차이가 있습니다. 가상 머신은 하이퍼바이저를 통해 전체 운영 체제를 가상화하는 반면, 컨테이너는 운영 체제 커널을 공유하고 애플리케이션과 필요한 라이브러리만 격리합니다. 따라서 컨테이너는 가상 머신보다 훨씬 가볍고 빠르게 실행됩니다. 실제로 사용해보니, 컨테이너는 VM보다 훨씬 적은 리소스를 사용하면서도 비슷한 성능을 보여주었습니다.
Docker 설치 및 기본 명령어
Docker를 사용하기 위해서는 먼저 Docker Engine을 설치해야 합니다. Docker Desktop은 Windows와 macOS에서 쉽게 Docker를 사용할 수 있도록 GUI 환경을 제공합니다. Linux에서는 패키지 관리자를 통해 Docker Engine을 설치할 수 있습니다.
Docker Desktop 설치 (Windows, macOS)
Docker Desktop은 Docker 공식 웹사이트에서 다운로드하여 설치할 수 있습니다. 설치 과정은 간단하며, 화면의 지침을 따라 진행하면 됩니다. 설치 후 Docker Desktop을 실행하면 Docker Engine이 자동으로 실행됩니다.
Docker Engine 설치 (Linux)
Linux에서는 패키지 관리자를 사용하여 Docker Engine을 설치할 수 있습니다. 예를 들어, Ubuntu에서는 다음과 같은 명령어를 사용합니다.
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io
설치 후 Docker 서비스를 시작하고 자동 시작되도록 설정합니다.
sudo systemctl start docker
sudo systemctl enable docker
기본 Docker 명령어
Docker를 설치했으면 몇 가지 기본 명령어를 알아두는 것이 좋습니다. docker run
은 컨테이너를 실행하는 명령어이고, docker ps
는 현재 실행 중인 컨테이너 목록을 보여줍니다. docker images
는 로컬에 저장된 이미지 목록을 보여주고, docker pull
은 Docker Hub에서 이미지를 다운로드합니다. 개인적으로는 docker ps -a
명령어를 자주 사용하는데, 실행 중인 컨테이너뿐만 아니라 중지된 컨테이너까지 모두 확인할 수 있어서 편리합니다.
Dockerfile로 이미지 만들기
Dockerfile은 Docker 이미지를 만들기 위한 설정 파일입니다. Dockerfile에는 이미지를 만들기 위한 명령어들이 순서대로 나열되어 있습니다. Dockerfile을 사용하면 이미지를 재현 가능하게 만들 수 있고, 버전 관리를 통해 이미지 변경 사항을 추적할 수 있습니다.
Dockerfile 작성법
Dockerfile은 다음과 같은 기본적인 구조를 가집니다.
FROM ubuntu:latest
RUN apt update && apt install -y python3 python3-pip
WORKDIR /app
COPY . /app
RUN pip3 install -r requirements.txt
CMD ["python3", "app.py"]
FROM
은 베이스 이미지를 지정하고, RUN
은 명령어를 실행합니다. WORKDIR
은 작업 디렉토리를 설정하고, COPY
는 파일을 복사합니다. CMD
는 컨테이너가 시작될 때 실행될 명령어를 지정합니다.
이미지 빌드하기
Dockerfile을 작성했으면 docker build
명령어를 사용하여 이미지를 빌드할 수 있습니다.
docker build -t my-python-app .
-t
옵션은 이미지에 태그를 지정하고, .
은 현재 디렉토리에 있는 Dockerfile을 사용하라는 의미입니다.
Docker Hub에 이미지 푸시하기
자신이 만든 이미지를 Docker Hub에 푸시하여 다른 사람들과 공유할 수 있습니다. 먼저 Docker Hub에 계정을 생성하고, docker login
명령어를 사용하여 로그인합니다. 그 후, 이미지에 태그를 지정하고 docker push
명령어를 사용하여 이미지를 푸시합니다.
docker tag my-python-app username/my-python-app
docker push username/my-python-app
Docker Compose로 멀티 컨테이너 애플리케이션 관리하기
Docker Compose는 여러 개의 컨테이너로 구성된 애플리케이션을 정의하고 실행하는 데 사용되는 도구입니다. Docker Compose 파일을 사용하면 애플리케이션의 모든 서비스를 한 번에 정의하고 관리할 수 있습니다.
Docker Compose 파일 작성
Docker Compose 파일은 YAML 형식으로 작성됩니다. 다음은 간단한 Docker Compose 파일 예시입니다.
version: "3.9"
services:
web:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html
db:
image: postgres:13
environment:
POSTGRES_USER: myuser
POSTGRES_PASSWORD: mypassword
이 파일은 nginx 웹 서버와 postgres 데이터베이스를 정의합니다. web
서비스는 nginx 이미지를 사용하고, 80번 포트를 호스트의 80번 포트에 매핑합니다. db
서비스는 postgres 이미지를 사용하고, 환경 변수를 설정합니다.
Docker Compose 실행하기
Docker Compose 파일을 작성했으면 docker-compose up
명령어를 사용하여 애플리케이션을 실행할 수 있습니다.
docker-compose up -d
-d
옵션은 detached mode로 실행하라는 의미입니다. 애플리케이션을 중지하려면 docker-compose down
명령어를 사용합니다.
결론 및 다음 단계
이 글에서는 Docker의 기본 개념부터 Dockerfile 작성, Docker Compose 사용법까지 다루었습니다. Docker는 개발 환경을 효율적으로 관리하고 애플리케이션 배포를 간소화하는 강력한 도구입니다. 앞으로 Docker를 꾸준히 사용하면서 다양한 활용 방법을 익혀나가시길 바랍니다.
다음 단계로는 Docker 네트워크, Docker 볼륨, Docker Swarm 등 Docker의 고급 기능을 학습하는 것을 추천합니다. 또한, CI/CD 파이프라인에 Docker를 통합하여 자동화된 배포 시스템을 구축하는 것도 좋은 경험이 될 것입니다.
“`