728x90
Docker Compose
- Docker Compose는 여러 개의 Docker container를 정의하고 공유하는 도구이다.
- 각 container는 서비스로 구성되어 하나 이상의 네트워크와 볼륨으로 연결된다.
- Docker Compose를 이용하여 개발 환경을 손쉽게 구성하고 빠른 테스트를 경험할 수 있다.
- 위 사진처럼 한 번에 여러 이미지를 빌드하고 여러 컨테이너를 동작시킬 수 있다.
- 컨테이너 구성을 파일 하나로 쉽게 만들 수 있으므로 단일 컨테이너일 때에도 자주 사용된다.
- 다중 컨테이너의 유지보수 및 관리가 수월해진다.
- Dockerfile을 대체하지는 않는다.
- 개별 컨테이너의 -d, --rm은 디폴트임으로 따로 설정하지 않아도 된다.
- 컴포즈 파일에 특정된 모든 서비스에 대해 새 환경을 자동으로 생성한다.
- 모든 서비스를 네트워크에 추가하므로 네트워크 설정이 불필요하다.
- 그러나, 볼륨은 따로 제거되지 않으므로 down -v를 이용해 제거해줘야 한다.
- 기본적으로 도커를 다시 실행할 때 이미지에 대한 변경이 있는 경우에만 재빌드를 한다.
도커 컴포즈 명령어
docker-compose up // 컴포즈 실행
docker-compose up -d // detached 모드로 실행
docker-compose down // 모든 서비스를 중지하고 컨테이너를 제거
docker-compose down -v // 볼륨까지 제거
docker-compose build // 컨테이너 실행하지 않고 이미지만 재빌드하게 된다.
예시
version: "3.8"
# 도커 컴포즈 사양의 버전, Docker Docs에 최신 버전과 버전별 기능을 확일할 수 있다.
services: #해당 도커 컴포즈의 서비스(컨테이너)를 명시한다.
mongodb: # 컨테이너명의 일부로 들어감 (compose-01-starting-setup-mongodb-1)
# container_name: 컨테이너명 따로 지정 가능
image: 'mongo' # Docker hub에서 공식 이미지 사용
volumes: # 볼륨 추가
- data:/data/db
# environment:
# - MONGO_INITDB_ROOT_USERNAME=max
# - MONGO_INITDB_ROOT_PASSWORD=secret
env_file:
- ./env/mongo.env
backend: #컨테이너명의 일부로 들어감 (compose-01-starting-setup-backend-1)
build: ./backend # ./backend 경로의 Dockerfile을 찾아 이미지를 빌드한다.
# build: 위보다 좀더 긴 형태로 Dockerfile의 이름이 다른 이름인 경우에 사용
# context: ./backend
# dockerfile: NewDockerfile
ports: # 포트 설정
- '80:80'
volumes:
- logs:/app/logs
- ./backend:/app
- /app/node_modules
env_file:
- ./env/backend.env
depends_on: # backend 서버는 실행 중인 mongodb에 의존하기 때문에 의존성을 표현한다.
- mongodb
frontend: # 컨테이너명의 일부로 들어감 (compose-01-starting-setup-frontend-1)
build: ./frontend
ports:
- '3000:3000'
volumes:
- ./frontend/src:/app/src
stdin_open: true # 개방형 표준 입력 연결이 필요하다는 것을 도커에 알린다.
tty: true # 터미널에 연결 -it를 대신한다.
depends_on:
- backend
# 명명된 볼륨이므로 파일 끝의 최상위 volumes 키에도 추가해야 한다.
volumes:
data:
logs:
참고
Udemy - Docker & Kubernetes : 실전가이드
728x90
'[DevOps] > Docker' 카테고리의 다른 글
Docker로 다중 컨테이너 애플리케이션 구축하기 - 2 (네트워크로 묶기, 데이터 지속성 추가) (0) | 2023.07.07 |
---|---|
Docker로 다중 컨테이너 애플리케이션 구축하기 - 1 (여러 개의 컨테이너 만들기) (0) | 2023.07.07 |
Docker - 컨테이너 통신 (0) | 2023.07.05 |
Docker - Volumn & Bind Mount 이해하기 (0) | 2023.06.30 |
도커 이미지에 대해 자세히 살펴보기(dangling image, image inspect) (0) | 2023.06.21 |