Docker-compose yml 파일
예시
version: '3.3'
services:
webserver:
build: .
ports:
- "80:80"
depends_on:
- redis
redis:
image: redis:4.0
version
- 가장 먼저 버전을 명시함.
- 명시하지 않았을 경우 v1.0
- 여러개의 compose 파일 작성 시, 버전을 통일해야함
services
image
- 컨테이너의 바탕이 되는 이미지를 지정함
- 이미지 이름 또는 이미지 ID 중 하나를 명시
- 해당 이미지가 로컬에 있으면 그것을 사용하고, 그렇지 않으면 Docker Hub에서 당겨온다.
- 태그를 지정하지 않으면 최신버전 설치
build
- 이미지 작성을 Dockerfile에 기술하고, 이를 자동으로 빌드하여 베이스 이미지로 지정할 수 있다.
- build에는 도커파일의 경로를 지정한다.
- docker-compose.yml 파일이 있는 디렉토리가 기준이 된다
- 아래와 같이 경로와 파일명을 직접 매핑해줄 수도 있다. (context : 도커파일의 위치, dockerfile : 파일명)
bulid:
context: /data
dockerfile: Dockerfile-name
args:
arg1: arg1
arg2: arg2
command
entrypoint
- 마찬가지로 entrypoint도 아래와 같이 사용할 수 있다.
entrypoint:
- php
- -d
- memory_limit=-1
links
- 컨테이너 간 연결
- 링크를 사용하여 컨테이너를 서로 연결할 수 있다.
links:
-logserver
-logserver:log01
ports/expose
- 호스트포트:컨테이너포트 형태로 명시, 호스트의 포트번호 작성 안했을때는 -P(호스트 랜덤) 처럼 동작
- YAML은 xx:yy 형식을 시간으로 해석하기 때문에, 반드시 “”로 감싸서 정의해야한다.
ports:
- "3000"
- "8000:8000"
- 호스트에 대한 포트를 공개하지 않고 링크 기능을 사용하여 연결하는 컨테이너에게만 포트를 공개할 때는 expose를 지정한다.
expose:
- "3000"
- "8000"
- 로그 서버와 같이 호스트에서 직접 액세스하지 않고, WAS 기능을 갖고 있는 컨테이너를 경유해서만 액세스하고 싶은 경우 등에 사용된다.
depends_on
- 서비스의 의존 관계 정의
- 예를 들어 webserver 컨테이너를 시작하기 이전에 db, redis 컨테이너를 먼저 시작하고 싶은 경우
아래와 같이 정의함
services:
webserver:
depends_on:
- db
- redis
db:
redis:
- 하지만, depends_on은 컨테이너의 시작 순서만 제어할 뿐 애플리케이션의 이용 가능 상태까지 기다리는 것은 보장하지 않는다. 각 서비스가 준비가 완료될때까지 기다리는 것에 대해서는 애플리케이션 측에서 대책을 세워야한다.
environment
- 컨테이너 환경변수 지정
- YAML 배열 또는 해시 형식 중 하나로 변수를 지정한다.
environment:
- HOGE=fuga
- FOO
environment:
HOGE: fuga
FOO:
- 설정해야 할 환경변수가 많을 경우, 파일을 읽어들일 수도 있다.
env_file: envfile(파일명)
env_file:
- ./envfile1
- ./app/envfile2
- ./tmp/envfile3
container_name
- 컨테이너에 이름을 설정
- 컨테이너명은 고유해야함
container_name: name
labels:
- "com.example.description=ASDFASD"
labels:
"com.example.description=ASDFASD"
"com.example.description=ASDFASD"
- 설정한 라벨 확인할때는 docker-compose config 명령어 활용
volumes/volume_from
volumes:
- /var/lib/mysql
- cache/:/tmp/cache
- ~/configs:/etc/configs/:ro
- 다른 컨테이너로 부터 모든 볼륨을 마운트할때는 volumes_from에 컨테이너명을 지정한다.
volumes_from:
- log
Docker Compose의 주요 서브 명령어
docker-compose는 생략
up | 컨테이너 생성/시작 |
---|
ps | 컨테이너 목록 표시 |
logs | 컨테이너 로그 출력 |
run | 컨테이너 실행 |
start | 컨테이너 시작 |
stop | 컨테이너 정지 |
restart | 컨테이너 재시작 |
pause | 컨테이너 일시 정지 |
unpause | 컨테이너 재개 |
port | 공개 포트 번호 표시 |
config | 구성 확인 |
kill | 실행 중인 컨테이너 강제 정지 |
rm | 컨테이너 삭제 |
down | 리소스 삭제 |
- docker-compose 명령은 docker-compose.yml을 저장한 디렉토리에서 실행된다.
- 만일 이외의 위치를 지정하려면 -f 옵션으로 파일 경로를 명시한다.
- docker-compose -f {파일경로} up
- 서브 명령 이후에 컨테이너명을 지정하면 해당 컨테이너만 조작할 수 있다.
- docker-compose stop {컨테이너명}
여러 컨테이너 생성 (up)
- docker-compose up 을 사용하면 작성한 yml 파일을 바탕으로 여러 개의 컨테이너를 생성하여 시작한다.
- 지정할 수 있는 옵션
- -d : 백그라운드 실행
- —no-deps : 링크 서비스를 시작하지 않음
- —build : 이미지를 빌드
- —no-build : 이미지를 빌드하지 않음
- -t, —timeout : 컨테이너의 타임아웃을 초로 지정(기본 10초)
- —scale SERVICE=서비스 수 : 서비스 수를 지정
- server_a 컨테이너 10개, server_b 컨테이너 20개 시작하고 싶을 경우
- docker-compose up —scale server_a=10 —scale server_b=20
여러 리소스의 일괄 삭제(down)
- compose 정의 파일을 바탕으로 생성한 컨테이너나 이미지를 모아서 삭제할때는 down 명령어를 사용한다.
- down 명령은 실행중인 컨테이너를 정지시키고, 이미지, 네트워크, 데이터 볼륨을 일괄적으로 삭제한다.
- 옵션
- —rmi all : 모든 이미지 삭제
- —rmi local : 커스텀 태그가 없는 이미지만 삭제
- -v, —volumes : compose 정의 파일의 데이터 볼륨을 삭제