亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Docker配置文件docker-compose.yml使用指南

 更新時間:2023年07月18日 11:55:39   作者:BUG弄潮兒  
本文主要介紹了Docker配置文件docker-compose.yml使用指南,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

Docker Compose配置文件是Docker Compose的核心,用于定義服務(wù)、網(wǎng)絡(luò)和數(shù)據(jù)卷。格式為YAML,默認路徑為./docker-compose.yml,可以使用.yml或.yaml擴展名,目前Compose配置文件格式的最新版本為V3。Compose配置文件中涉及的配置項也比較多,但大部分配置項的含義跟docker run命令相關(guān)選項是類似的。

本文主要參考官方文檔對目前最新的V3版Compose配置文件進行一個總結(jié)。都是一些概念性的內(nèi)容,不涉及具體操作。

一、Compose配置文件版本

這里主要對Compose配置文件的版本的相關(guān)要點進行一個簡單的總結(jié)。至于每個版本具體的變化和升級信息可以參考官方的Compose配置文件版本與升級指南。

1. Compose配置文件格式的版本概述

當前有三種版本的Compose配置文件格式:

  • Version 1

舊版格式,通過省略YAML的根配置項version來指定。

未聲明版本的Compose配置文件都被視為V1版,所有的服務(wù)都作為根選項在Compose配置文件中聲明。

支持V1的Compose最高到1.6.x,再高版本的Compose不推薦使用V1版Compose配置文件。

不支持數(shù)據(jù)卷、網(wǎng)絡(luò)和構(gòu)建參數(shù)配置。

V1的Compose不會利用網(wǎng)絡(luò)優(yōu)勢,每個容器都位于默認的bridge網(wǎng)絡(luò)上,并且可以從其他容器的IP地址訪問,需要使用links來啟用容器之間的發(fā)現(xiàn)。

  • Version 2.x

通過YAML的根配置項version來指定,具體配置如version: '2'或version: '2.1'等。

必須在Compose配置文件根選項指定版本號,并且主版本數(shù)字為2,且所有服務(wù)必須在services配置項下聲明。

1.6.0+版本的Compose都支持V2,Docker Engine的版本需要1.10.0+版本。

支持數(shù)據(jù)卷和網(wǎng)絡(luò)的配置。

默認情況下,每個容器都加入了應(yīng)用范圍的默認網(wǎng)絡(luò),并且可以在與服務(wù)名稱相同的主機名下發(fā)現(xiàn)。很大程度上links不是必要的。

V2中加入了環(huán)境變量替換。

  • Version 3.x

最新版本,也是推薦使用版本,推出該版的目的是為了在Compose和Docker Engine的swarm模式之間形成交叉兼容。

通過YAML的根配置項version來指定,具體配置如version: '3'或version: '3.1'等。

V3刪除了多個配置項,但也新增了更多配置項。

關(guān)于Compose配置文件版本的常見注意事項:

在聲明V2和V3版本時需注意:

在指定Compose配置文件要使用的版本時,需同時指定主版本數(shù)字和次版本數(shù)字。如果未給定次版本數(shù)字,則默認使用0而不是最新版本,因此將不支持再更高版本中才加入的新功能。比如version: '3',使用的是3.0版本而不是目前最新的3.8版本。

在使用多Compose配置文件時需注意:

使用多個Compose配置文件擴展服務(wù)時,每個文件必須為相同的版本。

2. Compose配置文件格式版本與Docker的兼容性關(guān)系

Compose配置文件格式具有多種版本。其中Compose配置文件格式版本與Docker的兼容性關(guān)系如下表所示:

Compose配置文件格式版本 Docker Engine 版本

3.8 19.03.0+
3.7 18.06.0+
3.6 18.02.0+
3.5 17.12.0+
3.4 17.09.0+
3.3 17.06.0+
3.2 17.04.0+
3.1 1.13.1+
3.0 1.13.0+
2.4 17.12.0+
2.3 17.06.0+
2.2 1.13.0+
2.1 1.12.0+
2.0 1.10.0+
1.0 1.9.1.+

如果使用的較舊版本的Docker,可以參考官方的Compose版本發(fā)布列表。其中的每組發(fā)行說明都詳細說明了支持的Docker Engine版本和兼容的Compose配置文件格式版本。

3. 兼容模式

在1.20.0版本,Compose在docker-compose命令中引入了一個新的選項--compatibility,目的在于幫助開發(fā)人員更輕松地過渡到V3版。啟用該選項后,docker-compose命令會讀取每個服務(wù)定義的deploy部分,并嘗試將其轉(zhuǎn)換為等效的V2配置項。目前,以下deploy下的配置項已被轉(zhuǎn)換:

resources下的limits和reservations下的memory

replicas

restart_policy下的 condition 和max_attempts

所有的其他配置項都將被忽略,如果這些被忽略的配置項存在則會發(fā)出一個警告??梢允褂脦?-compatibility的Config命令查看將用于deploy的配置。

注意請勿在生成環(huán)境使用兼容模式!

建議不要在生產(chǎn)環(huán)境中使用--compatibility選項。由于使用非Swarm模式屬性生成的配置僅是近似值,因此可能會產(chǎn)生意外的結(jié)果。

二、Compose配置文件結(jié)構(gòu)

Docker Compose配置文件是一個用于定義服務(wù)、網(wǎng)絡(luò)和數(shù)據(jù)卷的YAML文件。其中服務(wù)定義了該服務(wù)啟動的每個容器的配置,就像將命令行參數(shù)傳遞給docker run一樣,網(wǎng)絡(luò)和數(shù)據(jù)卷的定義類似于docker network create和docker volume create。跟docker run一樣,如果在Dockerfile中通過諸如CMD、EXPOSE、VOLUME和ENV這些指令指定了相關(guān)選項,那么在默認情況下,不需要在docker-compose.yml中再次指定它們。下面是從官網(wǎng)引過來的一個Compose配置文件的示例,可以先大致了解一下它的結(jié)構(gòu):

version: "3.8"
services:
  redis:
    image: redis:alpine
    ports:
      - "6379"
    networks:
      - frontend
    deploy:
      replicas: 2
      update_config:
        parallelism: 2
        delay: 10s
      restart_policy:
        condition: on-failure
  db:
    image: postgres:9.4
    volumes:
      - db-data:/var/lib/postgresql/data
    networks:
      - backend
    deploy:
      placement:
        constraints:
          - "node.role==manager"
  vote:
    image: dockersamples/examplevotingapp_vote:before
    ports:
      - "5000:80"
    networks:
      - frontend
    depends_on:
      - redis
    deploy:
      replicas: 2
      update_config:
        parallelism: 2
      restart_policy:
        condition: on-failure
  result:
    image: dockersamples/examplevotingapp_result:before
    ports:
      - "5001:80"
    networks:
      - backend
    depends_on:
      - db
    deploy:
      replicas: 1
      update_config:
        parallelism: 2
        delay: 10s
      restart_policy:
        condition: on-failure
  worker:
    image: dockersamples/examplevotingapp_worker
    networks:
      - frontend
      - backend
    deploy:
      mode: replicated
      replicas: 1
      labels: [APP=VOTING]
      restart_policy:
        condition: on-failure
        delay: 10s
        max_attempts: 3
        window: 120s
      placement:
        constraints:
          - "node.role==manager"
  visualizer:
    image: dockersamples/visualizer:stable
    ports:
      - "8080:8080"
    stop_grace_period: 1m30s
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
    deploy:
      placement:
        constraints:
          - "node.role==manager"
networks:
  frontend:
  backend:
volumes:
  db-data:

頂層的version、services、networks和volumes將Compose配置文件分為四個部分,其中version指定Compose配置文件的版本,services定義服務(wù),networks定義網(wǎng)絡(luò),volumes定義數(shù)據(jù)卷。

三、服務(wù)配置

服務(wù)定義了該服務(wù)啟動的每個容器的配置,就像將命令行參數(shù)傳遞給docker run一樣。比如以下配置:

services:
  redis:
    image: redis:alpine

services下的redis是用戶自定義的服務(wù)名稱,redis下的image只是眾多服務(wù)配置項中的其中一個,意思是指定鏡像名稱或id。下面就對服務(wù)的相關(guān)配置項進行一個總結(jié)。

1. build

在構(gòu)建時應(yīng)用的配置項。一般直接指定Dockerfile所在文件夾路徑,可以是絕對路徑,或者相對于Compose配置文件的路徑??梢灾付榘瑯?gòu)建上下文(context)路徑的字符串。例如:

version: "3.8"
services:
  webapp:
    build: ./dir

也可以使用context指定上下文路徑,使用dockerfile基于上下文路徑指定Dockerfile文件,使用args指定構(gòu)建參數(shù)。例如:r

version: "3.8"
services:
  webapp:
    build:
      context: ./dir
      dockerfile: Dockerfile-alternate
      args:
        buildno: 1

如果同時指定了build和image。例如:

build: ./dir
image: webapp:tag

Compose會在./dir目錄下構(gòu)建一個名為webapp,標簽為tag的鏡像。

使用docker stack deploy時的注意事項:在swarm mode下部署堆棧時,build配置項被忽略。因為docker stack命令不會在部署之前構(gòu)建鏡像。

(1) context

指定包含Dockerfile的目錄路徑或git倉庫url。該目錄是發(fā)送給Docker守護進程(Daemon)的構(gòu)建上下文(context)。當配置的值是相對路徑時,它將被解釋為相對于Compose配置文件的路徑。例如:

build:
  context: ./dir

指定上下文為Compose配置文件目錄下的dir目錄。

(2) dockerfile

指定Dockerfile文件。Compose會使用指定的Dockerfile文件構(gòu)建鏡像,但必須要指定構(gòu)建上下文路徑。例如:

build:
  context: .
  dockerfile: Dockerfile-alternate

Compose會使用Compose配置文件所在目錄下名為Dockerfile-alternate的Dockerfile文件構(gòu)建鏡像。

(3) args

添加構(gòu)建參數(shù),這些只能在構(gòu)建過程中訪問的環(huán)境變量。首先在Dockerfile文件中指定參數(shù):

ARG buildno
ARG gitcommithash
RUN echo "Build number: $buildno"
RUN echo "Based on commit: $gitcommithash"

然后build中指定參數(shù),以下兩種寫法都可以:

build:
  context: .
  args:
    buildno: 1
    gitcommithash: cdc3b19
build:
  context: .
  args:
    - buildno=1
    - gitcommithash=cdc3b19

這時構(gòu)建過程中使用的參數(shù)的值為args指定的值。在指定構(gòu)建參數(shù)時也可以不指定值,在這種情況下,構(gòu)建過程中使用的參數(shù)的值為運行Compose的環(huán)境中的值。例如:

args:
  - buildno
  - gitcommithash

使用布爾值時的注意事項:YMAL中布爾類型的值("true"、"false"、"yes"、"no"、"on"、"off")必須用引號引起來,以便解析器將它們解釋為字符串。

(4) cache_from

在3.2版的配置文件格式中加入

指定緩存解析鏡像列表。例如:

build:
  context: .
  cache_from:
    - alpine:latest
    - corp/web_app:3.14

(5) labels

在3.3版的配置文件格式中加入

將元數(shù)據(jù)以標簽的形式添加到生成的鏡像中??梢允褂脭?shù)組或字典兩種格式。推薦使用反向DNS寫法以避免和其他應(yīng)用的標簽沖突。例如:

build:
  context: .
  labels:
    com.example.description: "Accounting webapp"
    com.example.department: "Finance"
    com.example.label-with-empty-value: ""
build:
  context: .
  labels:
    - "com.example.description=Accounting webapp"
    - "com.example.department=Finance"
    - "com.example.label-with-empty-value"

(6) network

在3.4版的配置文件格式中加入

設(shè)置容器網(wǎng)絡(luò)連接以獲取構(gòu)建過程中的RUN指令。例如:

build:
  context: .
  network: custom_network_1

設(shè)置為none可以在構(gòu)建期間禁用網(wǎng)絡(luò)連接。例如:

build:
  context: .
  network: none

(7) shm_size

在3.5版的配置文件格式中加入

指定容器的/dev/shm分區(qū)大小。指定的值為表示字節(jié)數(shù)的整數(shù)值或表示字節(jié)值的字符串。例如

build:
  context: .
  shm_size: 10000000
build:
  context: .
  shm_size: '2gb'

(8) target

在3.4版的配置文件格式中加入

指定在Dockerfile中定義的構(gòu)建階段,即鏡像只構(gòu)建到指定階段就停止構(gòu)建。例如:

build:
  context: .
  target: prod

指定構(gòu)建階段為prod,即鏡像只構(gòu)建到prod階段,prod階段之后的內(nèi)容不會被構(gòu)建。

2. cap_add、cap_drop

添加或刪除容器內(nèi)核能力(capability)。完整的capability列表可查看man 7 capabilities。例如,讓容器擁有所有內(nèi)核能力:

cap_add:
  - ALL

例如,刪除NET_ADMIN和SYS_ADMIN能力:

cap_drop:
  - NET_ADMIN
  - SYS_ADMIN

使用docker stack deploy時的注意事項:在swarm mode下部署堆棧時,cap_add和cap_drop配置項將被忽略。

3. cgroup_parent

為容器指定一個可選的父控制組。例如:

cgroup_parent: m-executor-abcd

使用docker stack deploy時的注意事項:在swarm mode下部署堆棧時,cgroup_parent配置項將被忽略。

4. command

覆蓋容器啟動后默認執(zhí)行的命令??梢詫懗勺址问?。例如:

command: bundle exec thin -p 3000

也可以寫成JSON數(shù)組形式。例如:

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

5. configs

在3.3版的配置文件格式中加入

為每個服務(wù)授予對配置(configs)的訪問權(quán)限。支持short和long兩種格式的語法。更多configs信息,參考configs。

注意:該配置(config)必須已存在或者在堆棧文件頂層configs配置項中定義,否則堆棧部署將失敗。

short語法僅指定config名稱來授予容器訪問config的權(quán)限并將其掛載到容器的/<config_name>上。source名稱和目標掛載點都設(shè)置為config名稱。例如以下示例,授予了redis服務(wù)對configs的my_config和my_other_config的訪問權(quán)限,其中my_config的值設(shè)置到文件./my_config.txt的內(nèi)容中,my_other_config定義為外部資源,這意味著它已經(jīng)在Docker中通過運行docker config create命令或其他堆棧部署進行定義,如果外部config不存在,堆棧部署將會失敗并顯示config not found錯誤:

version: "3.8"
services:
  redis:
    image: redis:latest
    deploy:
      replicas: 1
    configs:
      - my_config
      - my_other_config
configs:
  my_config:
    file: ./my_config.txt
  my_other_config:
    external: true

long語法提供了在服務(wù)的任務(wù)容器內(nèi)如何創(chuàng)建config的更多粒度:

source:Docker中存在的config名稱。

target:指定要掛載到服務(wù)的任務(wù)容器的文件的路徑加名稱。如果未指定,默認為/。

uid和gid:指定服務(wù)的任務(wù)容器所擁有的該文件的UID或GID。如果在LInux中未指定,兩者都默認為0。不支持Windows。

mode:以八進制表示法指定要掛載到服務(wù)的任務(wù)容器的文件權(quán)限。例如,0444代表可讀。默認值就為0444。config內(nèi)容已掛載到臨時文件系統(tǒng)中,所以不可寫,如果設(shè)置了可寫位將被忽略??梢栽O(shè)置可執(zhí)行位。如果不熟悉UNIX文件權(quán)限模式,可以使用權(quán)限計算器 。

例如以下示例,指定config名稱為my_config,授予redis服務(wù)對my_config的訪問權(quán)限,指定要掛載到redis服務(wù)的任務(wù)容器的路徑加文件名稱為/redis_config,指定UID和GID均為103,指定要掛載到服務(wù)的任務(wù)容器的文件權(quán)限為0440(group-readable),但該redis服務(wù)沒有訪問my_other_config的權(quán)限:

version: "3.8"
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

可以授予服務(wù)訪問多個config的權(quán)限,并且可以混合long和short語法。定義config并不意味著授予服務(wù)對其的訪問權(quán)限。

6. container_name

指定自定義容器的名稱,而不是使用默認名稱。例如:

container_name: my-web-container

因為Docker容器的名稱必須唯一,所以為一個服務(wù)指定了自定義容器名稱后,該服務(wù)不能進行擴展。如果嘗試為該服務(wù)擴容將會導致錯誤。

使用docker stack deploy時的注意事項:在swarm mode下部署堆棧時,container_name配置項將被忽略。

7. credential_spec

在3.3版的配置文件格式中加入

在3.8或更高版本文件格式中支持將組托管服務(wù)帳戶(GMSA)配置與Compose配置文件一起使用。

配置托管服務(wù)帳戶的憑據(jù)規(guī)格(credential spec)。此選項僅用于使用Windows容器的服務(wù)。credential_spec配置必須采用file://或registry://格式。使用file:時,引用的文件必須存在于Docker數(shù)據(jù)目錄的CredentialSpecs子目錄中,在Windows上,Docker數(shù)據(jù)目錄默認為C:\ProgramData\Docker\。以下示例從名為C:\ProgramData\Docker\CredentialSpecs\my-credential-spec.json的文件加載憑證規(guī)格:

credential_spec:
  file: my-credential-spec.json

使用registry:時,將從守護進程主機上的Windows注冊表中讀取憑據(jù)規(guī)格。其注冊表值必須位于HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Virtualization\Containers\CredentialSpecs。以下示例從注冊表中名為my-credential-spec的值加載憑證規(guī)格:

credential_spec:
  registry: my-credential-spec

為服務(wù)配置GMSA憑據(jù)規(guī)格時,只需用config指定憑據(jù)規(guī)格。例如:

version: "3.8"
services:
  myservice:
    image: myimage:latest
    credential_spec:
      config: my_credential_spec
configs:
  my_credentials_spec:
    file: ./my-credential-spec.json|

8. depends_on

指定服務(wù)之間的依賴關(guān)系,解決服務(wù)啟動先后順序問題。指定服務(wù)之間的依賴關(guān)系,將會導致以下行為:

docker-compose up以依賴順序啟動服務(wù)。

docker-compose up SERVICE會自動包含SERVICE的依賴項。

docker-compose stop以依賴順序停止服務(wù)。

例如以下示例:

version: "3.8"
services:
  web:
    build: .
    depends_on:
      - db
      - redis
  redis:
    image: redis
  db:
    image: postgres

啟動時會先啟動db和redis,最后才啟動web。在使用docker-compose up web啟動web時,也會啟動db和redis,因為在web服務(wù)中指定了依賴關(guān)系。在停止時也在web之前先停止db和redis。

使用depends_on時的注意事項:

服務(wù)不會等待該服務(wù)所依賴的服務(wù)完全啟動之后才啟動。例如上例,web不會等到db和redis完全啟動之后才啟動。

V3版不再支持的condition形式的depends_on。

V3版中,在swarm mode下部署堆棧時,depends_on配置項將被忽略。

9. deploy

在3版的配置文件格式中加入

指定部署和運行服務(wù)的相關(guān)配置。該配置僅在swarm mode下生效,并只能通過docker stack deploy命令部署,docker-compose up和docker-compose run命令將被忽略。例如:

version: "3.8"
services:
  redis:
    image: redis:alpine
    deploy:
      replicas: 6
      placement:
        max_replicas_per_node: 1
      update_config:
        parallelism: 2
        delay: 10s
      restart_policy:
        condition: on-failure

deploy配置項中包含endpoint_mode、labels、mode、placement、replicas、resources、restart_policy、update_config等子配置項。

(1) endpoint_mode

在3.2版的配置文件格式中加入

為外部客戶端連接到swarm指定服務(wù)發(fā)現(xiàn)方式:

endpoint_mode: vip:Docker為服務(wù)分配了一個前端的虛擬IP,客戶端通過該虛擬IP訪問網(wǎng)絡(luò)上的服務(wù)。Docker在客戶端和服務(wù)的可用工作節(jié)點之間進行路由請求,而無須關(guān)系有多少節(jié)點正在參與該服務(wù)或這些節(jié)點的IP地址或者端口。這是默認設(shè)置。

endpoint_mode: dnsrr:DNS輪詢(DNSRR),Docker設(shè)置服務(wù)的DNS條目,以便對服務(wù)名稱的DNS查詢返回IP地址列表,并且客戶端通過輪詢的方式直接連接到其中之一。

例如:

version: "3.8"
services:
  wordpress:
    image: wordpress
    ports:
      - "8080:80"
    deploy:
      mode: replicated
      replicas: 2
      endpoint_mode: vip

(2) labels

指定服務(wù)的標簽。這些標簽僅在服務(wù)上設(shè)置,而不在服務(wù)的任何容器上設(shè)置。例如:

version: "3.8"
services:
  web:
    image: web
    deploy:
      labels:
        com.example.description: "This label will appear on the web service"

(3) mode

指定服務(wù)的容器副本模式??梢詾椋?/p>

global:每個swarm節(jié)點只有一個該服務(wù)容器。

replicated:整個集群中存在指定份數(shù)的服務(wù)容器副本,為默認值。

例如,指定容器副本模式為global:

version: "3.8"
services:
  worker:
    image: dockersamples/examplevotingapp_worker
    deploy:
      mode: global

(4) placement

指定constraints和preferences。constraints可以指定只有符合要求的節(jié)點上才能運行該服務(wù)容器,preferences可以指定容器分配策略。例如,指定集群中只有滿足node.rolemanager和engine.labels.operatingsystemubuntu 18.04條件的節(jié)點上能運行db服務(wù)容器,并且在滿足node.labels.zone的節(jié)點上均勻分配:

version: "3.8"
services:
  db:
    image: postgres
    deploy:
      placement:
        constraints:
          - "node.role==manager"
          - "engine.labels.operatingsystem==ubuntu 18.04"
        preferences:
          - spread: node.labels.zone

(5) max_replicas_per_node

在3.8版的配置文件格式中加入

如果服務(wù)的容器副本模式為replicated(默認),可以指定每個節(jié)點上運行的最大容器副本數(shù)量。當指定的容器副本數(shù)量大于最大容器副本數(shù)量時,將引發(fā)no suitable node (max replicas per node limit exceed)錯誤。例如:

version: "3.8"
services:
  worker:
    image: dockersamples/examplevotingapp_worker
    networks:
      - frontend
      - backend
    deploy:
      mode: replicated
      replicas: 6
      placement:
        max_replicas_per_node: 1

(6) replicas

如果服務(wù)的容器副本模式為replicated(默認),指定運行的容器副本數(shù)量。例如:

version: "3.8"
services:
  worker:
    image: dockersamples/examplevotingapp_worker
    networks:
      - frontend
      - backend
    deploy:
      mode: replicated
      replicas: 6

(7) resources

配置資源限制。例如,指定redis服務(wù)使用的cpu份額為25%到50%,內(nèi)存為20M到50M:

version: "3.8"
services:
  redis:
    image: redis:alpine
    deploy:
      resources:
        limits:
          cpus: '0.50'
          memory: 50M
        reservations:
          cpus: '0.25'
          memory: 20M

在V3版Compose配置文件中的改變:resources取代了V3版之前的Compose配置文件中舊的資源限制的配置項,包括cpu_shares、cpu_quota、cpuset、mem_limit、memswap_limit、mem_swappiness。

在非swarm mode容器上設(shè)置資源限制:此處的resources配置項只有用于deploy配置項之下和swarm mode。如果要在非swarm mode部署中設(shè)置資源限制,需使用V2版Compose配置文件中CPU、memory和其他資源的配置項。

(8) restart_policy

指定容器的重啟策略。代替restart。有以下配置選項:

condition:重啟策略。值可以為none、on-failure或any,默認為any。

delay:嘗試重啟的等待時間。指定為持續(xù)時間(durations)。默認值為0。

max_attempts:重啟最多嘗試的次數(shù),超過該次數(shù)將放棄。默認為永不放棄。如果在window配置的時間之內(nèi)未成功重啟,則此次嘗試不計入max_attempts的值。

window:在決定重啟是否成功之前的等待時間。指定為持續(xù)時間(durations)。默認值為立即決定。

例如,指定重啟策略為失敗時重啟,等待5s,重啟最多嘗試3次,決定重啟是否成功前的等待時間為120s:

version: "3.8"
services:
  redis:
    image: redis:alpine
    deploy:
      restart_policy:
        condition: on-failure
        delay: 5s
        max_attempts: 3
        window: 120s

(9) rollback_config

在3.7版的配置文件格式中加入

配置在更新失敗的情況下如何回滾服務(wù)。有以下配置選項:

parallelism:一次回滾的容器數(shù)量。如果設(shè)置為0,則所有容器同時回滾。

delay:每個容器組之間的回滾所等待的時間。默認值為0s。

failure_action:回滾失敗后的行為。有continue和pause兩種,默認值為pause。

monitor:每次任務(wù)更新后監(jiān)視失敗的時間(ns|us|ms|s|m|h)。默認值為0s。

max_failure_ratio:在回滾期間能夠容忍的最大失敗率。默認值為0。

order:設(shè)置回滾順序。stop-first為在開啟新任務(wù)之前停止舊任務(wù),start-first為首先啟動新任務(wù),和正在運行任務(wù)短暫重疊,默認值為stop-first。

(10) update_config

配置如何更新服務(wù)。該配置對滾動更新很有用。有以下配置選項:

parallelism:一次更新的容器數(shù)量。

delay:更新一組容器之間的等待時間。

failure_action:更新失敗后的行為。有continue、rollback和pause三種,默認值為pause。

monitor:每次任務(wù)更新后監(jiān)視失敗的時間(ns|us|ms|s|m|h)。默認值為0s。

max_failure_ratio:在更新期間能夠容忍的最大失敗率。

order:設(shè)置更新順序。stop-first為在開啟新任務(wù)之前停止舊任務(wù),start-first為首先啟動新任務(wù),和正在運行任務(wù)短暫重疊,默認值為stop-first。注意該配置項在3.4版的配置文件格式中加入,僅支持3.4或更高版本。

例如,指定每次更新2個容器,更新等待時間10s,更新順序為先停止舊任務(wù)再開啟新任務(wù):

version: "3.8"
services:
  vote:
    image: dockersamples/examplevotingapp_vote:before
    depends_on:
      - redis
    deploy:
      replicas: 2
      update_config:
        parallelism: 2
        delay: 10s
        order: stop-first

(11) 不支持docker stack deploy的配置項

以下為支持docker-compose up和docker-compose run,不支持docker stack deploy或deploy配置項的配置項:

build
cgroup_parent
container_name
devices
tmpfs
external_links
links
network_mode
restart
security_opt
userns_mode

10. devices

指定設(shè)備映射列表。與Docker客戶端create的--device選項類似。例如:

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

使用docker stack deploy時的注意事項:在swarm mode下部署堆棧時,devices配置選項將被忽略。

11. dns

自定義DNS服務(wù)器??梢允且粋€值或一個列表。例如:

dns: 8.8.8.8
dns:
  - 8.8.8.8
  - 9.9.9.9

12. dns_search

自定義DNS搜索域??梢允且粋€值或一個列表。例如:

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

13. entrypoint

覆蓋默認的入口命令。注意設(shè)置entrypoint會覆蓋所有在服務(wù)鏡像上使用Dockerfile的ENTRYPOINT指令設(shè)置的默認入口命令,并清除掉服務(wù)鏡像上任何使用Dockerfile的CMD指令設(shè)置的啟動容器時默認執(zhí)行的命令??梢詫懗勺址问剑纾?/p>

entrypoint: /code/entrypoint.sh

也可以寫成JSON數(shù)組形式,例如:

entrypoint: ["php", "-d", "memory_limit=-1", "vendor/bin/phpunit"]

14. env_file

從文件中獲取環(huán)境變量。可以是一個值或一個列表。例如:

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

如果指定了Compose配置文件,env_file路徑為相對于該文件所在目錄的路徑。如果環(huán)境文件中設(shè)置有與environment選項同名的變量,將以后者為準,無論這些變量的值是空還是未定義。其中環(huán)境文件每行都以VAR=VAL格式聲明環(huán)境變量,以#開頭的行被解析為注釋,和空行一樣將被忽略。環(huán)境文件示例如下:

# Set Rails/Rack environment
RACK_ENV=development

如果變量的值被引號引起來(通常是shell變量),則引號也包含在傳遞給Compose的值中。如果以列表的形式同時指定了多個環(huán)境文件,列表中文件的順序?qū)τ诮o多次出現(xiàn)的環(huán)境變量確定值十分重要,且列表中的文件是從上到下處理的。如果指定了多個環(huán)境文件且有至少兩個文件聲明了相同名稱但不同值的環(huán)境變量,那么指定列表中順序靠下的文件將覆蓋順序靠上的文件中的相同名稱的環(huán)境變量的值。例如:

services:
  some-service:
    env_file:
      - a.env
      - b.env

如果a.env中有VAR=1,b.env中有VAR=2,則最終$VAR=2。

注意:這里所說的環(huán)境變量是針對宿主機的Compose而言的,如果在服務(wù)中指定了build配置項,那么這些變量并不會進入構(gòu)建過程中,如果要定義構(gòu)建時用的環(huán)境變量首選build的arg子選項。

15. environment

設(shè)置環(huán)境變量??梢允褂脭?shù)組或字典兩種格式。任何布爾類型的值都必須用引號引起來,以便解析器將它們解釋為字符串。值設(shè)置了鍵沒設(shè)置值的環(huán)境變量可以在運行Compose的主機環(huán)境中解析它們的值,這對于使用密鑰和特定于主機的值用處很大。例如:

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

注意:這里所說的環(huán)境變量是針對宿主機的Compose而言的,如果在服務(wù)中指定了build配置項,那么這些變量并不會進入構(gòu)建過程中,如果要定義構(gòu)建時用的環(huán)境變量首選build的arg子選項。

16. expose

暴露指定端口,但不映射到宿主機,只被連接的服務(wù)訪問。只能指定內(nèi)部端口。例如:

expose:
  - "3000"
  - "8000"

17. external_links

鏈接到docker-compose.yml外部的容器,甚至并非Compose管理的外部容器,特別是對于提供共享或公共服務(wù)的容器。在同時指定容器名稱和鏈接別名(CONTAINER:ALIAS)時,external_links與舊版本中的配置項links有類似的語義。例如:

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

注意:Compose項目里面的容器連接到外部容器的前提條件是外部容器中必須至少有一個容器連接到與項目內(nèi)的服務(wù)的同一個網(wǎng)絡(luò)里面。建議使用networks代替舊版本中的配置項Links。

使用docker stack deploy時的注意事項:在swarm mode下部署堆棧時,external_links配置項將被忽略。

18. extra_hosts

添加主機名到IP的映射。使用和Docker客戶端中的--add-host的參數(shù)一樣的值。例如:

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

會在啟動后的服務(wù)容器中的/etc/hosts文件中添加如下兩條具有主機名和IP地址的條目:

162.242.195.82  somehost
50.31.209.229   otherhost

19. healthcheck

配置運行檢查以確定服務(wù)容器是否健康。支持以下配置選項:

  • test:指定健康檢測的方法。
  • interval:啟動容器到進行健康檢查的間隔時間以及兩次健康檢查的間隔時間。
  • timeout:單次健康檢查的超時時間,超過該時間該次健康檢查失敗。
  • retries:健康檢查失敗后的最大重試次數(shù),重試了最大次數(shù)依然失敗,容器將被視為unhealthy。
  • start_period:為需要時間引導的容器提供的初始化時間,在此期間檢查失敗將不計入最大重試次數(shù),但是如果在啟動期間健康檢查成功,則會將容器視為已啟動,并且所有連續(xù)失敗將計入最大重試次數(shù)。

其中interval、timeout和start_period都被指定為持續(xù)時間(durations)。start_period是在3.4版的配置文件格式中加入。test必須是字符串或JSON數(shù)組格式。如果是JSON數(shù)組格式,第一項必須是NONE、CMD或CMD-SHELL其中之一。如果是字符串格式,則等效于指定CMD-SHELL后跟該字符串的JSON數(shù)組格式。

例如以下示例,指定檢測方法為訪問http://localhost,健康檢查間隔時間為1m30s,健康檢查超時時間為10s,重試次數(shù)為3,啟動容器后等待健康檢查的初始化時間為40s:

healthcheck:
  test: ["CMD", "curl", "-f", "http://localhost"]
  interval: 1m30s
  timeout: 10s
  retries: 3
  start_period: 40s

例如以下示例,兩種形式等效:

test: ["CMD-SHELL", "curl -f http://localhost || exit 1"]
test: curl -f https://localhost || exit 1

使用disable: true可以設(shè)置鏡像禁用所有健康檢查,相對于test: ["NONE"]。例如:

healthcheck:
  disable: true

20. image

指定要從中啟動容器的鏡像??梢詫憘}庫/標簽(repository/tag)或鏡像ID。示例如下:

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

如果鏡像不存在,Compose會自動拉取鏡像,除非指定了build,這種情況下會使用指定選項構(gòu)建鏡像并給鏡像打上指定標簽。

21. init

在3.7版的配置文件格式中加入

在容器內(nèi)運行一個初始化程序以轉(zhuǎn)發(fā)信號并獲取進程。設(shè)置為true即可為服務(wù)啟動此功能。例如:

version: "3.8"
services:
  web:
    image: alpine:latest
    init: true

注意:默認使用的初始化二進制文件是Tini,并安裝在主機守護進程的/usr/libexec/docker-init??梢酝ㄟ^Daemon configuration file中的init-path將守護進程配置為使用自定義的初始化二進制文件 。

22. isolation

指定容器的隔離技術(shù)。Linux上只支持default值。Windows上支持default、process和hyperv這三個值。

23. labels

將元數(shù)據(jù)以標簽的形式添加到容器中??梢允褂脭?shù)組或字典兩種格式。例如:

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"

24. links

警告:--link是Docker的遺留功能。它最終可能會被刪除。建議您使用用戶自定義網(wǎng)絡(luò)代替--link來進行兩個容器間的通信。用戶自定義的網(wǎng)絡(luò)不支持--link在容器之間共享的環(huán)境變量的功能。但是可以使用例如數(shù)據(jù)卷之類的其他機制以更可控的方式在容器之間共享環(huán)境變量。

鏈接到其他服務(wù)中的容器??梢允褂?quot;SERVICE:ALIAS"或"SERVICE"的格式,其中SERVICE為服務(wù)名稱,ALIAS為鏈接別名。例如:

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

鏈接服務(wù)的容器可以通過與別名相同的主機名訪問,如果未指定別名,則可以使用服務(wù)名。默認情況下,不需要鏈接即可使服務(wù)進行通信,任何服務(wù)都可以使用該服務(wù)的名稱訪問任何其他服務(wù)。鏈接也可以和depends_on一樣表示服務(wù)之間的依賴關(guān)系 ,因此可以確定服務(wù)啟動的順序。

注意:如果同時定義鏈接和網(wǎng)絡(luò),則它們之間具有鏈接的服務(wù)必須共享至少一個公共網(wǎng)絡(luò)才能進行通信。

使用docker stack deploy時的注意事項:在swarm mode下部署堆棧時,links配置項將被忽略。

25. logging

服務(wù)的日志配置。例如:

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

driver配置項指定服務(wù)容器的日志驅(qū)動,與docker run中的--log-driver選項一樣。默認值為json-file,這里列舉三種日志驅(qū)動類型:

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

使用options配置項為日志驅(qū)動指定日志記錄選項,與docker run中的--log-opt選項一樣。例如:

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

默認日志驅(qū)動json-file具有限制日志存儲量的選項。例如以下示例,max-size設(shè)置最大存儲大小為200k,max-file設(shè)置存儲的最大文件數(shù)為10,隨著日志超過最大限制,將刪除較舊的日志文件以允許存儲新日志:

options:
  max-size: "200k"
  max-file: "10"

26. network_mode

設(shè)置網(wǎng)絡(luò)模式。使用和Docker客戶端中的--network的參數(shù)一樣的值,格式為service:[service name]??梢灾付ㄊ褂梅?wù)或者容器的網(wǎng)絡(luò)。示例如下:

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

注意事項:

在swarm mode下部署堆棧時,該選項將被忽略。

network_mode: "host"不能與links配置項混用。

27. networks

指定所加入的網(wǎng)絡(luò)。需要在頂層networks配置項中引入具體的網(wǎng)絡(luò)信息。例如:

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

(1) aliases

指定服務(wù)在此網(wǎng)絡(luò)上的別名(備用主機名)。同一網(wǎng)絡(luò)上的其他容器可以使用服務(wù)名稱或此別名來連接到服務(wù)的任何一個容器。由于aliases屬于網(wǎng)絡(luò)范圍,因此同一服務(wù)在不同的網(wǎng)絡(luò)上可以具有不同的別名。例如:

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

在以下示例中,提供了web、worker和db三個服務(wù),以及new和legacy兩個網(wǎng)絡(luò):

version: "3.8"
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:

在該例中,可以通過主機名db或database在new網(wǎng)絡(luò)上訪問db服務(wù),通過db或mysql在legacy網(wǎng)絡(luò)上訪問db服務(wù)。

注意:網(wǎng)絡(luò)范圍內(nèi)的別名可以被多個容器甚至多個服務(wù)共享。如果是這樣,則不能保證名稱恰好解析到哪一個容器。

(2) ipv4_address、ipv6_address

加入網(wǎng)絡(luò)后,為此服務(wù)的容器指定一個靜態(tài)IP地址。在頂層networks配置項中的相應(yīng)網(wǎng)絡(luò)配置必須有子網(wǎng)配置覆蓋每個靜態(tài)地址的ipam配置。例如:

version: "3.8"
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"

注意:如果需要IPv6尋址,則必須使用V2.x版本的Compose配置文件并設(shè)置頂層networks配置項下的enable_ipv6選項。在當前swarm mode下IPv6選項不會起作用。

28. pid

跟主機系統(tǒng)共享進程命名空間。

pid: "host"
將PID模式設(shè)置為主機PID模式,打開該選項的容器之間,以及容器和宿主機操作系統(tǒng)之間可以通過進程ID來相互訪問和操作。

29. ports

暴露端口。注意端口映射與network_mode: host不兼容。支持short和long兩種格式的語法。short語法可以使用HOST:CONTAINER的格式指定端口映射,也可以指定容器端口,宿主機會隨機選擇臨時端口進行映射。例如:

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"
  - "12400-12500:1240"

注意:當使用HOST:CONTAINE格式來映射端口時,如果使用的容器端口小于60可能會得到錯誤得結(jié)果,因為YAML將會解析xx:yy這種數(shù)字格式為60進制,因此建議始終采用字符串格式來指定端口映射。

long語法支持配置short語法中不支持的附加字段。這些附加字段如下:

  • target:指定容器內(nèi)的端口。
  • published:指定公開的端口。
  • protocol:指定端口協(xié)議(tcp或udp)。
  • mode:使用host在每個節(jié)點公開一個主機端口,或使用ingress對swarm mode端口進行負載均衡。

示例如下:

ports:
  - target: 80
    published: 8080
    protocol: tcp
    mode: host

long語法在3.2版的配置文件格式中加入

30. restart

指定重啟策略。例如想要在容器退出時總是會重啟容器,指定以下重啟策略:

restart: always

一共支持以下重啟策略:

  • no:在任何情況下都不會重啟容器。默認的重啟策略。
  • always:在容器退出時總是重啟容器。
  • on-failure:在容器以非0狀態(tài)碼退出時才會重啟。
  • unless-stopped:在容器退出時總是重啟容器,但是不考慮在Docker守護進程啟動時就已經(jīng)停止了的容器。

使用docker stack deploy時的注意事項:在swarm mode下部署堆棧時,restart配置項將被忽略。

31. secrets

為每個服務(wù)授予對保密數(shù)據(jù)(secrets)的訪問權(quán)限。支持short和long兩種格式的語法。更多secrets信息,參考secrets。

使用docker stack deploy時的注意事項:該保密數(shù)據(jù)(secret)必須已存在或者在Compose配置文件頂層secrets配置項中定義,否則堆棧部署將失敗。

short語法僅指定secret名稱來授予容器訪問secret數(shù)據(jù)的權(quán)限并將其掛載到容器的/run/secrets/<secret_name>上。source名稱和目標掛載點都設(shè)置為secret名稱。例如以下示例,授予了redis服務(wù)對secrets的my_secret和my_other_secret的訪問權(quán)限,其中my_secret的值設(shè)置到文件./my_secret.txt的內(nèi)容中,my_other_secret定義為外部資源,這意味著它已經(jīng)在Docker中通過運行docker secret create命令或其他堆棧部署進行定義,如果外部secret不存在,堆棧部署將會失敗并顯示secret not found錯誤:

version: "3.8"
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

long語法提供了在服務(wù)的任務(wù)容器內(nèi)如何創(chuàng)建secret的更多粒度:

  • source:Docker中存在的secret名稱。
  • target:指定要掛載到服務(wù)的任務(wù)容器的/run/secrets/中的文件名稱。如果未指定,默認為source的值。
  • uid和gid:指定服務(wù)的任務(wù)容器的/run/secrets/中所擁有的該文件的UID或GID。如果未指定,兩者都默認為0。
  • mode:以八進制表示法指定要掛載到服務(wù)的任務(wù)容器的/run/secrets/中的文件權(quán)限。例如,0444代表可讀。默認值在Docker 1.13.1為0000,在較新版本為0444。secret內(nèi)容已掛載到臨時文件系統(tǒng)中,所以不可寫,如果設(shè)置了可寫位將被忽略??梢栽O(shè)置可執(zhí)行位。如果不熟悉UNIX文件權(quán)限模式,可以使用權(quán)限計算器 。

例如以下示例,指定secret名稱為my_secret,授予redis服務(wù)對my_secret的訪問權(quán)限,指定要掛載到redis服務(wù)的任務(wù)容器的/run/secrets/中的文件名稱為redis_secret,指定UID和GID均為103,指定要掛載到服務(wù)的任務(wù)容器的/run/secrets/中的文件權(quán)限為0440(group-readable),但該redis服務(wù)沒有訪問my_other_secret的權(quán)限:

version: "3.8"
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

可以授予服務(wù)訪問多個secret的權(quán)限,并且可以混合long和short語法。定義secret并不意味著授予服務(wù)對其的訪問權(quán)限。

32. security_opt

為每個容器覆蓋默認的標簽(label)。例如配置標簽中的用戶名和角色名:

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

使用docker stack deploy時的注意事項:在swarm mode下部署堆棧時,security_opt配置項將被忽略。

33. stop_grace_period

指定在發(fā)送SIGKILL之前,如果容器無法處理SIGTERM或使用stop_signal指定的任何停止信號時,試圖停止該容器所需要的等待時間。默認情況下,stop在發(fā)送SIGKILL之前等待10秒以退出容器。時間指定為duration。具體示例如下:

stop_grace_period: 1s
stop_grace_period: 1m30s

34. stop_signal

設(shè)置停止容器的信號。默認使用SIGTERM停止容器。例如指定SIGUSR1信號:

stop_signal: SIGUSR1

35. sysctls

在容器中設(shè)置的內(nèi)核參數(shù)??梢允褂脭?shù)組或字典兩種格式。例如指定連接數(shù)為1024和開啟TCP的syncookies:

sysctls:
  net.core.somaxconn: 1024
  net.ipv4.tcp_syncookies: 0
sysctls:
  - net.core.somaxconn=1024
  - net.ipv4.tcp_syncookies=0

使用docker stack deploy時的注意事項:在swarm mode下部署堆棧時,sysctls配置項要求Docker Engine 19.03或以上。

36. tmpfs

在3.6版的配置文件格式中加入

掛載一個臨時文件系統(tǒng)到容器內(nèi)部。可以是一個值或一個列表。例如:

tmpfs: /run
1.
tmpfs:
  - /run
  - /tmp

在容器內(nèi)掛載一個臨時文件系統(tǒng)。Size可以指定掛載的tmpfs大小,以字節(jié)為單位。默認情況下不受限制。例如:

- type: tmpfs
     target: /app
     tmpfs:
       size: 1000

使用docker stack deploy時的注意事項:在swarm mode下部署堆棧時使用3至3.5版本的Compose配置文件,tmpfs配置項將被忽略。

37. ulimits

覆蓋容器的默認ulimit值??梢詥我坏貙⑾拗浦翟O(shè)為一個整數(shù),也可以將soft/hard限制指定為映射。例如,指定最大進程數(shù)為65535,指定文件句柄數(shù),其中軟限制為20000,系統(tǒng)硬限制為40000,軟限制應(yīng)用可以隨時修改,不能超過硬限制,硬限制只能root用戶提高:

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

38. userns_mode

指定用戶命名空間模式。如果Docker守護進程配置了用戶名稱空間,則禁用此服務(wù)的用戶名稱空間。以下是使用主機上的用戶命名空間的配置示例:

userns_mode: "host"
使用docker stack deploy時的注意事項:在swarm mode下部署堆棧時,userns_mode配置項將被忽略。

39. volumes

指定所掛載的主機路徑或數(shù)據(jù)卷名稱。支持short和long兩種格式的語法??梢詫⒅鳈C路徑作為單個服務(wù)的一部分進行掛載,而無需在頂層volumes配置項中定義。但是如果想要在多個服務(wù)之間重用數(shù)據(jù)卷,需要在頂層volumes配置項中定義一個數(shù)據(jù)卷名稱。

在3版的配置文件格式中的變化:在頂層volumes配置項中定義了數(shù)據(jù)卷名稱并從每個服務(wù)的volumes列表中引用了該數(shù)據(jù)卷。這將替代早期版本的Compose配置文件格式中的volumes_from配置項。

short語法使用通用的[SOURCE:]TARGET[:MODE]格式,SOURCE可以是主機路徑或數(shù)據(jù)卷名稱,TARGET為掛載數(shù)據(jù)卷的容器路徑,MODE可以為ro只讀模式或rw讀寫模式(默認)??梢栽谥鳈C上掛載相對路徑,該路徑相對于正在使用的Compose配置文件的目錄進行擴展,相對路徑應(yīng)始終以.或..開頭。例如:

volumes:
  #只指定一個路徑,Docker會自動在創(chuàng)建一個數(shù)據(jù)卷(這個路徑是容器內(nèi)部的)
  - /var/lib/mysql
  #使用絕對路徑掛載數(shù)據(jù)卷
  - /opt/data:/var/lib/mysql
  #使用基于Compose配置文件的相對路徑作為數(shù)據(jù)卷掛載到容器
  - ./cache:/tmp/cache
  #使用基于root用戶的相對路徑作為數(shù)據(jù)卷掛載到容器
  - ~/configs:/etc/configs/:ro
  #使用已經(jīng)存在命名的數(shù)據(jù)卷掛載到容器
  - datavolume:/var/lib/mysql

long語法支持配置以下short語法中不支持的附加字段:

  • type:掛載類型,可以為volume、bind、tmpfs或npipe。
  • source:掛載源,在主機上用于綁定掛載的路徑或定義在頂層volumes配置項中的數(shù)據(jù)卷名稱。不適用于tmpfs掛載類型。
  • target:數(shù)據(jù)卷掛載在容器中的路徑。
  • read_only:設(shè)置數(shù)據(jù)卷為只讀。
  • bind:配置額外的bind選項。
  • propagation:用于綁定的傳播模式。
  • volume:配置額外的volume選項。
  • nocopy:創(chuàng)建數(shù)據(jù)卷時禁止從容器復制數(shù)據(jù)。
  • tmpfs:配置額外的tmpfs選項。
  • size:tmpfs掛載的大小,以字節(jié)為單位。
  • consistency:掛載的一致性要求,可以為consistent、cached或delegated。其中consistent表示主機和容器具有相同視圖。cached表示讀取緩存,主機視圖是權(quán)威的。delegated表示讀寫緩存,容器視圖是權(quán)威的。

例如:

version: "3.8"
services:
  web:
    image: nginx:alpine
    ports:
      - "80:80"
    volumes:
      - type: volume
        source: mydata
        target: /data
        volume:
          nocopy: true
      - type: bind
        source: ./static
        target: /opt/app/static
networks:
  webnet:
volumes:
  mydata:

40. 其他配置項

此外,還有domainname、hostname、ipc、mac_address、privileged、read_only、shm_size、stdin_open、tty、user和working_dir這些配置項。它們都是單值配置,和docker run中的對應(yīng)選項類似。注意mac_address是舊版本配置項。例如:

#指定容器中運行應(yīng)用的用戶名
user: postgresql
#指定容器的工作目錄
working_dir: /code
#指定容器中的搜索域名
domainname: foo.com
#指定容器中的主機名
hostname: foo
ipc: host
#指定容器中的mac地址
mac_address: 02:42:ac:11:65:43
#指定容器為特權(quán)容器
privileged: true
#指定以只讀模式掛載容器的root文件系統(tǒng),不能對容器內(nèi)容進行修改
read_only: true
#設(shè)置/dev/shm分區(qū)的大小
shm_size: 64M
#打開標準輸入,可以接受外部輸入
stdin_open: true
#分配tty設(shè)備用來支持終端登錄
tty: true

四、數(shù)據(jù)卷配置

雖然可以聲明即時生效的數(shù)據(jù)卷作為服務(wù)聲明的一部分,但這部分可以通過頂層volumes配置項定義一個數(shù)據(jù)卷以實現(xiàn)在多個服務(wù)之間重用,并且可以使用docker命令行或API輕松進行檢索和檢查。例如以下示例,數(shù)據(jù)庫的數(shù)據(jù)目錄作為數(shù)據(jù)卷與另一個服務(wù)共享以便定期備份:

version: "3.8"
services:
  db:
    image: db
    volumes:
      - data-volume:/var/lib/db
  backup:
    image: backup-service
    volumes:
      - data-volume:/var/lib/backup/data
volumes:
  data-volume:

頂層volumes配置項下的條目可以為空,這種情況下配置的默認驅(qū)動,默認驅(qū)動在大多數(shù)情況下為local驅(qū)動。下面就對數(shù)據(jù)卷的相關(guān)配置項進行一個總結(jié)。

1. driver

指定該數(shù)據(jù)卷所要使用的數(shù)據(jù)卷驅(qū)動。默認為Docker Engine中配置使用的無論哪種驅(qū)動,大多數(shù)情況下為local驅(qū)動。如果驅(qū)動不可用,則引擎會在docker-compose up嘗試創(chuàng)建數(shù)據(jù)卷時返回一個錯誤。以下為指定數(shù)據(jù)卷驅(qū)動的示例:

driver: foobar

2. driver_opts

以鍵值對的形式指定用來傳遞給該數(shù)據(jù)卷所使用的數(shù)據(jù)卷驅(qū)動的列表選項。這些選項取決于數(shù)據(jù)卷驅(qū)動,可以參考數(shù)據(jù)卷驅(qū)動程序文檔。例如:

volumes:
  example:
    driver_opts:
      type: "nfs"
      o: "addr=10.40.0.199,nolock,soft,rw"
      device: ":/docker/example"

3. external

指定該數(shù)據(jù)卷是否是外部數(shù)據(jù)卷。如果設(shè)置為true,則指定該數(shù)據(jù)卷是在Compose外部創(chuàng)建的。由于docker-compose up不會嘗試創(chuàng)建該數(shù)據(jù)卷,如果該數(shù)據(jù)卷不存在則會引發(fā)錯誤。在3.3及以下版本的Compose配置文件格式中,external配置項不能與包括driver、driver_opts和labels在內(nèi)的其他數(shù)據(jù)卷配置項同時使用,在3.4及以上版本中則沒有此限制。例如以下示例,Compose不會嘗試創(chuàng)建一個名為[projectname]_data的數(shù)據(jù)卷,而是查找一個現(xiàn)存的被簡單稱為data的數(shù)據(jù)卷并將其掛載到db服務(wù)的容器中:

version: "3.8"
services:
  db:
    image: postgres
    volumes:
      - data:/var/lib/postgresql/data
volumes:
  data:
    external: true

通過external配置項下的name配置項可以指定數(shù)據(jù)卷的名稱,該名稱與Compose配置文件中用于引用數(shù)據(jù)卷的名稱區(qū)分開來。例如:

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

不過external配置項下的name配置項在3.4版的配置文件格式中就已經(jīng)被棄用了,可以用name配置項替代。

使用docker stack deploy時的注意事項:如果使用docker stack deploy代替docker-compose up以swarm mode啟動應(yīng)用,則會創(chuàng)建不存在的外部數(shù)據(jù)卷。在swarm mode下,服務(wù)定義數(shù)據(jù)卷后將自動創(chuàng)建該卷。由于服務(wù)任務(wù)已在新節(jié)點上安排,因此SwarmKit將在本地節(jié)點上創(chuàng)建數(shù)據(jù)卷。

4. labels

將元數(shù)據(jù)以標簽的形式添加到容器中。可以使用數(shù)組或字典兩種格式。例如:

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"

5. name

在3.4版的配置文件格式中加入

為該數(shù)據(jù)卷設(shè)置一個自定義名稱。例如:

version: "3.8"
volumes:
  data:
    name: my-app-data

可以和external配置項一起使用。例如:

version: "3.8"
volumes:
  data:
    external: true
    name: my-app-data

五、網(wǎng)絡(luò)配置

通過頂層networks配置項可以指定要創(chuàng)建的網(wǎng)絡(luò)。下面就對網(wǎng)絡(luò)的相關(guān)配置項進行一個總結(jié)。

1. driver

指定該網(wǎng)絡(luò)所要使用的驅(qū)動。默認驅(qū)動取決于所使用的Docker Engine的配置方式,但是在大多數(shù)情況下,單個主機上用的bridge,Swarm上用的overlay。

bridge:表示橋接,Docker在單個主機上默認使用bridge網(wǎng)絡(luò)。

overlay:overlay驅(qū)動在一個swarm中的多個節(jié)點之間創(chuàng)建一個命名網(wǎng)絡(luò)。

如果驅(qū)動不可用,則Docker Engine會返回一個錯誤。以下為指定卷驅(qū)動的示例:

driver: overlay

如果想要使用主機的網(wǎng)絡(luò)堆棧,或者不使用網(wǎng)絡(luò)。這相當于docker run --net = host或docker run --net = none。僅在使用docker stack命令時使用。如果使用docker-compose命令,需使用服務(wù)配置中的network_mode配置項。如果要在相同構(gòu)建版本的容器上使用特定網(wǎng)絡(luò),需要在服務(wù)配置的build下的network配置項中設(shè)置。例如:

services:
  web:
    build:
      network: host
      context: .

使用諸如host和none的內(nèi)置網(wǎng)絡(luò)的語法有所不同。定義一個名為host或none的外部網(wǎng)絡(luò)以及Compose可以使用的別名,然后使用該別名向該網(wǎng)絡(luò)授予服務(wù)訪問權(quán)限,而且該外部網(wǎng)絡(luò)在Docker中已經(jīng)自動創(chuàng)建。例如以下示例,定義了名為host的外部網(wǎng)絡(luò),Compose中可以使用的別名為hostnet:

version: "3.8"
services:
  web:
    networks:
      hostnet: {}
networks:
  hostnet:
    external: true
    name: host

例如以下示例,定義了名為none的外部網(wǎng)絡(luò),Compose中可以使用的別名為nonet:

services:
  web:
    networks:
      nonet: {}
networks:
  nonet:
    external: true
    name: none

2. driver_opts

以鍵值對的形式指定用來傳遞給該網(wǎng)絡(luò)所使用的驅(qū)動的列表選項。這些選項取決于驅(qū)動,可以參考驅(qū)動程序文檔。例如:

driver_opts:
  foo: "bar"
  baz: 1

3. attachable

在3.2版的配置文件格式中加入

指定是否允許除服務(wù)之外的獨立容器連接到該網(wǎng)絡(luò)。僅在driver設(shè)置為overlay時使用。如果設(shè)置為true,則除了服務(wù)之外的獨立容器也可以連接到該網(wǎng)絡(luò)。如果獨立容器連接到了overlay網(wǎng)絡(luò),那它可以與那些也從其他Docker守護進程連接到overlay網(wǎng)絡(luò)的服務(wù)和獨立容器進行通信。例如:

networks:
  mynet1:
    driver: overlay
    attachable: true

4. enable_ipv6

在該網(wǎng)絡(luò)上啟用IPv6網(wǎng)絡(luò)。

不支持V3版Compose配置文件:如果要使用enable_ipv6配置項,則需要使用V2版Compose配置文件,因為swarm mode尚不支持該配置項。

5. ipam

指定自定義IPAM配置。有以下配置選項:

driver:自定義IPAM驅(qū)動以代替默認驅(qū)動。

config:包含零個或多個配置塊的列表,每個配置塊可以有以下配置選項。

subnet:設(shè)置表示網(wǎng)段的CIDR格式的子網(wǎng)。

以下為指定自定義IPAM配置的示例:

ipam:
  driver: default
  config:
    - subnet: 172.28.0.0/16

注意:目前,例如gateway等其他IPAM配置僅適用于V2版Compose配置文件。

6. internal

指定是否創(chuàng)建一個與外部隔離的overlay網(wǎng)絡(luò)。默認情況下,Docker也會將橋接網(wǎng)絡(luò)連接到它以提供外部連接。如果要創(chuàng)建一個與外部隔離的overlay網(wǎng)絡(luò),需將此配置項設(shè)置為true。

7. labels

將元數(shù)據(jù)以標簽的形式添加到容器中??梢允褂脭?shù)組或字典兩種格式。例如:

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"

8. external

指定該網(wǎng)絡(luò)是否是外部網(wǎng)絡(luò)。如果設(shè)置為true,則指定該網(wǎng)絡(luò)是在Compose外部創(chuàng)建的。由于docker-compose up不會嘗試創(chuàng)建該網(wǎng)絡(luò),如果該網(wǎng)絡(luò)不存在則會引發(fā)錯誤。在3.3及以下版本的Compose配置文件格式中,external配置項不能與包括driver、driver_opts、ipam和internal等在內(nèi)的其他網(wǎng)絡(luò)配置項同時使用,在3.4及以上版本中則沒有此限制。例如以下示例,proxy是通往外界的網(wǎng)關(guān),Compose不會嘗試創(chuàng)建一個名為[projectname] _outside的網(wǎng)絡(luò),而是查找一個現(xiàn)存的被簡單稱為的outside網(wǎng)絡(luò)并將proxy服務(wù)的容器連接到該網(wǎng)絡(luò):

version: "3.8"
services:
  proxy:
    build: ./proxy
    networks:
      - outside
      - default
  app:
    build: ./app
    networks:
      - default
networks:
  outside:
    external: true

通過external配置項下的name配置項可以指定網(wǎng)絡(luò)的名稱,該名稱與Compose配置文件中用于引用網(wǎng)絡(luò)的名稱區(qū)分開來。例如:

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

不過external配置項下的name配置項在3.5版的配置文件格式中就已經(jīng)被棄用了,可以用name配置項替代。

9. name

在3.5版的配置文件格式中加入

為該網(wǎng)絡(luò)設(shè)置一個自定義名稱。例如:

version: "3.8"
networks:
  network1:
    name: my-app-net

可以和external配置項一起使用。例如:

version: "3.8"
networks:
  network1:
    external: true
    name: my-app-net

六、configs配置

頂層configs配置項定義或引用了授予此堆棧中的服務(wù)的configs,config來源于file或external。下面就對configs的相關(guān)配置項進行一個簡單總結(jié)。

  • file:通過指定路徑中的文件內(nèi)容創(chuàng)建config。
  • external:如果設(shè)置為true,則指定該config已經(jīng)創(chuàng)建。Docker不會嘗試創(chuàng)建它,如果它不存在,會發(fā)生config not found錯誤。
  • name:指定Docker中config的名稱。在3.5版的配置文件格式中加入。
  • driver和driver_opts:自定義secret驅(qū)動的名稱,和以鍵值對的形式指定用來傳遞給特定驅(qū)動的選項。這兩個配置項均在3.8版的配置文件格式中加入,僅在使用docker stack時受支持。

template_driver:指定要使用的模板驅(qū)動的名稱,它控制是否以及如何將secret有效負載作為模板進行評估。如果未設(shè)置驅(qū)動,則不使用任何模板。當前僅支持使用Go語言的golang驅(qū)動。該配置項在3.8版的配置文件格式中加入,僅在使用docker stack時受支持。

七、secrets配置

頂層secrets配置項定義或引用了授予此堆棧中的服務(wù)的secrets,secret來源于file或external。下面就對secrets的相關(guān)配置項進行一個簡單總結(jié)。

  • file:通過指定路徑中的文件內(nèi)容創(chuàng)建secret。
  • external:如果設(shè)置為true,則指定該secret已經(jīng)創(chuàng)建。Docker不會嘗試創(chuàng)建它,如果它不存在,會發(fā)生secretg not found錯誤。
  • name:指定Docker中secret的名稱。在3.5版的配置文件格式中加入。
  • template_driver:指定要使用的模板驅(qū)動的名稱,它控制是否以及如何將secret有效負載作為模板進行評估。如果未設(shè)置驅(qū)動,則不使用任何模板。當前僅支持使用Go語言的golang驅(qū)動。該配置項在3.8版的配置文件格式中加入,僅在使用docker stack時受支持。

八、擴展字段

在3.4版的配置文件格式中加入

可以使用擴展字段來定義可重用的配置片段。這些特殊字段只要位于Compose配置文件的最頂(root)層,可以為任何格式,它們的名稱以x-開頭。

注意:從3.7版(對于3.x系列)和2.4版(對于2.x系列)的配置文件格式開始,擴展字段可以位于服務(wù)、數(shù)據(jù)卷、網(wǎng)絡(luò)、config和 secret定義部分的root層。

例如以下示例,通過擴展字段x-custom定義一個可重用的配置片段:

version: '3.4'
x-custom:
  items:
    - a
    - b
  options:
    max-size: '12m'
  name: "custom"

這些擴展字段內(nèi)容將被Compose忽略,但是可以通過YAML錨點來引用擴展字段內(nèi)容。例如以下日志記錄配置,希望被多個服務(wù)引用:

logging:
  options:
    max-size: '12m'
    max-file: '5'
  driver: json-file

可以通過&開頭的字符串在擴展字段x-logging定義的日志記錄配置片段中設(shè)置錨點,然后在需要引用該日志記錄配置片段的服務(wù)中以*加上錨點名進行引用:

version: '3.4'
x-logging:
  &default-logging
  options:
    max-size: '12m'
    max-file: '5'
  driver: json-file
services:
  web:
    image: myapp/web:latest
    logging: *default-logging
  db:
    image: mysql:latest
    logging: *default-logging

也可以通過YAML合并來部分覆蓋擴展字段中的值。例如:

version: '3.4'
x-volumes:
  &default-volume
  driver: foobar-storage
services:
  web:
    image: myapp/web:latest
    volumes: ["vol1", "vol2", "vol3"]
volumes:
  vol1: *default-volume
  vol2:
    << : *default-volume
    name: volume02
  vol3:
    << : *default-volume
    driver: default
    name: volume-local

九、其他內(nèi)容

1. 指定持續(xù)時間(durations)

某些配置項如healthcheck配置項的子配置項interval和timeout接受以類似如下格式的字符串表示的持續(xù)時間(durations):

2.5s
10s
1m30s
2h32m
5h34m56s

支持的單位有us、ms、s、m和h。

2. 指定字節(jié)值

某些配置項如build配置項的子配置項shm_size接受以類似如下格式的字符串表示的字節(jié)值:

2b
1024kb
2048k
300m
1gb

支持的單位有b、k或kb、m或mb、g或gb。目前不支持十進制。

3. 變量替換

配置項中的值可以包含環(huán)境變量,Compose會使用運行docker-compose時所在的shell中的環(huán)境變量值來替換Compose配置文件中的環(huán)境變量,VARIABLE和VARIABLE這兩種語法都支持。例如以下示例,假設(shè)shell中有POSTGRES_VERSION=9.3這個環(huán)境變量,則配置中的${POSTGRES_VERSION}將被替換為9.3:

db:
  image: "postgres:${POSTGRES_VERSION}"

如果未設(shè)置環(huán)境變量,則Compose會將配置文件中的環(huán)境變量替換為空字符串。如果上例中的POSTGRES_VERSION未設(shè)置,則image的值為postgres:。可以使用.env環(huán)境文件為環(huán)境變量設(shè)置默認值,不過shell中的環(huán)境變量值會覆蓋.env環(huán)境文件中設(shè)置的值。

使用docker stack deploy時的注意事項:.env環(huán)境文件僅在使用docker-compose up命令時有效,不適用于docker stack deploy。

此外,可以使用典型的shell語法提供內(nèi)聯(lián)默認值,支持以下兩種語法:

${VARIABLE:-default}:如果VARIABLE未設(shè)置或為空,則會應(yīng)用default的值。

${VARIABLE-default}:僅當VARIABLE未設(shè)置時才會應(yīng)用default的值。

同樣,也可以使用以下兩種語法來強制要求變量必須賦值:

${VARIABLE:?err}:如果VARIABLE未設(shè)置或為空,退出并輸出一條包含err的錯誤信息。

${VARIABLE?err}:如果VARIABLE未設(shè)置,退出并輸出一條包含err的錯誤信息。

當配置中需要符號時,可以使用符號。也可以防止Compose插值,因此$ 可以引用不想由Compose處理的環(huán)境變量。例如以下示例,就算設(shè)置了環(huán)境變量VAR_NOT_INTERPOLATED_BY_COMPOSE,Compose配置文件中的VAR_NOT_INTERPOLATED_BY_COMPOSE也不會被替換:

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

如果少指定了一個,也就是只使用單個符號,則Compose會將值解釋為環(huán)境變量,并出現(xiàn)一個類似The VAR_NOT_INTERPOLATED_BY_COMPOSE is not set. Substituting an empty string.這樣的警告。

到此這篇關(guān)于Docker配置文件docker-compose.yml使用指南的文章就介紹到這了,更多相關(guān) docker-compose.yml 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • docker學習筆記之把容器commit成鏡像的方法

    docker學習筆記之把容器commit成鏡像的方法

    本篇文章主要介紹了docker學習筆記之把容器commit成鏡像,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • CentOS服務(wù)器部署Docker+Jenkins持續(xù)集成環(huán)境的方法

    CentOS服務(wù)器部署Docker+Jenkins持續(xù)集成環(huán)境的方法

    本文詳細介紹在CentOS服務(wù)器上部署Docker和Jenkins持續(xù)集成環(huán)境的步驟,涵蓋了準備工作、安裝Docker、配置Docker鏡像加速、安裝Jenkins、配置Jenkins以及集成Docker與Jenkins,通過這些步驟,讀者可以實現(xiàn)代碼的持續(xù)集成與快速部署,提高軟件開發(fā)效率,感興趣的朋友一起看看吧
    2025-02-02
  • Docker上部署Nginx的方法步驟

    Docker上部署Nginx的方法步驟

    本文主要介紹了Docker上部署Nginx的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-04-04
  • docker swarm 集群創(chuàng)建過程

    docker swarm 集群創(chuàng)建過程

    通過docker swarm 工具將一臺或者多臺安裝了docker的服務(wù)器組成一個完整的集群,該集群中的node節(jié)點可以通過Leader節(jié)點管理,這篇文章主要介紹了docker swarm 集群創(chuàng)建,需要的朋友可以參考下
    2024-03-03
  • Docker出現(xiàn)Cannot connect to the Docker daemon. Is the docker daemon running on this host錯誤解決辦法

    Docker出現(xiàn)Cannot connect to the Docker daemon. Is the docker d

    這篇文章主要介紹了Docker出現(xiàn)Cannot connect to the Docker daemon. Is the docker daemon running on this host錯誤解決辦法的相關(guān)資料,需要的朋友可以參考下
    2016-12-12
  • docker 查看jvm內(nèi)存占用方式

    docker 查看jvm內(nèi)存占用方式

    這篇文章主要介紹了docker 查看jvm內(nèi)存占用方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • docker部署tig監(jiān)控服務(wù)教程

    docker部署tig監(jiān)控服務(wù)教程

    本文介紹了使用TIG(Telegraf-InfluxDB-Grafana)架構(gòu)進行服務(wù)監(jiān)控的方法,通過Docker Compose快速搭建該監(jiān)控體系,包括Telegraf、InfluxDB和Grafana的安裝和配置,Telegraf用于數(shù)據(jù)采集,InfluxDB用于存儲數(shù)據(jù),Grafana用于數(shù)據(jù)可視化,通過配置文件和官方文檔
    2024-12-12
  • 詳解利用nginx和docker實現(xiàn)一個簡易的負載均衡

    詳解利用nginx和docker實現(xiàn)一個簡易的負載均衡

    本篇文章主要介紹了利用nginx和docker實現(xiàn)一個簡易的負載均衡 ,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • docker-compose使用中遇到的坑及解決

    docker-compose使用中遇到的坑及解決

    這篇文章主要介紹了docker-compose使用中遇到的坑及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Docker容器生命周期 | kill和 stop的區(qū)別與聯(lián)系 | docker pause/ unpause

    Docker容器生命周期 | kill和 stop的區(qū)別與聯(lián)系 | d

    這篇文章主要介紹了Docker容器生命周期 | kill和 stop的區(qū)別與聯(lián)系 | docker pause/ unpause,本講內(nèi)容是從?Docker入門到進階里面抽離出來的內(nèi)容,從而使原文更加有序、重點突出,需要的朋友可以參考下
    2023-08-08

最新評論