“`html
Docker 입문: 컨테이너 기술로 개발 환경 구축하기
최근 몇 년 동안 Docker는 소프트웨어 개발, 배포, 운영 방식을 혁신적으로 변화시켰습니다. 컨테이너 기술을 통해 개발 환경을 표준화하고, 애플리케이션을 독립적으로 실행할 수 있게 되면서 개발 효율성이 크게 향상되었습니다. 이 글에서는 Docker의 기본 개념부터 실제 프로젝트에 적용하는 방법까지, 초보자도 쉽게 따라 할 수 있도록 자세하게 설명합니다.
Docker란 무엇일까요?
Docker는 컨테이너 기반의 가상화 플랫폼입니다. 컨테이너는 애플리케이션과 그 실행에 필요한 모든 것(코드, 런타임, 시스템 도구, 시스템 라이브러리, 설정)을 패키징하여 격리된 환경에서 실행할 수 있게 해줍니다. 이러한 컨테이너는 OS 커널을 공유하기 때문에 가상 머신보다 훨씬 가볍고 빠르게 실행됩니다.
컨테이너와 가상 머신의 차이점
가상 머신(VM)은 전체 운영 체제를 가상화하는 반면, 컨테이너는 애플리케이션과 필요한 라이브러리만 패키징합니다. 이 때문에 컨테이너는 VM보다 훨씬 적은 리소스를 사용하고, 더 빠르게 시작 및 종료할 수 있습니다. 제 경험상, 개발 환경을 구축할 때 Docker를 사용하면 VM을 사용할 때보다 훨씬 편리하고 효율적으로 작업할 수 있었습니다.
Docker의 장점
Docker를 사용하면 다음과 같은 장점을 누릴 수 있습니다.
- 일관된 개발 환경: 모든 개발자가 동일한 환경에서 작업할 수 있어 환경 의존성으로 인한 문제를 줄일 수 있습니다.
- 빠른 배포: 컨테이너 이미지를 통해 애플리케이션을 빠르게 배포할 수 있습니다.
- 리소스 효율성: 가상 머신보다 훨씬 적은 리소스를 사용합니다.
- 확장성: 필요에 따라 컨테이너를 쉽게 확장할 수 있습니다.
Docker 설치 및 기본 명령어
이제 Docker를 설치하고 기본적인 명령어를 사용해 보겠습니다.
Docker 설치
Docker는 Windows, macOS, Linux 등 다양한 운영 체제에서 사용할 수 있습니다. Docker 공식 웹사이트에서 자신의 운영 체제에 맞는 설치 파일을 다운로드하여 설치할 수 있습니다. 개인적으로는 Docker Desktop을 사용하는 것을 추천합니다. GUI 환경을 제공하여 Docker를 더 쉽게 관리할 수 있기 때문입니다.
기본 명령어
Docker를 설치했다면 터미널 또는 명령 프롬프트를 열어 Docker 명령어를 사용할 수 있습니다. 몇 가지 기본적인 명령어는 다음과 같습니다.
docker version
: Docker 버전 정보를 확인합니다.docker images
: 로컬에 저장된 Docker 이미지를 확인합니다.docker ps
: 실행 중인 Docker 컨테이너를 확인합니다.docker run [이미지 이름]
: Docker 이미지를 기반으로 컨테이너를 실행합니다.docker stop [컨테이너 ID]
: 실행 중인 컨테이너를 중지합니다.
예를 들어, Docker Hub에서 “hello-world” 이미지를 다운로드하여 실행해 보겠습니다. 터미널에서 다음 명령어를 입력합니다.
docker run hello-world
성공적으로 실행되면 “Hello from Docker!” 메시지가 출력됩니다.
Dockerfile 작성 및 이미지 빌드
Docker 이미지를 직접 만들려면 Dockerfile을 작성해야 합니다. Dockerfile은 이미지를 빌드하기 위한 명령어 집합을 담고 있는 텍스트 파일입니다.
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은 다음과 같은 단계를 수행합니다.
FROM python:3.9-slim-buster
: Python 3.9 이미지를 기반으로 합니다.WORKDIR /app
: 컨테이너 내 작업 디렉토리를 /app으로 설정합니다.COPY requirements.txt .
: 로컬의 requirements.txt 파일을 컨테이너의 /app 디렉토리로 복사합니다.RUN pip install --no-cache-dir -r requirements.txt
: requirements.txt에 명시된 Python 패키지를 설치합니다.COPY . .
: 로컬의 모든 파일을 컨테이너의 /app 디렉토리로 복사합니다.CMD ["python", "app.py"]
: 컨테이너가 시작될 때 app.py를 실행합니다.
이미지 빌드
Dockerfile을 작성했다면 다음 명령어를 사용하여 이미지를 빌드할 수 있습니다.
docker build -t my-python-app .
-t my-python-app
은 이미지 이름을 “my-python-app”으로 지정하는 옵션입니다. .
은 Dockerfile이 있는 현재 디렉토리를 의미합니다.
Docker Compose로 멀티 컨테이너 애플리케이션 관리
Docker Compose는 여러 개의 컨테이너로 구성된 애플리케이션을 정의하고 실행하는 도구입니다. 웹 애플리케이션, 데이터베이스, 캐시 서버 등 여러 컨테이너가 함께 작동해야 하는 경우 Docker Compose를 사용하면 편리하게 관리할 수 있습니다.
docker-compose.yml 파일
Docker Compose는 `docker-compose.yml` 파일을 사용하여 애플리케이션의 서비스를 정의합니다. 다음은 간단한 웹 애플리케이션과 데이터베이스를 위한 `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
: 현재 디렉토리의 Dockerfile을 사용하여 빌드하고, 포트 8000을 호스트의 8000 포트로 매핑합니다. 데이터베이스 서비스(db
)에 의존합니다.db
: PostgreSQL 13 이미지를 사용하고, 환경 변수를 설정합니다.
애플리케이션 실행
`docker-compose.yml` 파일이 있는 디렉토리에서 다음 명령어를 실행하여 애플리케이션을 실행할 수 있습니다.
docker-compose up -d
-d
옵션은 백그라운드에서 실행하는 것을 의미합니다.
결론 및 다음 단계
이 글에서는 Docker의 기본 개념, 설치 방법, 기본 명령어, Dockerfile 작성, Docker Compose 사용법 등 Docker 입문에 필요한 내용을 다루었습니다. Docker는 개발 환경을 표준화하고, 애플리케이션을 빠르게 배포하는 데 매우 유용한 도구입니다. 실제로 사용해보니, 개발 생산성을 크게 향상시킬 수 있었습니다.
다음 단계로는 Docker Hub를 이용하여 이미지를 공유하고, Docker Swarm 또는 Kubernetes와 같은 컨테이너 오케스트레이션 도구를 학습하는 것을 추천합니다. 이러한 도구를 통해 컨테이너를 대규모로 관리하고, 더욱 복잡한 애플리케이션을 구축할 수 있습니다.
꾸준히 학습하고 실습을 통해 Docker를 능숙하게 사용할 수 있게 되기를 바랍니다.
“`