포스트

Docker - docker compose

여러 개의 docker container를 실행할 경우 docker compose.yml 설정 파일에 정의하여 한 번에 관리할 수 있다.


규칙

1. compose 파일 이름

compose 설정 파일 이름은 compose.yml 또는 compose.yaml, docker-compose.yml, docker-compose.yaml중 하나로 해야 한다.

공식 문서에서 권장하는 이름은 compose.yaml이다.
docker-compose.(yml , yaml) 형식의 이름은 이전 버전에서 사용했던 이름으로 계속 지원되기 때문에 사용할 수 있다.

2. compose 파일 경로

프로젝트 루트 위치에 compose.yml 파일을 위치 시키는 것이 권장된다.

만약 프로젝트 루트 위치가 아닌 다른 특정 위치에 compose.yml 파일을 두어야 한다면
docker compose 명령어 실행 시 -f 옵션을 이용하여 파일 경로를 추가해주어 실행해야 한다.

또한 -f 옵션을 이용해서 특정 파일 경로의 compose.yml을 실행한 경우 이후에 compose 관련 명령어 실행 시 -f 옵션을 계속 사용해야 한다.


compose.yml 작성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
version: {DOCKER_COMPOSE_VERSION}

services:
  SERVICE_1_NAME:
    build: {IMAGE:TAG 또는 dockerfile위치}
    ports: {외부 포트}:{내부 포트}
    environment:
      - {KEY=VALUE}
      - {KEY=VALUE}
    volumes:
      - {VOLUME_NAME}:{/container/mount/path}
    depends_on: 
      - {OTHER_SERVICE_NAME}
    networks:
      - {DOCKER_NETWORK_NAME}

  SERVICE_2_NAME:
    build: {IMAGE}:{TAG}
    ports: {외부 포트}:{내부 포트}
    environment:
      - {KEY=VALUE}
      - {KEY=VALUE}
    volumes:
      - {VOLUME_NAME}:{/container/mount/path}
    depends_on: 
      - {OTHER_SERVICE_NAME}
    networks:
      - {DOCKER_NETWORK_NAME}

networks:
  NETWORK_NAME:
    driver: bridge # 네트워크 드라이버
    external: true # 외부 네트워크 사용 여부

# host volume path 정의
volumes:
  VOLUME_NAME: 
    driver: local
    driver_opts:
      o: bind
      type: none
      device: {/path/dir}


docker compose 명령어

compose 설정 파일 실행

1
2
3
4
5
# ./compose.yml 위치
docker compose up -d --build

# ./docker/compose.yml 위치
docker compose -f docker/compose.yml up  -d --build
  • --build : 이미지를 새로 build해서 컨테이너 실행


compose로 실행된 컨테이너 상태 조회

1
2
3
4
5
# ./compose.yml 위치
docker compose ps -a

# ./docker/compose.yml 위치
docker compose -f docker/compose.yml ps -a


compose로 실행된 컨테이너 로그 조회

1
2
3
4
5
# ./compose.yml 위치
docker compose logs 

# ./docker/compose.yml 위치
docker compose -f docker/compose.yml logs 
  • 명령어의 마지막에 service 이름을 적어주면 해당 서비스의 로그만 조회


compose.yml에 사용한 이미지 최신화

compose.yml 설정 파일에 사용 된 이미지의 최신 파일이 있을 경우 내려받음

1
2
3
4
5
# ./compose.yml 위치
docker compose pull 

# ./docker/compose.yml 위치
docker compose -f docker/compose.yml pull 


compose로 실행된 컨테이너 중지

1
2
3
4
5
# ./compose.yml 위치
docker compose stop

# ./docker/compose.yml 위치
docker compose -f docker/compose.yml stop 
  • 명령어의 마지막에 service 이름을 적어주면 해당 서비스만 중지


compose로 실행된 중지된 컨테이너 실행

1
2
3
4
5
# ./compose.yml 위치
docker compose start

# ./docker/compose.yml 위치
docker compose -f docker/compose.yml start 
  • 명령어의 마지막에 service 이름을 적어주면 해당 서비스만 실행한다.


compose로 실행된 컨테이너 삭제

1
2
3
4
5
# ./compose.yml 위치
docker compose down

# ./docker/compose.yml 위치
docker compose -f docker/compose.yml down 
  • 명령어의 마지막에 service 이름을 적어주면 해당 서비스만 종료
  • --rmi [all | local] 옵션을 추가하면 사용된 image도 함께 삭제
    • all : 서버에서 받은 이미지와 로컬에서 빌드된 이미지를 모두 삭제
    • local : compose.yml의 build 섹션에 의해 로컬에서 빌드된 이미지만 삭제
  • --remove-orphans 옵션을 추가하면 compose에 정의되지 않은 서비스의 컨테이너만 삭제




참고한 사이트

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.