320x100
320x100

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

 

Docker - 파일 버전 3 참조 작성 - 참조 및 지침 이 주제에서는 Compose 파일 형식의 버전 3에 대해 설

이 주제에서는 Compose 파일 형식의 버전 3에 대해 설명합니다. 이것은 최신 버전입니다. Compose 파일 형식에는 1, 2, 2.x 및 3.x의 여러 버전이 있습니다. 아래 표는 간략히 보여줍니다. 각 버전에 포함

runebook.dev

 

 

 

 

 

300x250
728x90