Docker Compose란?
설명
- Docker Compose는 여러 개의 도커 컨테이너를 정의하고 구성하여 멀티 컨테이너 애플리케이션을 쉽게 관리할 수 있는 도구
예시 상황
- 웹 애플리케이션과 데이터베이스를 포함한 멀티 컨테이너 애플리케잉션을 구성하려고 함
- 웹 애플리케이션은 Flask로 작성되었고, 데이터베이스는 PostgreSQL를 사용
프로젝트 구조
myapp/
├── app/
│ └── app.py
├── db/
│ └── init.sql
├── Dockerfile
├── docker-compose.yml
└── requirements.txt
Dockerfile
# 베이스 이미지 설정
FROM python:3.8-alpine
# 작업 디렉토리 설정
WORKDIR /app
# 필요한 파일 복사
COPY requirements.txt .
# 의존성 설치
RUN pip install -r requirements.txt
# 소스 코드 복사
COPY app/ .
# 앱 실행
CMD [ "python", "app.py" ]
docker-compose.yml
version: '3'
services:
web:
build:
context: .
dockerfile: Dockerfile
ports:
- 5000:5000
volumes:
- ./app:/app
depends_on:
- db
db:
image: postgres:12
environment:
- POSTGRES_USER=myuser
- POSTGRES_PASSWORD=mypassword
volumes:
- ./db/init.sql:/docker-entrypoint-initdb.d/init.sql
- version : '3'은 docker compose파일의 버전을 지정
- services : 섹션에는 각 서비스의 정의를 작성
- web : Dockerfile을 사용하여 이미지를 빌드하고, 호스트의 5000포트와 컨테이너의 5000포트를 연결
- volumes : 호스트의 './'디렉토리와 컨테이너의 './app'디렉토리를 연결함. 'depends_on'을 사용하여 'db'서비스가 먼저 실행되도록 설정
- db : PostSQL12 이미지 사용, environment를 사용하여 PostgreSQL사용자 이름과 비밀번호 설정
- db - volumes : 호스트의 './db/init.sql' 파일을 컨테이너의 '/docker-entrypoint-initdb.d/init.sql' 경로로 연결하여 초기 SQL스크립트를 실행
애플리케이션 실행
docker-compose up
- Docker Compose는 'docker-compose.yml'파일을 읽어 애플리키에션의 서비스를 빌드하고 실행
- 웹 애플리케이션은 호스트의 5000포트를 통해 접근 가능
Docker Compose 명령어 및 관련 설정
Docker Compose 명령어
- docker-compose up : docker compose파일을 읽어 서비스를 빌드하고 실행
- docker-compose up -d : 백그라운드에서 서비스를 실행
- docker-compose down : 실행중인 서비스를 중지하고 컨테이너 제거
- docker-compose ps : 실행중인 서비스의 상태 확인
환경 변수 설정
- 데이터베이스 비밀번호나 애플리케이션의 구성 설정 등 환경 변수로 지정하여 동적으로 변경 가능
- 환경변수는 'environment'키를 사용하여 각 서비스에 설정 가능
네트워크 설정
- docker compose를 사용하면 서비스 간에 내부 네트워크를 생성하여 컨테이너 간 통신을 쉽게 설정 가능
- 서비스 간 통신에는 서비스명을 조합하여 고유한 네트워크를 생성
