docker 시리즈 - docker-compose.yml상해-(二)
24867 단어 【docker】dockerdocker-compose
앞에서 말하기:
본문은 버젼 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과 같습니다.
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의 새로운 기능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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
GoLang HTTP 서버를 도커화하고 Kubernetes에 배포이 블로그에서는 Kubernetes에서 GoLang으로 작성된 간단한 HTTP 서버를 호스팅하려고 했습니다. 도커 이미지를 빌드하고 도커 허브에 푸시합니다. Minikube에서 원하는 Pod를 생성하여 이미지를 배포...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.