docker 시리즈 - docker-compose.yml상해-(二)

전송문:docker-compose.yml 상해-(一)
앞에서 말하기:
본문은 버젼 3 기반
devices
장치 매핑 목록 지정(docker run - device 역할과 동일)
devices:
  - "/dev/ttyUSB0:/dev/ttyUSB0"

dns
DNS 서버를 사용자 정의합니다.단일 값 또는 목록일 수 있습니다.(docker run --dns와 같은 역할)
dns: 8.8.8.8
dns:
  - 8.8.8.8
  - 9.9.9.9

dns_search
DNS 검색 도메인 설정 (docker run --dns-search와 동일)
dns_search: example.com
dns_search:
  - dc1.example.com
  - dc2.example.com

entrypoint
컨테이너의 기본 entrypoint 명령을 덮어씁니다. (docker run --entrypoint와 같은 역할)
entrypoint: /code/entrypoint.sh

dockerfile과 같은 엔트리 포트도 목록일 수 있습니다.
entrypoint:
    - php
    - -d
    - zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20100525/xdebug.so
    - -d
    - memory_limit=-1
    - vendor/bin/phpunit
:entrypoint를 설정하면 ENTRYPOINT를 사용하고 Dockerfile 명령은 서비스 이미지에 설정된 기본 입구점을 덮어쓰고 거울에 있는 기본 명령을 지웁니다. 이것은 CMD Dockerfile에 명령이 있으면 무시한다는 것을 의미합니다.
env_file
파일에서 환경 변수를 추가합니다.단일 값 또는 목록일 수 있습니다.
Compose 파일 docker-compose -f FILE을 지정한 경우 in envfile의 경로는 파일이 있는 디렉터리와 같습니다.만약 여러 파일의 변수가 이름이 바뀌면 뒤의 변수는 앞의 변수를 덮어쓰고,environment의 값은 env 를 덮어씁니다.파일 값 Compose 환경 파일의 각 행은 VAR=VAL 형식을 사용합니다.로 시작하는 # 행은 주석으로 간주되고 무시됩니다.빈 행도 무시됩니다.
env_file: .env
env_file:
  - ./common.env
  - ./apps/web.env
  - /opt/secrets.env

environment
환경 변수를 추가합니다.배열이나 사전을 사용할 수 있습니다.YML 파서에서 True 또는 False로 변환되지 않도록 하려면 모든 부울 값(true, false, yes, no)을 따옴표로 묶어야 합니다.environment의 값은 env 를 덮어쓸 수 있습니다file의 값 (docker run --env와 동일).
environment:
  RACK_ENV: development
  SHOW: 'true'
  SESSION_SECRET:
environment:
  - RACK_ENV=development
  - SHOW=true
  - SESSION_SECRET

expose
호스트에 게시하지 않고 포트를 공개합니다. 링크된 서비스만 접근할 수 있습니다.내부 포트만 지정할 수 있습니다.
expose:
 - "3000"
 - "8000"

external_links
연결이 docker-compose에 없습니다.yml에서 정의된 용기 또는 compose에서 관리하지 않는 용기 (docker run이 시작하는 용기, v3 버전에서 swarm 배치를 사용할 때 이 옵션을 무시합니다)
external_links:
 - redis_1
 - project_db_1:mysql
 - project_db_1:postgresql

extra_hosts
용기에 host를 추가하여/etc/hosts에 기록합니다. (docker run --add-host와 같은 역할)
extra_hosts:
 - "somehost:162.242.195.82"
 - "otherhost:50.31.209.229"

/etc/hosts 이 서비스의 내부 용기에 IP 주소와 호스트 이름을 가진 항목을 만듭니다. 예를 들어:
162.242.195.82  somehost
50.31.209.229   otherhost

healthcheck
v2.1 이상 버전, Dockerfile의 HEALTHCHECK 명령과 같은 컨테이너 상태 점검 정의
healthcheck:
  test: ["CMD", "curl", "-f", "http://localhost"]
  interval: 1m30s
  timeout: 10s
  retries: 3
  start_period: 40s

test
컨테이너의 상태를 검사하는 명령입니다. 이 옵션은 문자열 또는 목록이어야 합니다. 첫 번째 항목은 NONE, CMD 또는 CMD-SHELL이어야 합니다. 문자열이면 CMD-SHELL과 같습니다.
  • NONE 용기의 건강 상태 검사 금지
  • CMD test: [“CMD”, “curl”, “-f”, “http://localhost”]
  • CMD-SHELL test: [“CMD-SHELL”, “curl -f http://localhost|| exit 1] 또는 test: curl -fhttps://localhost || exit 1

  • interval:
    각 검사 간격
    timeout:
    명령 실행 시간 초과
    retries:
    재시도 횟수
    start_period:
    v3.4 이상의 새로운 옵션, 용기 시작 시간 간격 정의
    disable:
    true 또는false, 건강 상태 검사를 사용하지 않는지 여부는test: NONE와 같습니다
    image
    컨테이너를 시작할 때 사용할 미러를 지정합니다.저장소/레이블 또는 로컬 미러 ID일 수 있습니다.
    image: redis
    image: ubuntu:14.04
    image: tutum/influxdb
    image: example-registry.com:4000/postgresql
    image: a4bc65fd
    

    이미지가 존재하지 않으면,build가 지정되지 않은 경우,Compose는 그것을 끌어내려고 시도합니다. 이 경우, 지정한 옵션을 사용하여 그것을 구축하고 지정한 탭으로 표시합니다.
    init :v3.7 새 파라미터true 또는false는 용기에서 init를 실행할지 여부를 표시합니다. 이것은 신호를 받고 프로세스에 전달합니다.
    version: "3.7"
    services:
      web:
        image: alpine:latest
        init: true
    

    기본 초기화 바이너리 파일은 Tini이며/usr/libexec/docker-init 데몬 호스트에 설치됩니다.init-path 설정 옵션을 통해 수호 프로그램을 사용자 정의 init 바이너리 파일로 설정할 수 있습니다.
    isolation
    용기를 지정하는 격리 기술.Linux에서 유일하게 지원하는 값은default입니다.Windows에서 받아들일 수 있는 값은default,process,hyperv입니다.
    labels
    Docker 태그를 사용하여 컨테이너에 메타데이터를 추가합니다.배열이나 사전을 사용할 수 있습니다.레이블이 다른 소프트웨어에서 사용하는 레이블과 충돌하지 않도록 역방향 DNS 표현을 사용하는 것이 좋습니다.
    labels:
      com.example.description: "Accounting webapp"
      com.example.department: "Finance"
      com.example.label-with-empty-value: ""
    labels:
      - "com.example.description=Accounting webapp"
      - "com.example.department=Finance"
      - "com.example.label-with-empty-value"
    

    links : --link Docker 。 。 , , --link。 --link 。 , ( ) 。
    다른 서비스에 연결된 용기입니다.서비스 이름과 링크 별명(SERVICE:ALIAS)을 지정하거나 서비스 이름만 지정하는 링크도dependson 같은 방식은 서비스 간의 의존 관계를 나타내기 때문에 서비스 시작 순서를 정한다.swarm 배치를 사용할 때 이 옵션을 무시합니다
    web:
      links:
       - db
       - db:database
       - redis
    

    링크와 네트워크를 모두 정의하는 경우 링크가 있는 서비스 간에 통신하려면 하나 이상의 공용 네트워크를 공유해야 합니다.
    logging
    서비스의 로깅 구성입니다.
    logging:
      driver: syslog
      options:
        syslog-address: "tcp://192.168.0.42:123"
    

    driver
    로그 기록 드라이버를 지정합니다. 기본 json-file (docker run --log-driver와 같은 역할) 기본값은 json-file입니다.--og-driverdocker run 옵션, 참조https://docs.docker.com/config/containers/logging/configure/ : json-file과journald 드라이버만 docker-compose up과 로그를 직접 제공할 수 있습니다 docker-compose logs.다른 드라이버를 사용해도 로그를 인쇄하지 않습니다.
    options
    기본 드라이버 json-file, 저장된 로그의 양을 제한하는 옵션이 있습니다.이렇게 하려면 키 값 쌍을 사용하여 최대 스토리지 크기 및 파일 수를 가져옵니다.
    max-size:
    단일 로그 파일의 크기를 설정합니다. 이 값에 도달하면 로그 스크롤 동작을 합니다.
    max-file:
    로그 파일 보존 수량
    이것은 docker-compose입니다.yml 로그 저장을 제한하는 예시 파일:
    version: "3.7"
    services:
      some-service:
        image: some-service
        logging:
          driver: "json-file"
          options:
            max-size: "200k"
            max-file: "10"
    

    network_mode
    네트워크 모드 지정(docker run --net과 같은 역할을 하며 swarm 배치를 사용할 때 이 옵션을 무시합니다)
    network_mode: "bridge"
    network_mode: "host"
    network_mode: "none"
    network_mode: "service:[service name]"
    network_mode: "container:[container name/id]"
    
    :network_mode: "host"는 링크와 혼합해서 사용할 수 없습니다
    networks
    용기를 지정한 네트워크에 추가하면 (docker network connect와 같은 역할),networks는compose 파일의 최고급 키와 서비스 키의 2단계 키에 위치할 수 있습니다
    aliase
    같은 네트워크의 용기는 서비스 이름이나 별명을 사용하여 그 중의 한 서비스에 연결할 수 있는 용기입니다. 아래의 예에서 세 가지 서비스 (웹,worker,db), 그 중 두 개의 네트워크 (new와legacy) 를 제공합니다.db 서비스는 도착할 수 있는 호스트 이름인db나 데이터베이스가 new 네트워크에 연결되고db나 mysql가legacy 네트워크에 연결됩니다.
    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_adress,ipv6_adress
    네트워크에 가입하면 이 서비스의 용기에 정적 IP 주소를 지정합니다.최고급 네트워크 부분의 상응하는 네트워크 설정은 반드시 하나의 ipam 블록을 가지고 있어야 하며, 그 중에서 서브네트워크 설정은 모든 정적 주소를 덮어써야 한다.
    version: "3.7"
    
    services:
      app:
        image: nginx:alpine
        networks:
          app_net:
            ipv4_address: 172.16.238.10
            ipv6_address: 2001:3984:3989::10
    
    networks:
      app_net:
        ipam:
          driver: default
          config:
            - subnet: "172.16.238.0/24"
            - subnet: "2001:3984:3989::/64"
    

    pid
    PID 모드를 호스트 PID 모드로 설정합니다.이렇게 하면 컨테이너와 호스트 운영 체제 간의 PID 주소 공간 공유가 열립니다.
    pid: "host"
    

    ports
    호스트와 용기 사이의 포트 매핑 관계를 구축하고ports는 두 가지 문법 형식을 지원합니다
    단어법
    두 개의 포트(HOST:CONTAINER)를 지정하거나 컨테이너 포트만 지정합니다(임시 호스트 포트 선택). : 이런 HOST:CONTAINER 형식으로 포트를 매핑할 때 60 이하의 용기 포트를 사용하면 오류가 발생할 수 있습니다. 왜냐하면 YAML은 형식 xx:yy의 숫자를 60 이하의 값으로 해석하기 때문입니다.따라서, 우리는 항상 포트 매핑을 문자열로 지정하는 것을 권장합니다.
    #       3000   ,         docker               
    -"3000" 
    #       3000   3005   ,         docker             
    - "3000-3005" 
    #     8000         8000         
    - "8000:8000"                       
    - "9090-9091:8080-8081"
    #              
    - "127.0.0.1:8001:8001"             
    - "127.0.0.1:5000-5010:5000-5010"
    #     
    - "6060:6060/udp"                   
    

    문법
    긴 형식 문법은 짧은 형식으로 표시할 수 없는 다른 필드를 설정할 수 있습니다. : 긴 문법은 v3.2의 새로운 기능
  • arget: 컨테이너 내 포트
  • published: 공개 포트
  • protocol: 포트 프로토콜(tcp 또는udp)
  • mode:host는 각 노드에 호스트 포트를 발표하거나ingress에서 군집 모드 포트를 부하 균형에 이르게 하는 데 사용됩니다.
  • ports:
      - target: 80
        published: 8080
        protocol: tcp
        mode: host
    

    restart
    no는 기본 리셋 정책입니다. 어떤 상황에서도 용기를 리셋하지 않습니다.always가 지정되었을 때 용기는 항상 다시 시작합니다.이on-failure는 코드가 표시하는 고장 오류 정책을 다시 시작하는 용기를 종료합니다. : v3 버전 파일이 군집 모드로 창고를 배치할 때 이 옵션을 무시합니다.restart 로 변경하십시오.policy.
    restart: "no"
    restart: always
    restart: on-failure
    restart: unless-stopped
    

    secrets
    모르다
    security_opt
    모든 용기에 기본 탭을 덮어쓰기 (swarm 배치를 사용할 때 이 옵션을 무시합니다)
    security_opt:
      - label:user:USER
      - label:role:ROLE
    

    stop_grace_period
    SIGTERM 신호를 보낸 후 용기가 몇 초 동안 기다린 후에 종료되는지 지정(기본 10s)
    stop_grace_period: 1s
    stop_grace_period: 1m30s
    

    stop_signal
    컨테이너 중지 신호를 지정합니다(기본값은 SIGTERM은 kill PID, SIGKILL은 kill -9 PID, swarm 배치를 사용할 때 무시됨).
    sysctls
    컨테이너의 커널 매개 변수를 설정합니다. (swarm 배치를 사용할 때 이 옵션을 무시합니다.) 이 옵션은 Docker Engine 19.03 이상 버전이 필요합니다.배열이나 사전을 사용할 수 있습니다.
    sysctls:
      net.core.somaxconn: 1024
      net.ipv4.tcp_syncookies: 0
    sysctls:
      - net.core.somaxconn=1024
      - net.ipv4.tcp_syncookies=0
    

    tmpfs : v2 버전 파일 형식 및 더 높은 버전.컨테이너 안에 임시 파일 시스템을 설치합니다.단일 값 또는 목록일 수 있습니다.
    tmpfs: /run
    tmpfs:
      - /run
      - /tmp
    
    :v3.6판 파일 형식 및 더 높은 버전.컨테이너 안에 임시 파일 시스템을 설치합니다.Size 매개 변수는 tmpfs 설치 크기를 바이트 단위로 지정합니다.기본적으로 제한이 없습니다.
    - type: tmpfs
         target: /app
         tmpfs:
           size: 1000
    

    ulimits
    컨테이너의 기본ulimit를 덮어씁니다.단일 한계를 정수로 지정하거나 소프트/하드 한계를 매핑으로 지정할 수 있습니다.
    ulimits:
      nproc: 65535
      nofile:
        soft: 20000
        hard: 40000
    

    좋은 웹페이지 즐겨찾기