다수의 docker build와 docker run 명령을 대체할 수 있는 단 하나의 구성으로 가지며 모든 컨테이너를 즉시 시작할 수 있습니다. 필요하다면 모든 이미지를 빌드하는 오케스트레이션 명령 도구 중 하나입니다.
하나의 명령을 사용하여 모든 컨테이너를 중지하고, 시작할 수 있습니다.
Docker Compose가 안되는 것
- Dockerfile을 대체할 수 없습니다.
- 이미지나 컨테이너를 대체할 수 없습니다
- 다수의 호스트에서 컨테이너를 관리할 수 없습니다.
Docker Compose Files 작성하기
컴포즈 파일에서 중요한 요스는 Service(컨테이너)입니다.
- 포트 오픈
- 환경 변수
- 볼륨
- 네트워크
- ...
기본적으로 터미널을 통해 도커 명령으로 할 수 있는 모든 것을 정의할 수 있습니다.
컴포즈 버전을 확인할 수 있습니다.
- https://docs.docker.com/compose/compose-file/
- services 아래 만들어지는 service명들은 모두 소스코드에서 하드코딩 될 수 있으며, 도커가 알아서 변환해줍니다.
# docker-compose.yaml
# version속성은 이전 버전과의 호환성을 위해 Compose 사양에 의해 정의됩니다.
version: "3.8"
# service의 하위로 컨테이너를 정의해야합니다.
services:
mongodb:
# 사용하려는 이미지 / 로컬 혹은 도커 이미지에서 조회됩니다.
image: "mongo"
volumes:
# -v 플래그와 함께 사용한 것과 정확히 동일합니다.
# 볼륨이름:/컨테이너 내부 경로 : read only
- data:/data/db:ro
environment:
# 총 3가지 방식으로 지정이 가능합니다.
Name: value
env_file:
- ./.env
# - PASSWORD=SECRET
networks:
# 컴포즈가 모든 서비스를 즉시 네트워크에 추가합니다.
backend:
# 완성 이미지를 사용하는 대신, 이미지를 빌드하는데 필요한 모든 정보를 제공할 수 있습니다.
# image: "goals-node"
# Dockerfile 위치를 지정하면 찾아서 동작할 수 있습니다.
# build: ./backend
# Dockerfile이 여러 개라면 특정 파일을 지정할 수 있습니다.
build:
context: ./backend # context의 위치를 주의, 해당 위치만 참조합니다.
dockerfile: Dockerfile
args: # 빌드 인수 참조 가능
- name=value
ports:
- "80:80" # 호스트 포트:내부포트 매핑
volumes:
- logs:/app/logs
# 바인드 마운트
- ./backend:/app
# 익명 볼륨
- /app/node_modules
# 여러 컨테이너가 동시에 생길 때, 의존성을 해결하기 위함
depends_on:
- mongodb
- ...
frontend:
# 인터렉티브 모드를 추가
build: ./frontend
ports:
- "3000:3000"
volumes:
# 바인드마운트
- ./frontend/src:/app/src
# 인터렉티브 모드
stdin_open: true
tty: true # -it 플래그 / 터미널에 연결
depends_on:
- backend
# 네임드 볼륨을 사용하기 위해 생성해야합니다.
# 다른 서비스에서 동일한 볼륨 이름을 사용하면 볼륨은 공유됩니다.
volumes:
data:
logs:
- 컨테이너 시작과 중지
$ docker-compose up
$ docker-compose down
- docker-compose 명령 변형
$ docker-compose --build # build key가 존재한다면 이미지 빌드를 강제합니다. image key가 아님
- service명은 컨테이너 이름 자체가 아닌, 컨테이너 이름의 일부분입니다.
- 전체 이름은 현재 디렉토리와 여러 정보들끼리 복합적으로 만들어지며 컨테이너 이름을 지정하려고 하는 경우엔 container_name을 입력해야합니다.
services:
mongodb:
# 사용하려는 이미지 / 로컬 혹은 도커 이미지에서 조회됩니다.
image: "mongo"
volumes:
# -v 플래그와 함께 사용한 것과 정확히 동일합니다.
# 볼륨이름:/컨테이너 내부 경로 : read only
- data:/data/db:ro
environment:
# 총 3가지 방식으로 지정이 가능합니다.
Name: value
env_file:
- ./.env
# - PASSWORD=SECRET
networks:
# 컴포즈가 모든 서비스를 즉시 네트워크에 추가합니다.
'TIL > 개념정리' 카테고리의 다른 글
Docker 배포 (0) | 2024.04.03 |
---|---|
PyTorch 튜토리얼 (0) | 2024.04.01 |
Amazon Bedrock과 Langchain Workshop (0) | 2024.03.21 |
Docker network (0) | 2024.03.20 |
Docker ARG / ENV Variables(인수와 환경변수) (0) | 2024.03.18 |