Docker를 사용하다 보면 여러 컨테이너를 설정하고 생성해야 하는 경우가 생기는데 도커 컴포즈를 사용하면 컨테이너 실행에 필요한 옵션을docker-compose.yml이라는 파일에 적어둘 수 있고, 컨테이너 간 실행 순서나 의존성도 관리할 수 있습니다.
1. docker-compose.yml 생성하기
프로젝트 폴더에 docker-compose.yml 파일을 만들고 이렇게 작성합니다.
# 파일 규격 버전
version: '3'
volumes:
django_sample_db_dev: {}
# 실행 하려는 컨테이너를 정의
services:
# 서비스의 이름을 정의
django:
# build시 옵션을 정의
build:
context: .
dockerfile: ./compose/django/Dockerfile-dev
# 환경변수 리스트를 정의한다.
environment:
- DJANGO_DEBUG=True
- DJANGO_DB_HOST=database
- DJANGO_DB_PORT=5432
- DJANGO_DB_NAME=sampledb
- DJANGO_DB_USERNAME=sampleuser
- DJANGO_DB_PASSWORD=samplesecret
- DJANGO_SECRET_KEY=dev_secret_key
# 호스트 포트와 컨테이너 포트를 어떻게 연결할지 정의
ports:
- "8000:8000"
# 컨테이너 실행 명령
command:
- bash
- -c
- |
python manage.py migrate
python manage.py runserver 0:8000
# 루트 디렉토리를 컨테이너 안의 /app 디렉토리와 연결
volumes:
- ./:/app/
db:
# database 서비스에서 사용할 도커 이미지
image: postgres
# django_sample_db_dev 디렉토리를 컨테이너 var/lib/postgresql/dat 디렉토리와 연결
volumes:
- django_sample_db_dev:/var/lib/postgresql/data
# 환경변수 리스트를 정의한다.
environment:
- POSTGRES_DB=sampledb
- POSTGRES_USER=sampleuser
- POSTGRES_PASSWORD=samplesecret
- POSTGRES_INITDB_ARGS=--encoding=UTF-8
2. docker-compose 실행
# docker-compose
$ docker-compose up
# container 목록 조회
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
16eb7dfc1344 postgres "docker-entrypoint.s…" 47 seconds ago Up 46 seconds 5432/tcp django-sample-for-docker-compose_db_1
7477621fcd4f django-sample-for-docker-compose_django "bash -c 'python man…" 47 seconds ago Up 46 seconds 0.0.0.0:8000->8000/tcp django-sample-for-docker-compose_django_1