“`html
쉽게 배우는 Docker: 개발 환경 구축부터 배포까지
최근 몇 년간 Docker는 개발자들에게 필수적인 도구가 되었습니다. 개발 환경을 일관성 있게 유지하고, 배포 과정을 단순화하며, 애플리케이션을 격리된 환경에서 실행할 수 있게 해줍니다. 이 글에서는 Docker의 기본 개념부터 시작하여 실제 개발 환경 구축 및 배포까지, 초보자도 쉽게 따라 할 수 있도록 안내해 드리겠습니다. 제 경험상 Docker는 처음에는 어렵게 느껴질 수 있지만, 익숙해지면 개발 생산성을 크게 향상시킬 수 있습니다.
Docker란 무엇일까요?
Docker는 컨테이너 기반의 가상화 플랫폼입니다. 가상 머신(VM)과 비슷하지만, 훨씬 가볍고 빠릅니다. 컨테이너는 애플리케이션과 그에 필요한 모든 종속성(라이브러리, 설정 파일 등)을 패키징하여, 어떤 환경에서도 동일하게 실행될 수 있도록 보장합니다. 예를 들어, 개발 환경에서는 잘 작동하던 애플리케이션이 배포 환경에서는 오류가 발생하는 경우가 종종 있는데, Docker를 사용하면 이러한 문제를 해결할 수 있습니다.
컨테이너와 이미지의 차이점
Docker를 이해하기 위해서는 컨테이너와 이미지의 개념을 명확히 구분해야 합니다. 이미지는 애플리케이션과 그 종속성을 포함하는 ‘템플릿’입니다. 마치 설계도와 같습니다. 반면에 컨테이너는 이미지로부터 생성된 ‘실행 가능한 인스턴스’입니다. 즉, 설계도를 바탕으로 실제로 지어진 건물이라고 생각하시면 됩니다. 하나의 이미지로부터 여러 개의 컨테이너를 생성할 수 있습니다.
Docker의 장점
Docker는 다음과 같은 다양한 장점을 제공합니다:
- 일관성 있는 개발 환경: 모든 개발자가 동일한 환경에서 작업할 수 있도록 보장합니다.
- 빠른 배포: 컨테이너를 사용하여 애플리케이션을 빠르게 배포할 수 있습니다.
- 확장성: 필요에 따라 컨테이너를 쉽게 확장할 수 있습니다.
- 리소스 효율성: 가상 머신보다 훨씬 적은 리소스를 사용합니다.
Docker 설치 및 기본 명령어
이제 Docker를 실제로 설치하고 기본적인 명령어를 사용해 보겠습니다. 각 운영체제별 설치 방법은 Docker 공식 웹사이트에서 자세히 확인할 수 있습니다.
Docker 설치하기
Docker Desktop은 Windows와 macOS에서 사용할 수 있는 편리한 GUI 툴입니다. Docker Engine은 Linux 환경에서 사용할 수 있습니다. 설치 과정은 운영체제별로 다르지만, 공식 문서를 참고하면 어렵지 않게 설치할 수 있습니다. 개인적으로는 Docker Desktop이 초보자에게 가장 접근성이 좋다고 생각합니다.
기본적인 Docker 명령어
Docker를 설치했다면, 몇 가지 기본적인 명령어를 익혀두는 것이 좋습니다. 자주 사용하는 명령어는 다음과 같습니다:
docker run
: 컨테이너를 실행합니다.docker ps
: 실행 중인 컨테이너 목록을 보여줍니다.docker images
: 로컬에 저장된 이미지 목록을 보여줍니다.docker pull
: Docker Hub에서 이미지를 다운로드합니다.docker build
: Dockerfile을 사용하여 이미지를 빌드합니다.docker stop
: 컨테이너를 중지합니다.docker rm
: 컨테이너를 삭제합니다.
예를 들어, docker run hello-world
명령어를 실행하면, ‘hello-world’ 이미지를 다운로드하고 컨테이너를 실행하여 간단한 메시지를 출력합니다.
Dockerfile 작성 및 이미지 빌드
Dockerfile은 이미지를 빌드하기 위한 명령어들을 담고 있는 텍스트 파일입니다. Dockerfile을 사용하면 애플리케이션의 환경을 코드 형태로 관리할 수 있습니다. 이는 협업과 자동화에 매우 유용합니다.
Dockerfile 기본 문법
Dockerfile은 여러 개의 명령어로 구성됩니다. 주요 명령어는 다음과 같습니다:
FROM
: 베이스 이미지를 지정합니다.RUN
: 이미지를 빌드하는 동안 명령어를 실행합니다.COPY
: 호스트 시스템의 파일을 이미지 내부로 복사합니다.WORKDIR
: 컨테이너 내부에서 작업 디렉토리를 설정합니다.EXPOSE
: 컨테이너가 외부로 노출할 포트를 지정합니다.CMD
: 컨테이너가 시작될 때 실행할 명령어를 지정합니다.
간단한 Dockerfile 예제
다음은 간단한 Python 애플리케이션을 위한 Dockerfile 예제입니다:
FROM python:3.9-slim-buster
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "app.py"]
이 Dockerfile은 Python 3.9 이미지를 베이스 이미지로 사용하고, requirements.txt 파일을 복사하여 필요한 패키지를 설치한 후, 현재 디렉토리의 모든 파일을 이미지 내부로 복사하고, app.py를 실행합니다.
이미지 빌드하기
Dockerfile을 작성했다면, docker build
명령어를 사용하여 이미지를 빌드할 수 있습니다. 다음 명령어를 실행합니다:
docker build -t my-python-app .
여기서 -t
옵션은 이미지의 이름을 지정하고, .
은 현재 디렉토리를 빌드 컨텍스트로 지정합니다.
Docker Compose를 활용한 다중 컨테이너 관리
Docker Compose는 여러 개의 컨테이너를 정의하고 관리하기 위한 도구입니다. 특히 웹 애플리케이션과 같이 여러 개의 서비스(예: 웹 서버, 데이터베이스)로 구성된 애플리케이션을 배포할 때 유용합니다. 실제로 사용해보니 Docker Compose는 개발 및 테스트 환경을 구성하는 데 매우 편리했습니다.
docker-compose.yml 파일 작성
Docker Compose는 docker-compose.yml
파일을 사용하여 컨테이너 설정을 정의합니다. 다음은 간단한 예제입니다:
version: "3.9"
services:
web:
build: .
ports:
- "8000:8000"
depends_on:
- db
db:
image: postgres:13
environment:
POSTGRES_USER: myuser
POSTGRES_PASSWORD: mypassword
POSTGRES_DB: mydb
이 파일은 ‘web’ 서비스와 ‘db’ 서비스를 정의합니다. ‘web’ 서비스는 현재 디렉토리의 Dockerfile을 사용하여 이미지를 빌드하고, 8000번 포트를 노출합니다. ‘db’ 서비스는 PostgreSQL 13 이미지를 사용하고, 환경 변수를 설정합니다.
Docker Compose 실행하기
docker-compose.yml
파일을 작성했다면, docker-compose up
명령어를 사용하여 컨테이너를 실행할 수 있습니다. 다음 명령어를 실행합니다:
docker-compose up -d
-d
옵션은 detached 모드로 컨테이너를 백그라운드에서 실행합니다.
결론 및 다음 단계
이 글에서는 Docker의 기본 개념부터 시작하여 Dockerfile 작성, 이미지 빌드, Docker Compose를 사용한 다중 컨테이너 관리까지 다루었습니다. Docker는 개발 생산성을 향상시키고 배포 과정을 단순화하는 강력한 도구입니다. 이제 여러분은 Docker를 사용하여 자신만의 개발 환경을 구축하고 애플리케이션을 배포할 수 있게 되었습니다.
다음 단계로는 다음과 같은 것들을 시도해 볼 수 있습니다:
- Docker Hub에 이미지를 푸시하여 다른 사람들과 공유하기
- Docker를 Kubernetes와 함께 사용하여 컨테이너 오케스트레이션 학습하기
- CI/CD 파이프라인에 Docker 통합하기
Docker를 꾸준히 사용하고 다양한 기능을 익히면, 개발 역량을 한층 더 끌어올릴 수 있을 것입니다. 궁금한 점이 있다면 언제든지 질문해주세요!
“`