
내가 아는 도커는 고래인데 이 문어는 뭐지? 도커 컴포즈라는 친구다.
이번에 프로젝트를 진행하며 처음 알고 활용해 보게 되었는데, 활용해 보니 이렇게 편하니까 쓰는구나 싶었다. 끝나고 보니 가지고 있는 도커책에 소개가 잘 나와 있어 다시 정리해 보고자 한다.
최종 프로젝트의 경우, 두 컨테이너만 활용하여 아래 구조와 같이 구성했지만 볼륨, 네트워크, 컨테이너가 많아질수록 도커 컴포즈는 더욱 빛을 발한다🌈

| 도커 컴포즈 | Dockerfile 스크립트 |
|---|---|
| 컨테이너와 주변 환경 생성 | 이미지 생성 |
| 네트워크와 볼륨 생성 | 네트워크나 볼륨 생성 X |
여기까지 보았을 때 '그럼 도커 컴포즈는 여러 컨테이너를 한 번에 관리하는 도구인가?'라는 생각이 들지만, 도커 컴포즈는 컨테이너를 생성 및 삭제할 분 컨테이너 관리 기능은 없다. 컨테이너 관리는 쿠버네티스의 몫!
sudo apt install -y python3 python3-pip
sudo pip3 install docker-compose
docker-compose -version
파일 이름은 docker-compose.yml이다.
YAML 형식에서는 공백에 따라 의미가 달라지므로 탭은 의미가 없고, 공백 두 개로 맨 처음 들여쓰기를 했다면 그 뒤로도 공백 두 개가 한 단이 되도록 해야 한다.
version: '3'
services:
컨테이너_이름1:
image: 이미지_이름
networks:
- 네트워크_이름
ports:
- 포트_설정
컨테이너_이름2:
image: 이미지_이름
networks:
네트워크_이름1:
volumes:
볼륨_이름1:
볼륨_이름2:
최종 프로젝트에서 작성한 docker-compose.yml 파일 내용은 다음과 같다.
version: '3.10'
services:
flask-app:
build: ./
container_name: flask-app
ports:
- "8080:8080"
networks:
- mynetwork
env_file:
- .env
fastapi-app:
build: ./
container_name: fastapi-app
ports:
- "8000:8000"
networks:
- mynetwork
depends_on:
- flask-app
env_file:
- .env
networks:
mynetwork:
driver: bridge
docker-compose -f 정의파일경로 up 옵션
docker-compose -f 정의파일경로 down 옵션
docker-compose -f 정의파일경로 stop 옵션
이 중 up 옵션으로 -d라는 것이 있는데, 백그라운드로 실행하는 옵션이다. 그냥 up 하는 것과 up -d 하는 것의 차이를 비교해 보면 다음과 같다.
| up | up -d |
|---|---|
| ꞏ 이 명령어는 정의파일에 명시된 서비스들을 시작합니다. ꞏ 시작된 컨테이너들의 로그가 현재 터미널에 출력됩니다. ꞏ 로그를 실시간으로 모니터링 할 수 있으며, 터미널을 닫거나 종료하면 모든 서비스들이 함께 중지됩니다. | ꞏ -d 플래그는 "detached mode"를 의미합니다. ꞏ 이 명령어는 정의파일에 명시된 서비스들을 백그라운드에서 시작합니다. ꞏ 시작된 후 터미널이 즉시 반환되며, 로그가 출력되지 않습니다. ꞏ 컨테이너들은 백그라운드에서 계속 실행되며, 터미널을 닫아도 계속 실행됩니다. |
이번 프로젝트에서 얻은 두 가지 큼지막한 것 중 하나인 도커 컴포즈, 필요한 순간에 잘 써보자😋