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 섹션에 의해
로컬에서 빌드된 이미지만 삭제
- all : 서버에서 받은 이미지와 로컬에서 빌드된 이미지를
--remove-orphans
옵션을 추가하면 compose에 정의되지 않은 서비스의 컨테이너만 삭제
참고한 사이트
- https://inf.run/YgbUY
- https://docs.docker.com/compose/compose-application-model/
- https://docs.docker.com/network/drivers/
- https://docs.docker.com/compose/compose-file/07-volumes/
- https://docs.docker.com/reference/cli/docker/compose/logs/
- https://docs.docker.com/reference/cli/docker/compose/pull/
- https://docs.docker.com/reference/cli/docker/compose/down/
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.