Docker Compose를 사용한 멀티 컨테이너 관리
Docker Compose
는 멀티 컨테이너
를 한번에 관리
할 수 있는 도구입니다. docker-compose.yml
파일을 작성하여 Nginx, MongoDB 그리고 백엔드 서버로 된 멀티 컨테이너 애플리케이션을 설정하는 방법 및 명령어를 알아보겠습니다.
Docker Compose 파일 구조
Docker Compose
는 yml
또는 yaml
파일로 작성합니다. docker-compose.yml
파일은 다음과 같은 구조로 작성합니다.
1 | version: "3" |
서비스 설명
- Nginx
- image: Nginx는
arm64v8/nginx
이미지를 사용합니다. - restart:
unless-stopped
옵션을 사용하여 컨테이너가 종료되면 다시 시작합니다. - volumes: 호스트의
./data/nginx
디렉토리를 컨테이너의/etc/nginx/conf.d
디렉토리로 연결합니다. - ports: 호스트의 80, 443 포트를 컨테이너의 80, 443 포트로 연결합니다.
- depends_on:
server
컨테이너가 실행된 후에nginx
컨테이너가 실행됩니다. - command: Nginx를 주기적으로 리로드하고, 포그라운드에서 실행합니다.
- Certbot
- image: Certbot는
certbot/certbot:arm64v8-nightly
이미지를 사용합니다. - restart:
unless-stopped
옵션을 사용하여 컨테이너가 종료되면 다시 시작합니다. - volumes: 호스트의
./data/certbot
디렉토리를 컨테이너의/etc/letsencrypt
,/var/www/certbot
디렉토리로 연결합니다. - entrypoint: 인증서를 갱신하는
Certbot
명령을 실행합니다.
- MongoDB
- image: MongoDB는
mongo:4.4.18
이미지를 사용합니다. - restart:
always
옵션을 사용하여 컨테이너가 종료되면 다시 시작합니다. - ports: 호스트의 19328 포트를 컨테이너의 27017 포트로 연결합니다.
- volumes: 호스트의
./data/mongodb/data
디렉토리를 컨테이너의/data/db
디렉토리로 연결합니다.
- Backend Server
- image: 백엔드 서버는
xxxxxxxxxxxx.dkr.ecr.ap-northeast-2.amazonaws.com/server:latest
이미지를 사용합니다. (ECR 이미지) - restart:
always
옵션을 사용하여 컨테이너가 종료되면 다시 시작합니다. - volumes: 호스트의
./server
,/server/node_modules
디렉토리를 컨테이너의/server
,/server/node_modules
디렉토리로 연결합니다. - links:
mongodb
컨테이너를server
컨테이너에 연결합니다. - depends_on:
mongodb
컨테이너가 실행된 후에server
컨테이너가 실행됩니다. - env_file:
.env
파일을 읽어 환경 변수를 설정합니다.
설정 파일 작성 요령
- 버전 정의: version: “3”은
Docker Compose
파일의 버전을 나타냅니다. 여기서는 버전 3을 사용합니다. - 서비스 정의: 각 서비스는 독립적으로 정의되며, 이미지, 빌드경로, 포트, 볼륨, 환경변수 등을 설정할 수 있습니다.
- 의존성 관리:
depends_on
을 사용하여 서비스 간의 의존성을 설정할 수 있습니다.depends_on
으로 설정된 서비스를 먼저 실행한 후 다음 서비스를 실행합니다. - 환경 변수 설정:
env_file
을 사용하여.env
파일을 읽어 환경 변수를 설정할 수 있습니다. - 링크 설정:
links
를 사용하여 컨테이너 간의 연결을 설정합니다.links
로 설정된 서비스를 다른 서비스에 연결합니다. - 컨테이너 재시작 정책
restart
를 사용하여 컨테이너의 재시작 정책을 설정할 수 있습니다.no
,always
,on-failure
,unless-stopped
등의 옵션을 사용할 수 있습니다.
- 컨테이너 실행 명령
command
를 사용하여 컨테이너 실행 명령을 설정할 수 있습니다.
- 로그 출력:
logging
옵션을 사용하여 로그 출력을 설정할 수 있습니다.driver
,options
등의 옵션을 사용하여 로그 드라이버와 로그 옵션을 설정할 수 있습니다.
Docker Compose 명령어
- 이미지 다운로드:
docker-compose pull
명령으로 이미지를 다운로드합니다. - 빌드 및 실행:
docker-compose up -d
명령으로docker-compose.yml
파일을 실행합니다.-d
옵션을 사용하여 백그라운드에서 실행합니다. 파일이 있는 디렉토리에서 실행합니다. - 로그 확인:
docker-compose logs -f
명령으로 실행 중인 컨테이너의 로그를 확인합니다.-f
옵션을 사용하여 실시간 로그를 확인합니다.- 서비스별 로그 확인:
docker-compose logs -f [service_name]
명령으로 특정 서비스의 로그를 확인합니다.
- 서비스별 로그 확인:
- 상태 확인:
docker-compose ps
명령으로 실행 중인 컨테이너의 상태를 확인합니다. - 중지:
docker-compose down
명령으로 실행 중인 컨테이너를 중지합니다. 파일이 있는 디렉토리에서 실행합니다.
Docker Compose 컨테이너 업데이트 스크립트 (dockerUpdate.sh)
1 |
|
aws_login
:AWS ECR
에 로그인합니다.docker_pull
:docker-compose pull
명령으로 이미지를 다운로드합니다.docker_up
:docker-compose up -d
명령으로docker-compose.yml
파일을 실행합니다.docker_remove_all_unused
:docker system prune -a
명령으로 사용하지 않는 이미지, 컨테이너, 네트워크, 볼륨을 삭제합니다.main
: 메인 함수로 스크립트를 실행합니다.
정리
Docker Compose
를 사용하면 멀티 컨테이너
를 한번에 관리
할 수 있습니다. docker-compose.yml
파일을 작성하여 Nginx
, MongoDB
그리고 백엔드 서버
로 된 멀티 컨테이너 애플리케이션을 설정하는 방법과 명령어를 알아보았습니다. 또한 dockerUpdate.sh
스크립트를 사용하여 모델 업데이트
를 자동화할 수 있습니다. 대략적인 yml
구조 및 명령어를 참고하여 Docker Compose
를 활용하여 멀티 컨테이너 애플리케이션을 관리해보세요.