반응형
Docker Compose 구성 파일 (docker-compose.yml)
일반적으로 어플리케이션은 여러 컴포넌트(웹 서버, 어플리케이션 서버, 캐시, DB 등)와 함께 구동된다.
또한 한 어플리케이션도 다수의 서비스로 분리하고, 이것들이 모여 하나의 어플리케이션으로 역할을 하기도 한다.
각각의 구성요소를 컨테이너로 만들어 개별로 운영하는 것은 매우 번거로울 것 이다.
Docker Compose를 이용하면 여러 컨테이너를 일괄 관리하고, 설정하고, 의존성을 관리할 수 있다.
Compose 정의 파일은 사용할 Docker Engine에 맞는 Compose File Format Version을 지정해야 한다.
호환되는 버전은 https://docs.docker.com/compose/compose-file/ 에서 찾을 수 있다.
# 버전 지정
version <사용할 Docker Engine에 알맞은 버전 선택>
# 서비스 정의
services:
<서비스 이름>:
image: <사용할 이미지 이름>:<이미지 태그>
build: <Dockerfile이 존재하는 경로>
command:
- <명령어1>
- <명령어2>
- ...
entrypoint:
- <명령어1>
- <명령어2>
- ...
links:
- <서비스 이름>
- <서비스 이름>:<앨리어스명>
- ...
depends_on:
- <서비스 이름>
- ...
ports:
- "<컨테이너의 포트 번호>"
- "<호스트 머신의 포트 번호>:<컨테이너의 포트 번호>"
- ...
expose:
- "<링크로 연결하는 컨테이너에만 공개할 포트 번호>"
- ...
environment:
- <key>: <value>
- ...
env_file:
- <환경변수를 정의한 파일 이름>
- ...
container_name: <커스텀 컨테이너 이름>
labels:
- "<key>=<value>"
- ...
volumes:
- <마운트 할 데릭토리 경로>
- <호스트의 디렉토리 경로>:<컨테이너의 디렉토리 경로>
- <호스트의 디렉토리 경로>:<컨테이너의 디렉토리 경로>:ro
- ...
networks:
- <네트워크 이름>
- ...
# 네트워크 정의
networks:
<네트워크 이름>:
# 데이터 볼륨 정의
volumes:
<볼륨 이름>:
위에서 의미가 애매모호하게 보이는 것들만 따로 정리한다.
- build
- Dockerfile이 존재하는 경로를 지정한다. (절대경로 가능)
- docker-compose 명령으로 실행하면 지정한 Dockerfile이 자동으로 빌드되고, 생성된 컨테이너가 실행된다.
- Dockerfile 이름이 다르다면 다음과 같이 지정할 수 있다.
build:
context: <Dockerfile이 존재하는 경로>
dockerfile: <Dockerfile 이름>
args:
<key1>: <value1>
<key2>: <value2>
- command
- 컨테이너 안에서 작동하는 명령 설정
- entrypoint
- entrypoint를 덮어쓴다.
- links
- 다른 컨테이너로의 연결이 필요할 때 사용
- ports / expose
- ports는 호스트 머신에 공개할 포트 번호를 지정한다.
- expose는 links 기능으로 연결할 컨테이너들에게만 공개할 포트 번호를 지정한다.
- depends_on
- depends_on은 컨테이너 시작 순서만 제어한다.
즉, 컨테이너 시작 후 내부에서 애플리케이션이 실행이 완료되는 시점까지 제어하는 것은 아니다. - 따라서 의존이 있는 어플리케이션 간의 제어는 직접 해야 한다.
- depends_on은 컨테이너 시작 순서만 제어한다.
더 자세한 사용법은 아래의 링크를 참고한다.
Docker Compose 관리
생성 및 시작
###
# 컨테이너 생성과 시작을 한 번에
###
$ docker-compose up [서비스명...]
###
# 컨테이너 생성 후 시작
###
$ docker-compose up --no-start [서비스명...]
$ docker-compose start [서비스명...]
###
# 컨테이너 재시작
###
$ docker-compose restart [서비스명...]
종료 및 삭제
###
# 컨테이너 종료와 삭제를 한 번에
###
$ docker-compose down
###
# 컨테이너 종료 후 삭제
###
$ docker-compose stop [서비스명...]
$ docker-compose rm [서비스명...]
###
# 컨테이너 강제 정지
# - SIGHUP : 프로그램 재시작
# - SIGINT : 키보드로 인터럽트 (ctrl+c 로 송신 가능)
# - SIGQUIT : 키보드에 의한 중지. (ctrl+\ 로 송신 가능)
# - SIGTERM : 프로세스 정상 종료
# - SIGKILL : 프로세스 강제 종료 (-s 옵션을 넣지 않으면 기본값)
# - SIGTOP : 프로세스 일시 정지
###
$ docker-compose kill -s <시그널>
가동 중인 컨테이너 확인
$ docker-compose ps
실행 중인 프로세스 확인
$ docker-compose top
외부에 바인딩 된 포트 확인
$ docker-compose port
로그 확인
$ docker-compose logs [서비스명...]
컨테이너 설정 확인
$ docker-compose config
컨테이너에서 명령 실행
$ docker-compose run [서비스명] 명령어
더 자세한 Docker Compose 명령어는 아래의 링크를 참고한다.
반응형
'IT 인프라 > DevOps' 카테고리의 다른 글
Kubernetes ConfigMap으로 설정정보 관리하기 (0) | 2019.11.26 |
---|---|
Docker 이미지 용량을 줄이는 Tip (0) | 2019.11.19 |
나만의 Dockerfile Cheat Sheet (0) | 2019.11.18 |
나만의 Docker Cheat Sheet (0) | 2019.11.16 |
일반 계정으로 docker 명령어 사용하기 (0) | 2019.11.16 |