1. 程式人生 > >如何寫docker-compose.yml,Docker compose file 參考文件

如何寫docker-compose.yml,Docker compose file 參考文件

Compose 檔案是一個YAML檔案,用於定義servicesnetwordvolumes。 Compose 檔案的預設路徑為./docker-compose.yml(字尾為.yml和.yaml都可以)。

一個service配置將會應用到容器的啟動中,很像將命令列引數傳遞給docker run。 同樣,network和volume定義類似於docker network createdocker volume create。 與Docker執行一樣,預設情況下尊重Dockerfile中指定的選項(例如CMDEXPOSEVOLUMEENV) - 您不需要在docker-compose.yml

中再次指定它們。

您可以在配置中使用具有類似Bash的${VARIABLE}語法使用環境變數 - 有關詳細資訊,請參閱Variable substitution

Service 配置參考

注意:有多個版本的Compose檔案格式 - 版本1(舊版格式,不支援卷或網路)和版本2以及2.1(最新的)。 有關更多資訊,請參閱版[Versioning]部分。

此部分包含服務定義支援的所有配置選項的列表。

build

在構建時應用的配置選項。

build可以指定為包含構建上下文路徑,也可以根據上下文選擇 dockerfile 和 args 指定的路徑物件。

build: ./dir

build:
  context: ./dir
  dockerfile: Dockerfile-alternate
  args:
    buildno: 1

如果指定image欄位來build,則Compose使用image中指定的webapptag(可選)命名構建的image

build: ./dir
image: webapp:tag

這裡從./dir構建了一個映象名為webapp,並打上標記為tag的映象。

注意:在版本1檔案格式中,build有兩種不同的方法:

  1. 只允許字串形式(build:.) - 而不是物件形式。
  2. 不允許與image一起build。 嘗試這樣做會導致錯誤。

context

版本2及以上使用,版本1只使用build。

它的值可以是Dockerfile

的路徑,或者是指向git倉庫的url。

當提供的值是相對路徑時,它被解釋Compose檔案位置的相對路徑。 目錄裡的資訊會被當做構建內容 傳送到Docker守護程序。

Compose將使用生成的名字buildtag它,然後使用該image

build:
  context: ./dir

dockerfile

備用Dockerfile。

撰寫將使用一個備用檔案來構建。 還必須指定構建路徑。

build:
  context: .
  dockerfile: Dockerfile-alternate

注意:在版本1檔案格式中,dockerfile有兩種不同的方法:

  1. 它與build同級出現,而不是子選項:
  build: .
  dockerfile: Dockerfile-alternate
  1. 不允許與image一起使用dockerfile。 嘗試這樣做會導致錯誤。

args

支援版本2及以上

新增構建引數,它們是隻有在構建過程中才可訪問的環境變數。

首先,在Dockerfile中指定引數:

ARG buildno
ARG password

RUN echo "Build number: $buildno"
RUN script-requiring-password.sh "$password"

然後,指定build欄位下的引數args。您可以mapping或list:

build:
  context: .
  args:
    buildno: 1
    password: secret

build:
  context: .
  args:
    - buildno=1
    - password=secret

指定build引數時,可以忽略該值,在這種情況下,構建時其值為執行Compose的環境中的值。

args:
  - buildno
  - password

注意:YAML布林值(true,false,yes,no,on,off)必須用引號引起來,以便解析器將其解釋為字串。

cap_add, cap_drop

新增或刪除容器功能。 有關完整列表,請參閱man 7功能。

cap_add:
  - ALL

cap_drop:
  - NET_ADMIN
  - SYS_ADMIN

command

覆蓋預設命令

command: bundle exec thin -p 3000

該命令也可以是一個list,在方式類似於dockerfile:

command: [bundle, exec, thin, -p, 3000]

cgroup_parent

為容器指定可選的父cgroup。

cgroup_parent: m-executor-abcd

container_name

指定自定義容器名稱,而不是生成的預設名稱。

container_name: my-web-container

由於Docker容器名稱必須是唯一的,因此如果您指定了自定義名稱,則無法將服務擴充套件到1個容器之外。 嘗試這樣做會導致錯誤。

devices

裝置對映列表。 使用與--device docker client create選項相同的格式。

devices:
  - "/dev/ttyUSB0:/dev/ttyUSB0"

depends_on

Express之間的依賴關係,有兩個效果:

  • docker-compose up 將按照依賴順序啟動服務。 在下面的示例中,db和redis將在web之前啟動。
  • docker-compose up SERVICE 將自動包含SERVICE的依賴關係。 在以下示例中,docker-compose up web也將建立並啟動db和redis。

列子:

version: '2'
services:
  web:
    build: .
    depends_on:
      - db
      - redis
  redis:
    image: redis
  db:
    image: postgres

注意:在啟動web之前,depends_on不會等待db和redis“就緒”,直到它們被啟動。 如果您需要等待服務準備就緒,請參閱控制啟動順序瞭解有關此問題的更多資訊以及解決問題的策略。

dns

自定義DNS伺服器。可以是單個值或列表。

dns: 8.8.8.8
dns:
  - 8.8.8.8
  - 9.9.9.9

dns_search

自定義DNS搜尋域。可以是單個值或列表。

dns_search: example.com
dns_search:
  - dc1.example.com
  - dc2.example.com

tmpfs

在容器中安裝臨時檔案系統。可以是單個值或列表。

tmpfs: /run
tmpfs:
  - /run
  - /tmp

entrypoint

覆蓋預設的entrypoint

entrypoint: /code/entrypoint.sh

entrypoint也可以是一個列表,存在方式類似於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

env_file

從檔案新增環境變數。可以是單個值或列表。

如果已使用docker-compose -f FILE指定了一個Compose檔案,則env_file中的路徑相對於該檔案所在的目錄。

在環境中指定的環境變數會覆蓋這些值。

env_file: .env

env_file:
  - ./common.env
  - ./apps/web.env
  - /opt/secrets.env

Compose期望env檔案中的每一行都處於VAR = VAL格式。 以#開頭的行(即註釋)將被忽略,空行也是如此。

# Set Rails/Rack environment
RACK_ENV=development

注意:如果您的service指定了build選項,則在build過程中將不會自動顯示環境檔案中定義的變數。 使用build的args子選項來定義構建時環境變數。

environment

新增環境變數。您可以使用陣列或字典。 任意布林值:true,false,yes no,需要用引號括起來,以確保它們不會被YML解析器轉換為True或False。

只有一個鍵的環境變數被解析為它在Compose正在執行的機器上的值,這對於secret或host-specific values是有幫助的。

environment:
  RACK_ENV: development
  SHOW: 'true'
  SESSION_SECRET:

environment:
  - RACK_ENV=development
  - SHOW=true
  - SESSION_SECRET

注意:如果您的服務指定了build選項,則在build期間將不會自動顯示在環境中定義的變數。 使用build的args子選項來定義構建時環境變數。

expose

公開埠,而不將其釋出到主機 - 它們只能訪問連結服務。只能指定內部埠。

expose:
 - "3000"
 - "8000"

extends

在當前檔案或另一個檔案中擴充套件另一個服務,可選地覆蓋配置。

您可以將extends與其他配置欄位一起使用。 extends值必須是使用必需的server和可選file欄位定義的字典。

extends:
  file: common.yml
  service: webapp

server正在擴充套件的服務的名稱,例如web或資料庫。 該檔案是定義該服務的Compose配置檔案的位置。

如果省略file Compose在當前檔案中查詢服務配置。 file值可以是絕對路徑或相對路徑。 如果指定相對路徑,則Compose將其視為相對於當前檔案的位置。

您可以擴充套件本身擴充套件其他服務。 您可以無限期地延長。 Compose不支援迴圈引用,如果遇到一個,docker-compose會返回一個錯誤。

有關擴充套件的更多資訊,請參閱擴充套件文件

external_links

連結到在docker-compose.yml外部啟動的容器,甚至在Compose之外,特別是對於提供共享或公共服務的容器。 external_links在指定容器名稱和連結別名(CONTAINER:ALIAS)時遵循類似於links的語義。

external_links:
 - redis_1
 - project_db_1:mysql
 - project_db_1:postgresql

注意:如果您使用的是版本2檔案格式,則外部建立的容器必須連線到至少一個與連結到它們的服務相同的網路。

extra_hosts

新增主機名對映。使用與docker client --add-host引數相同的值。

extra_hosts:
 - "somehost:162.242.195.82"
 - "otherhost:50.31.209.229"

具有ip地址和主機名的條目將在此服務的容器中的/etc/hosts中建立,例如:

162.242.195.82  somehost
50.31.209.229   otherhost

group_add

指定容器中的使用者將成為其成員的其他組(按名稱或號碼)。 組必須存在於要新增的容器和主機系統中。 這是有用的一個例子是當多個容器(作為不同的使用者執行)需要在主機系統上讀取或寫入相同的檔案。 該檔案可以由所有容器共享的組擁有,並在group_add中指定。 有關更多詳細資訊,請參閱Docker文件

version: '2'
services:
    image: alpine
    group_add:
      - mail

在建立的容器中執行id將顯示使用者屬於mail組,如果未使用group_add,則不會是這種情況。

image

指定要從中啟動容器的映像。可以是儲存庫/標記或部分影象ID。

image: redis
image: ubuntu:14.04
image: tutum/influxdb
image: example-registry.com:4000/postgresql
image: a4bc65fd

如果image不存在,Compose會嘗試拉取它,除非你也指定了build,在這種情況下,它使用指定的選項構建它,並用指定的標籤標記它。

注意:在版本1檔案格式中,不允許與image一起使用build。 嘗試這樣做會導致錯誤。

isolation

Added in version 2.1 file format. 指定容器的隔離技術。在Linux上,唯一支援的值為default。 在Windows上,可接受的值為defaultprocesshyperv。 有關詳細資訊,請參閱Docker Engine文件

labels

使用Docker labels向容器新增元資料。 您可以使用list或mapping。

建議您使用reverse-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

連結到另一個服務中的容器。請指定服務名稱和連結別名(SERVICE:ALIAS),或僅指定服務名稱。

web:
  links:
   - db
   - db:database
   - redis

如果未指定別名,則可以在與別名相同的主機名或服務名稱處訪問連結服務的容器。

連結也以與depends_on相同的方式表示服務之間的依賴關係,因此它們確定服務啟動的順序。

注意:如果您定義連結和networks,則具有它們之間的連結的服務必須共享至少一個公共網路以便進行

logging

Version 2 file format and up. In version 1, use log_driver and log_opt.

記錄服務的配置。

logging:
  driver: syslog
  options:
    syslog-address: "tcp://192.168.0.42:123"

driver名稱指定了服務容器的日誌驅動程式,,如docker執行的--log-driver選項(documented here)。

預設值為json-file。

driver: "json-file"
driver: "syslog"
driver: "none"

注意:只有json-filejournald驅動程式使日誌可以直接從docker-compose updocker-compose logs獲取。 使用任何其他驅動程式將不會列印任何日誌。

使用options鍵為記錄驅動程式指定日誌記錄選項,例如docker run--log-opt選項。

日誌記錄選項是key-value對。 syslog選項的示例:

driver: "syslog"
options:
  syslog-address: "tcp://192.168.0.42:123"

log_driver

Version 1 file format only. In version 2, use logging.

指定日誌驅動程式。預設值為json-file

log_driver: syslog

log_opt

Version 1 file format only. In version 2, use logging.

將記錄選項指定為key-value對。 syslog選項的示例:

log_opt:
  syslog-address: "tcp://192.168.0.42:123"

net

Version 1 file format only. In version 2, use network_mode.

網路模式。 使用與docker client --net引數相同的值。 container:...形式可以接受服務名稱,而不是容器名稱或ID。

net: "bridge"
net: "host"
net: "none"
net: "container:[service name or container name/id]"

network_mode

Version 2 file format and up. In version 1, use net.

網路模式。 使用與docker client --net引數相同的值,以及特殊表單 service:[service name]

network_mode: "bridge"
network_mode: "host"
network_mode: "none"
network_mode: "service:[service name]"
network_mode: "container:[container name/id]"

networks

Version 2 file format and up. In version 1, use net.

要加入的網路, 引用top-level networks key 下的條目。

services:
  some-service:
    networks:
     - some-network
     - other-network

aliases

網路上此服務的別名(備用主機名)。同一網路上的其他容器可以使用服務名稱或此別名連線到服務的容器之一。

由於aliases是網路範圍的,所以相同的服務可以在不同的網路上具有不同的別名。

注意:網路範圍的別名可以由多個容器共享,甚至可以由多個服務共享。 如果是,那麼該名稱將解析為哪個容器不能保證。

一般格式如下所示。

services:
  some-service:
    networks:
      some-network:
        aliases:
         - alias1
         - alias3
      other-network:
        aliases:
         - alias2

在下面的示例中,提供了三個服務(webworkerdb),以及兩個網路(newlegacy)。 db服務在new網路上的主機名dbdatabaselegacy網路中的dbmysql是可達的。

version: '2'

services:
  web:
    build: ./web
    networks:
      - new

  worker:
    build: ./worker
    networks:
    - legacy

  db:
    image: mysql
    networks:
      new:
        aliases:
          - database
      legacy:
        aliases:
          - mysql

networks:
  new:
  legacy:

ipv4_address, ipv6_address

在加入網路時為此服務的容器指定靜態IP地址。

頂級網路部分中的相應網路配置必須具有包含每個靜態地址的子網和閘道器配置的ipam塊。 如果需要IPv6定址,則com.docker.network.enable_ipv6驅動程式選項必須設定為true。

version: '2'

services:
  app:
    image: busybox
    command: ifconfig
    networks:
      app_net:
        ipv4_address: 172.16.238.10
        ipv6_address: 2001:3984:3989::10

networks:
  app_net:
    driver: bridge
    driver_opts:
      com.docker.network.enable_ipv6: "true"
    ipam:
      driver: default
      config:
      - subnet: 172.16.238.0/24
        gateway: 172.16.238.1
      - subnet: 2001:3984:3989::/64
        gateway: 2001:3984:3989::1

link_local_ips

Added in version 2.1 file format.

指定link-local IPs。 link-local IPs是屬於眾所周知的子網並且完全由運營商管理的特殊IP,通常取決於它們被部署的架構。 因此,它們不由docker(IPAM driver)管理。

用法示例:

version: '2.1'
services:
  app:
    image: busybox
    command: top
    networks:
      app_net:
        link_local_ips:
          - 57.123.22.11
          - 57.123.22.13
networks:
  app_net:
    driver: bridge

pid

pid: "host"

將PID模式設定為主機PID模式。 這將開啟容器和主機作業系統之間的PID地址空間的共享。 使用此標誌啟動的容器將能夠訪問和操作裸機機器名稱空間中的其他容器,反之亦然。

ports

公開埠。 指定兩個埠(HOST:CONTAINER),或只指定容器埠(將選擇隨機主機埠)。

注意:當對映HOST:CONTAINER格式的埠時,當使用低於60的容器埠時,您可能會遇到錯誤的結果,因為YAML將解析格式為xx:yy的數字為六進位制(基數60)。 因此,我們建議您始終明確指定埠對映為字串。

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"

security_opt

覆蓋每個容器的預設標籤方案。

security_opt:
  - label:user:USER
  - label:role:ROLE

stop_signal

設定停止容器的備用訊號。 預設情況下停止使用SIGTERM。 使用stop_signal設定備用訊號將導致停止傳送該訊號。

stop_signal: SIGUSR1

ulimits

覆蓋容器的預設ulimits。 您可以將單個限制指定為整數或soft/hard限制作為對映。

ulimits:
  nproc: 65535
  nofile:
    soft: 20000
    hard: 40000

volumes, volume_driver

裝載路徑或命名卷(可選)指定主機上的路徑(HOST:CONTAINER)或訪問模式(HOST:CONTAINER:ro)。 對於版本2檔案,命名卷需要使用top-level volumes key`指定。 當使用版本1時,Docker Engine將自動建立命名卷(如果不存在)。

您可以在主機上安裝相對路徑,相對於正在使用的Compose配置檔案的目錄將相對路徑。 相對路徑應始終以.要麼..

volumes:
  # Just specify a path and let the Engine create a volume
  - /var/lib/mysql

  # Specify an absolute path mapping
  - /opt/data:/var/lib/mysql

  # Path on the host, relative to the Compose file
  - ./cache:/tmp/cache

  # User-relative path
  - ~/configs:/etc/configs/:ro

  # Named volume
  - datavolume:/var/lib/mysql

如果不使用主機路徑,則可以指定volume_driver

volume_driver: mydriver

請注意,對於版本2檔案,此驅動程式將不適用於named volumes(在使用declaring the volume時,應使用driver選項)。 對於版本1,named volumes和container volumes都將使用指定的驅動程式。

注意:如果您還指定了volume_driver,則不會執行路徑擴充套件。

有關更多資訊,請參閱https://docs.docker.com/engine/userguide/dockervolumes/Volume Plugins

volumes_from

從另一個服務或容器裝入所有卷,可選擇指定只讀訪問(ro)或讀寫(rw)。 如果未指定訪問級別,則將使用讀寫。

volumes_from:
 - service_name
 - service_name:ro
 - container:container_name
 - container:container_name:rw

注意container:...格式僅支援版本2檔案格式。 在版本1中,您可以使用容器名稱,而不將其標記為:

- service_name
- service_name:ro
- container_name
- container_name:rw

cpu_shares, cpu_quota, cpuset, domainname, hostname, ipc, mac_address, mem_limit, memswap_limit, oom_score_adj, privileged, read_only, restart, shm_size, stdin_open, tty, user, working_dir

每個都是一個單一的值,類似於它的docker執行對應。

cpu_shares: 73
cpu_quota: 50000
cpuset: 0,1

user: postgresql
working_dir: /code

domainname: foo.com
hostname: foo
ipc: host
mac_address: 02:42:ac:11:65:43

mem_limit: 1000000000
memswap_limit: 2000000000
privileged: true

oom_score_adj: 500

restart: always

read_only: true
shm_size: 64M
stdin_open: true
tty: true

注意:以下選項僅適用於版本2及更高版本:* oom_score_adj

Volume configuration reference

雖然可以作為服務宣告的一部分來即時宣告卷,但是此部分允許您建立可以跨多個服務重用的命名卷(不依賴volumes_from),並且可以使用docker命令列輕鬆檢索和檢查 或API。 有關更多資訊,請參閱docker volume子命令文件。

driver

指定應為此卷使用哪個卷驅動程式。 預設為local。 如果驅動程式不可用,Docker Engine將返回錯誤。

driver: foobar

driver_opts

將選項列表指定為要傳遞給此卷的驅動程式的key-value pairs。 這些選項是驅動程式相關的 - 請參閱驅動程式文件以獲取更多資訊。 可選的。

driver_opts:
   foo: "bar"
   baz: 1

external

如果設定為true,則指定該卷已在Compose外部建立。 docker-compose up不會嘗試建立它,並且如果它不存在將會引發一個錯誤。

external不能與其他卷配置鍵(driverdriver_opts)一起使用。

在下面的示例中,不是嘗試建立名為[projectname] _data的卷,Compose將查詢現有的卷,簡單地稱為資料,並將其掛載到db服務的容器中。

version: '2'

services:
  db:
    image: postgres
    volumes:
      - data:/var/lib/postgresql/data

volumes:
  data:
    external: true

您還可以指定卷的名稱與用於在Compose檔案中引用它的名稱:

volumes:
  data:
    external:
      name: actual-name-of-volume

labels

Added in version 2.1 file format.

使用Docker labels向容器新增元資料。 您可以使用陣列或字典。

建議您使用反向DNS符號來防止您的標籤與其他軟體使用的標籤衝突。

labels:
  com.example.description: "Database volume"
  com.example.department: "IT/Ops"
  com.example.label-with-empty-value: ""

labels:
  - "com.example.description=Database volume"
  - "com.example.department=IT/Ops"
  - "com.example.label-with-empty-value"

Network configuration reference

頂層網路鍵允許您指定要建立的網路。 有關Compose使用Docker網路功能的完整說明,請參閱Networking guide

driver

指定應為此網路使用哪個驅動程式。

預設驅動程式取決於您使用的Docker引擎是如何配置的,但在大多數情況下,它將是單個主機上的bridge和Swarm上的overlay

如果驅動程式不可用,Docker Engine將返回錯誤。

driver: overlay

driver_opts

指定選項列表作為要傳遞給此網路驅動程式的鍵值對。 這些選項是driver-dependent - consult的驅動程式文件的更多資訊。 可選的。

driver_opts:
    foo: "bar"
    baz: 1

enable_ipv6

Added in version 2.1 file format.

在此網路上啟用IPv6網路。

ipam

指定自定義IPAM配置。 這是一個具有多個屬性的物件,每個屬性都是可選的:

  • driver:自定義IPAM驅動程式,而不是預設值。
  • config:具有零個或多個配置塊的列表,每個配置塊包含以下任意鍵:
    • subnet: 表示網段的CIDR格式的子網
    • ip_range: 從中分配容器IPs的IP範圍
    • gateway: 主子網的IPv4或IPv6閘道器
    • aux_addresses:網路驅動程式使用的輔助IPv4或IPv6地址,作為從主機名到IP地址的對映
  • options: 作為鍵值對映的驅動特定選項。

A full example:

ipam:
  driver: default
  config:
    - subnet: 172.28.0.0/16
      ip_range: 172.28.5.0/24
      gateway: 172.28.5.254
      aux_addresses:
        host1: 172.28.1.5
        host2: 172.28.1.6
        host3: 172.28.1.7
  options:
    foo: bar
    baz: "0"

internal

Version 2 file format and up.

預設情況下,Docker還將橋接網路連線到它以提供外部連線。 如果要建立外部隔離的覆蓋網路,您可以將此選項設定為true。

labels

Added in version 2.1 file format.

使用Docker標籤向容器新增元資料。 您可以使用陣列或字典。

建議您使用反向DNS符號來防止您的標籤與其他軟體使用的標籤衝突。

labels:
  com.example.description: "Financial transaction network"
  com.example.department: "Finance"
  com.example.label-with-empty-value: ""

labels:
  - "com.example.description=Financial transaction network"
  - "com.example.department=Finance"
  - "com.example.label-with-empty-value"

external

如果設定為true,則指定此網路已在Compose之外建立。 docker-compose up不會嘗試建立它,並且如果它不存在將會引發一個錯誤。

外部不能與其他網路配置鍵(driverdriver_optsgroup_addipaminternal)一起使用。

在下面的示例中,proxy是到外部世界的閘道器。 而不是嘗試建立一個名為[projectname] _outside的網路,Compose將查詢一個現有的網路,簡單地呼叫外outside並連線outside服務的容器。

version: '2'

services:
  proxy:
    build: ./proxy
    networks:
      - outside
      - default
  app:
    build: ./app
    networks:
      - default

networks:
  outside:
    external: true

您還可以單獨指定網路的名稱,與用於在Compose檔案中引用它的名稱:

networks:
  outside:
    external:
      name: actual-name-of-network

Versioning

目前有三個版本的Compose檔案格式:

  • 版本1,傳統格式。 這是通過省略YAML根目錄下的版本鍵來指定的。
  • 版本2,推薦格式。 這是使用版本:’2’條目在YAML的根目錄指定。
  • 版本2.1,升級超過版本2,利用了Docker Engine的最新特性。 使用版本:“2.1”條目指定YAML根目錄。

要將專案從版本1移動到2,請參閱升級部分。

注意:如果您使用多個Compose檔案或擴充套件服務,每個檔案必須是相同的版本 - 您不能在單個專案中混合版本1和2。

根據您使用的版本,有幾點不同:

  • 結構和允許的配置鍵
  • 必須執行的最低Docker Engine版本
  • 撰寫關於網路的行為 這些差異如下所述。

Version 1

未宣告版本的組合檔案被視為“版本1”。 在這些檔案中,所有服務都在文件的根目錄處宣告。

版本1由Compose到1.6.x支援。 它將在未來的Compose版本中被棄用。

版本1檔案無法宣告命名卷,網路或構建引數。

例:

web:
  build: .
  ports:
   - "5000:5000"
  volumes:
   - .:/code
  links:
   - redis
redis:
  image: redis

Version 2

使用版本2語法的撰寫檔案必須指示文件根目錄下的版本號。 所有服務必須在服務鍵下宣告。

Compose 1.6.0+支援版本2檔案,並需要版本1.10.0+的Docker引擎。

可以在volumes鍵下宣告命名卷,並且可以在networks關鍵字下宣告網路。

簡單示例:

version: '2'
services:
  web:
    build: .
    ports:
     - "5000:5000"
    volumes:
     - .:/code
  redis:
    image: redis

一個更廣泛的例子,定義卷和網路:

version: '2'
services:
  web:
    build: .
    ports:
     - "5000:5000"
    volumes:
     - .:/code
    networks:
      - front-tier
      - back-tier
  redis:
    image: redis
    volumes:
      - redis-data:/var/lib/redis
    networks:
      - back-tier
volumes:
  redis-data:
    driver: local
networks:
  front-tier:
    driver: bridge
  back-tier:
    driver: bridge

Version 2.1

升級版本2,引入僅適用於Docker Engine版本1.12.0+的新引數

引入以下附加引數: * link_local_ips * isolation * labels for volumes and networks

Upgrading

在大多數情況下,從版本1移動到2是一個非常簡單的過程:

  1. 將整個檔案縮排一級,並在頂部放置一個services:鍵。
  2. 新增一個version: '2'行在檔案的頂部。

如果您使用特定的配置功能,則更復雜: * dockerfile: This now lives under the build key:

  build:
  context: .
  dockerfile: Dockerfile-alternate
  • log_driverlog_opt: These now live under the logging key: logging: driver: syslog options: syslog-address: "tcp://192.168.0.42:123"
  • 與環境變數的連結:如環境變數引用中所述,由連結建立的環境變數已經過時了一段時間。 在新的Docker網路系統中,它們已被刪除。 您應該直接連線到相應的主機名,或者自己設定相關的環境變數,使用link hostname: ``` web: links:
    • db environment:
    • DB_PORT=tcp://db:5432 ```
  • external_links:Compose在執行版本2專案時使用Docker網路,因此連結的行為略有不同。 特別地,兩個容器必須共同連線到至少一個網路,以便進行通訊,即使明確地連結在一起。 將外部容器連線到應用程式的預設網路,或者將外部容器和服務的容器都連線到外部網路。
  • net: 這現在由network_mode替換:

    net: host    ->  network_mode: host
    net: bridge  ->  network_mode: bridge
    net: none    ->  network_mode: none
    

    如果你使用 net: "container:[service name]", 用 network_mode: "service:[service name]" 替換。

    net: "container:web"  ->  network_mode: "service:web"
    

    如果你使用 net: "container:[container name/id]", 值可以不變。

    net: "container:cont-name"  ->  network_mode: "container:cont-name"
    net: "container:abc12345"   ->  network_mode: "container:abc12345"
    
  • 具有命名卷的卷:這些必須現在必須在Compose檔案的頂級卷部分中顯式宣告。 如果服務裝載稱為資料的命名卷,則必須在頂層卷部分中宣告資料卷。 整個檔案可能如下所示:

    version: '2'
    services:
    db:
      image: postgres
      volumes:
        - data:/var/lib/postgresql/data
    volumes:
    data: {}
    

    預設情況下,Compose會建立一個以專案名稱為字首的卷。 如果你想要它只是被稱為資料,宣告它為外部

    volumes:
    data:
    external: true
    

Variable substitution

您的配置選項可以包含環境變數。 Compose使用執行docker-compose的shell環境中的變數值。 例如,假設shell包含EXTERNAL_PORT = 8000,並且您提供此配置:

web:
  build: .
  ports:
    - "${EXTERNAL_PORT}:5000"

當使用此配置執行docker-compose up時,Compose會在shell中查詢EXTERNAL_PORT環境變數並將其值代入。在本示例中,Compose在建立Web容器之前將埠對映解析為“8000:5000”

如果未設定環境變數,則Compose將替換為空字串。 在上面的示例中,如果未設定EXTERNAL_PORT,則埠對映的值為:5000(這當然是無效的埠對映,並且將在嘗試建立容器時導致錯誤)。

支援$VARIABLE${VARIABLE}語法。 此外,當使用2.1檔案格式時,可以使用典型的shell語法提供內聯預設值: * 如果VARIABLE在環境中未設定或為空,${VARIABLE:-default}將評估為預設值。 * 只有在環境中未設定VARIABLE的情況下,${VARIABLE-default}才會評估為預設值。

不支援其他擴充套件的shell樣式功能,例如${VARIABLE/foo/bar}

當您的配置需要一個字母美元符號時,您可以使用$$(雙美元符號)。 這也防止了Compose內插值,所以$$允許你引用你不想由Compose處理的環境變數。

web:
  build: .
  command: "$$VAR_NOT_INTERPOLATED_BY_COMPOSE"

如果您忘記並使用單個美元符號($),Compose將該值解釋為環境變數並將警告您:

未設定VAR_NOT_INTERPOLATED_BY_COMPOSE。 替換空字串。

參考地址: [1]https://docs.docker.com/compose/compose-file

本文連結:https://deepzz.com/post/docker-compose-file.html參與評論 »