services
: 컨테이너에서 실행할 서비스 정의
Services 하위 옵션
cap_add / cap_drop
: 컨테이너의 기능을 추가하거나 삭제
: docker stack에서는 무시되는 옵션
: NET_ADMIN, SYS_ADMIN 등 cgroups의 특정 Capability를 컨테이너에 추가
※ cgroups
: 리눅스에서 프로세스와 쓰레드를 그룹화하여 관리하는 기술
: 호스트의 자원을 그룹별로 할당하거나 제한을 두는 등 관리
: cpu / cpuacct / cpuset / memory / devices / freezer / net_cls / blkio 등의 cgroups 서브시스템이 존재
cgroup_parent
: 컨테이너의 상위 cgroup 설정
: docker stack에서는 무시되는 옵션
container_name
: 컨테이너의 이름을 정의
: docker stack에서는 무시되는 옵션
credential_spec
: Windows 컨테이너에서 사용하는 자격증명 옵션
build
: 도커 이미지 빌드 시에 적용되는 옵션
: docker stack에서는 무시되는 옵션
: build: 경로
ㆍ하위옵션
: context (경로 / 도커 파일을 포함하는 디렉터리의 경로 혹은 git 저장소의 URL)
: dockerfile (도커 파일 경로)
: args (빌드 프로세스 중 액세스 할 수 있는 매개변수 / 도커 파일에서 인수를 지정후 사용
/ 인수 생략시 compose가 실행중인 환경의 값이 적용)
: cache_from (캐시 확인에 사용하는 이미지 목록)
: lables (이미지에 대한 메타 데이터 추가 / DNS 역표기법 사용)
: shm_size (빌드 될 컨테이너의 /dev/shm 파티션 크기 설정 / 컨테이너의 램 디스크 설정)
: target (멀티스테이지 빌드에서 생성할 각각의 이미지)
ARG buildno
ARG gitcommithash
RUN echo "Build number: $buildno"
RUN echo "Based on commit: $gitcommithash"
version: "3.7"
services:
webapp:
build:
context: ./dir
dockerfile: Dockerfile-alternate
args:
buildno: 1
gitcommithash: cdc3b19
cache_from:
- alpine:latest
- 2mukee/main_server:3.5
labels:
com.example.description: "main server"
com.example.department: "develop"
command
: 컨테이너를 생성하고 실행할 명령어
configs
: config 파일을 지정하여 컨테이너에 대한 옵션 설정
version: "3.7"
services:
redis:
image: redis:latest
deploy:
replicas: 1
configs:
- source: my_config
target: /redis_config
uid: '103'
gid: '103'
mode: 0440
configs:
my_config:
file: ./my_config.txt
my_other_config:
external: true
depends_on
: 서비스간 종속성 설정
: 서비스 실행시 종속성 순서로 시작되고 종료시 순서대로 종료
: docker stack에서는 무시되는 옵션
version: "3.7"
services:
web:
build: .
depends_on:
- db
- redis
redis:
image: redis
db:
image: postgres
deploy
: 서비스 배포 및 실행에 관련된 구성 설정
deploy 하위옵션
ㆍendpoint_mode
: 스웜에 연결하는 외부 클라이언트에 대한 서비스 검색 방법 지정
: endpoint_mode: vip (기본 값 / 가상의 IP를 서비스에 할당하고 클라이언트와 worker node간 요청 라우팅)
: endponit_mode: dnsrr (dns 라운드로빈 / 서비스 이름에 대한 쿼리가 IP주소 목록 반환하여 DNS 항목 설정)
ㆍlabels
: 서비스에 대한 별명 설정
: 서비스에 대해서만 설정되며 서비스의 컨테이너에는 설정되지 않음
: 컨테이너에 설정하기 위해서는 deploy 옵션 밖에서 labels 설정
ㆍmode
: 스웜의 컨테이너 모드
: replicated (기본 값 / 한 개 노드에 여러 서비스)
: global (한 개의 노드에 하나의 서비스)
ㆍplacement
: 어떤 서비스를 실행할 때 조건을 만족하는 특정 Node에서만 실행되도록 배치 위치를 제한하고 모아주는 기능
version: "3.7"
services:
db:
image: postgres
deploy:
placement:
constraints:
- node.role == manager
- engine.labels.operatingsystem == ubuntu 14.04
preferences:
- spread: node.labels.zone
ㆍreplicas
: mode가 replicated일 때, 실행되야하는 컨테이너 수
version: "3.7"
services:
worker:
image: dockersamples/examplevotingapp_worker
networks:
- frontend
- backend
deploy:
mode: replicated
replicas: 6
ㆍresources
: 리소스 제약 구성 설정
: cpu_shares, cpu_puota, mem_limit 등 이전 버전에서 비 swarm모드에서 제공하던 제한 조건 옵션 대체
version: "3.7"
services:
redis:
image: redis:alpine
deploy:
resources:
limits:
cpus: '0.50'
memory: 50M
reservations:
cpus: '0.25'
memory: 20M
ㆍrestrat_policy
: 컨테이너가 종료 될때 컨테이너를 다시 시작하는 여부
: condtion: none(설정안함), on-failure(장애 발생시), any (기본 값 / 어떤 상황이든)
: delay (기본값 = 0 / 재시작 시도 간 대기시간)
: max_attempts (기본값=사용안함 / 컨테이너 재시작 시도 횟수)
: window (기본값=즉시결정 / 재시작 성공 여부를 결정하기 전 대기하는 시간)
version: "3.7"
services:
redis:
image: redis:alpine
deploy:
restart_policy:
condition: on-failure
delay: 5s
max_attempts: 3
window: 120s
ㆍrollback_config
: 서비스 업데이트 실패시 롤백하는 방법
: parallelism (한 번에 롤백할 컨테이너 수 / 0으로 설정시 모든 컨테이너가 동시에 롤백)
: delay (기본값=0 / 각 컨테이너 그룹 사이에 대기하는 시간)
: failure_action (기본값=pause / 롤백 실패 시 수행할 작업 / continue, pause)
: monitor (기본값=0 / 각 작업 업데이트 후 실패를 모니터링 하기 위한 시간<단위에 표시> / ns, us, ms, s, m, h)
: max_failure_ratio (기본값=0 / 롤백 중 허용되는 실패율)
: order (기본값=stop-first / 롤백 중 작업 순서 / stop-first <새로운 작업 시작 전에 이전작업 정지>, start-first<새 작업 실행 후 실행중 작업에 중첩되어 이전 작업 실행>)
ㆍupdate_config
: 서비스 업데이트 구성 방법
: parallelism (한 번에 업데이트할 컨테이너 수)
: delay (기본값=0 / 각 컨테이너 그룹 업데이트 사이 대기 시간)
: failure_action (기본값=pause / 업데이트 실패 시 수행할 작업 / continue, rollback, pause)
: monitor (기본값=0 / 각 작업 업데이트 후 실패를 모니터링 하기 위한 시간<단위에 표시> / ns, us, ms, s, m, h)
: max_failure_ratio (기본값=0 / 업데이트 중 허용되는 실패율)
: order (기본값=stop-first / 업데이트 중 작업 순서 / stop-first <새 작업 실행전 오래된 작업 중지>, start-first<새 작업 실행 후 실행중 작업에 중첩되어 이전 작업 실행>)
version: "3.7"
services:
vote:
image: dockersamples/examplevotingapp_vote:before
depends_on:
- redis
deploy:
replicas: 2
update_config:
parallelism: 2
delay: 10s
order: stop-first
entrypoint
: 컨테이너 생성시 동시에 실행되는 명령어
: yml 방식 혹은 cmd 방식으로 작성 가능
entrypoint:
- php
- -d
- zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20100525/xdebug.so
- -d
- memory_limit=-1
- vendor/bin/phpunit
or
entrypoint: /code/entrypoint.sh
environment
: 환경변수 추가
environment:
- RACK_ENV=development
- SHOW=true
- SESSION_SECRET
env_file
: 컨테이너 환경변수 설정을 위한 환경변수 파일 추가
: 목록으로도 작성가능
env_file:
- ./common.env
- ./apps/web.env
- /opt/secrets.env
expose
: 서비스 내부에 열려있는 포트
: stack에서는 불필요 / stack 사용시 같은 스택 내의 컨테이너는 포트 상관없이 자유롭게 통신가능
external_links
: 서비스와 연결할 외부의 호스트 혹은 컨테이너에 대한 링크 설정
: docker stack에서는 무시되는 옵션
external_links:
- redis_1
- project_db_1:mysql
- project_db_1:postgresql
extra_hosts
: 호스트명 매핑 추가
: 외부 호스트의 이름 설정
extra_hosts:
- "somehost:162.242.195.82"
- "otherhost:50.31.209.229"
healthcheck
: 컨테이너의 상태가 정상인지 체크
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost"]
interval: 1m30s
timeout: 10s
retries: 3
start_period: 40s
network_mode
: 컨테이너의 네트워크 모드 설정
: docker stack에서는 무시되는 옵션
network_mode: "bridge"
network_mode: "host"
network_mode: "none"
network_mode: "service:[service name]"
network_mode: "container:[container name/id]"
※ 참조 (https://2mukee.tistory.com/234)
security_opt
: 컨테이너에 대한 기본 레이블 구성표 재정의
: docker stack에서 무시되는 옵션
security_opt:
- label:user:USER
- label:role:ROLE
image
: 서비스의 기반이 될 시작할 컨테이너 이미지 파일
init
: 서비스 시작 시 초기화 여부를 설정 (true / false)
: /usr/libexec/docker-init에 선언된 초기화 바이너리를 통해 데몬을 초기화
isolation
: 컨테이너 격리
: 리눅스에서는 default만 지원 / windows에서 default, process, hyperv 지원
networks
: 컨테이너에 대한 네트워크 설정
: 도커 네트워크 생성 후 해당 네트워크의 이름 삽입
ㆍ하위 옵션
: aliases (네트워크에 대한 별명 지정)
version: "3.7"
services:
web:
image: "nginx:alpine"
networks:
- new
worker:
image: "my-worker-image:latest"
networks:
- legacy
db:
image: mysql
networks:
new:
aliases:
- database
legacy:
aliases:
- mysql
networks:
new:
legacy:
ㆍipv4_address / ipv6_address
: 컨테이너에 대한 고정 IP 주소 설정
version: "3.7"
services:
app:
image: nginx:alpine
networks:
app_net:
ipv4_address: 172.16.238.10
ipv6_address: 2001:3984:3989::10
pid
: 컨테이너와 호스트 OS 사이에 PID 주소공간 공유
pid: "host"
ports
: 호스트OS와 컨테이너 간 포트포워딩 설정
ports:
- "3000"
- "3000-3005"
- "8000:8000"
- "9090-9091:8080-8081"
- "49100:22"
- "127.0.0.1:8001:8001"
- "127.0.0.1:5000-5010:5000-5010"
- "6060:6060/udp"
ports:
- target: 80 # 컨테이너 내부의 포트
published: 8080 # 호스트에 공개할 포트
protocol: tcp # 포트의 프로토콜 tcp or udp
mode: host # 모드 설정 (ingress : 부하 균형 / host)
restart
: 재시작 옵션
: docker stack에서는 무시되는 옵션
restart: "no"
restart: always
restart: on-failure
restart: unless-stopped
secrets
: 암호화 파일 추가
version: "3.7"
services:
redis:
image: redis:latest
deploy:
replicas: 1
secrets:
- my_secret
- my_other_secret
secrets:
my_secret:
file: ./my_secret.txt
my_other_secret:
external: true
version: "3.7"
services:
redis:
image: redis:latest
deploy:
replicas: 1
secrets:
- source: my_secret
target: redis_secret
uid: '103'
gid: '103'
mode: 0440
secrets:
my_secret:
file: ./my_secret.txt
my_other_secret:
external: true
stop_grace_period
: SIGKILL을 전송하기 전 컨테이너를 중지하기 위해 시도하는 시간 지정
stop_grace_period: 1m30s
stop_signal
: 컨테이너 중지를 대체할 신호 설정
: docker stack에서는 무시되는 옵션
stop_signal: SIGUSR1
sysctls
: 컨테이너에 설정할 매개 변수, 배열, dictionary 등 설정
: docker stack에서는 무시되는 옵션
sysctls:
net.core.somaxconn: 1024
net.ipv4.tcp_syncookies: 0
tmpfs
: 컨테이너 내부에 임시 파일 시스템 마운트
: docker stack 사용시 무시되는 옵션
tmpfs:
- /run
- /tmp
unlimits
: 컨테이너에 대한 소프트링크 및 하드링크 제한
ulimits:
nproc: 65535
nofile:
soft: 20000
hard: 40000
userns_mode
: 컨테이너의 네임 스페이스 이름 설정
: docker stack 사용시 무시되는 옵션
volumes
: 컨테이너와 호스트OS 간 공유할 디렉터리 설정
Refference
'Container > Docker Compose' 카테고리의 다른 글
도커 컴포즈 및 스택 yml 파일 옵션 정리3 - networks (0) | 2021.11.06 |
---|---|
도커 컴포즈 및 스택 yml 파일 옵션 정리2 - volumes (0) | 2021.11.06 |
도커 컴포즈와 스택의 차이 (0) | 2021.11.05 |
다시 정리해보는 Docker - Docker Compose 편 (0) | 2021.10.19 |
도커 컴포즈 파일 작성 기본 (0) | 2021.09.21 |