最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

docker-compose編排語(yǔ)法及使用說(shuō)明

 更新時(shí)間:2026年06月08日 08:45:26   作者:NBED  
Compose是用于定義和運(yùn)行多容器Docker的工具,支持多配置文件、環(huán)境變量、網(wǎng)絡(luò)和端口映射等功能,簡(jiǎn)化多容器應(yīng)用部署,通過(guò)Dockerfile和docker-compose.yml配置,Compose實(shí)現(xiàn)多容器間的依賴、資源限制和日志管理,提高開(kāi)發(fā)效率

一、前言

Compose 是一個(gè)用于定義和運(yùn)行多容器 Docker 的工具。借助 Compose,您可以使用 YAML 文件來(lái)配置應(yīng)用程序的服務(wù)。

使用 Compose 基本上分為三步:

  • 使用 Dockerfile 定義您的應(yīng)用程序的環(huán)境
  • 使用 docker-compose.yml 定義組成您的應(yīng)用程序的服務(wù)
  • 運(yùn)行docker compose up啟動(dòng)并運(yùn)行程序

compose 的優(yōu)點(diǎn)

  • 在單個(gè)主機(jī)上建立多個(gè)隔離環(huán)境,Compose 使用項(xiàng)目名稱將環(huán)境彼此隔離。您可以在多個(gè)不同的上下文中使用此項(xiàng)目名稱。默認(rèn)項(xiàng)目名稱是項(xiàng)目目錄的基本名稱。您可以使用-p 命令行選項(xiàng)或 - COMPOSE_PROJECT_NAME 環(huán)境變量設(shè)置自定義項(xiàng)目名稱 。默認(rèn)項(xiàng)目目錄是 Compose 文件的基本目錄??梢允褂?ndash;project-directory 命令行選項(xiàng)自定義項(xiàng)目目錄。
  • 創(chuàng)建容器時(shí)保留卷數(shù)據(jù)
  • 僅重新創(chuàng)建已更改的容器,當(dāng)您重新啟動(dòng)未更改的服務(wù)時(shí),Compose 會(huì)使用現(xiàn)有容器。
  • 變量在環(huán)境之間組合重復(fù)使用

多個(gè)配置文件

我們可認(rèn)為同一個(gè)項(xiàng)目配置多個(gè)compose文件,使用多個(gè) Compose 文件使您能夠針對(duì)不同的環(huán)境或不同的工作流程自定義 Compose 應(yīng)用程序。

默認(rèn)情況下,Compose 讀取兩個(gè)文件,docker-compose.yml和一個(gè)可選的docker-compose.override.yml文件。按照慣例,docker-compose.yml包含您的基本配置。override.yml 文件,顧名思義,就是包含現(xiàn)有服務(wù)或全新服務(wù)的配置覆蓋。

如果在兩個(gè)文件中都定義了服務(wù),Compose 會(huì)使用 override 進(jìn)行合并配置。

要使用多個(gè)覆蓋文件或具有不同名稱的覆蓋文件,您可以使用該-f選項(xiàng)來(lái)指定文件列表。Compose 按照在命令行中指定的順序合并文件。

當(dāng)您使用多個(gè)配置文件時(shí),您必須確保文件中的所有路徑都相對(duì)于基本 Compose 文件( 指定的第一個(gè) Compose 文件-f)

docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d

二、Docker Compose 配置文件的構(gòu)建參數(shù)說(shuō)明

version

版本信息,定義關(guān)乎于docker的兼容性,Compose 文件格式有3個(gè)版本,分別為1, 2.x 和 3.x

build

服務(wù)除了可以基于指定的鏡像,還可以基于一份 Dockerfile,在使用 up 啟動(dòng)之時(shí)執(zhí)行構(gòu)建任務(wù),這個(gè)構(gòu)建標(biāo)簽就是 build,它可以指定 Dockerfile 所在文件夾的路徑。Compose 將會(huì)利用它自動(dòng)構(gòu)建這個(gè)鏡像,然后使用這個(gè)鏡像啟動(dòng)服務(wù)容器。

build 可以指定為包含構(gòu)建上下文路徑的字符串:

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

或者,作為具有在上下文中指定的路徑的對(duì)象以及可選的Dockerfile和args:

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

如果你指定image以及build,則使用以下指定的webapp和可選項(xiàng)對(duì)構(gòu)建的鏡像進(jìn)行命名:

這會(huì)在./dir目錄下生成一個(gè)名為webapp和標(biāo)記的鏡像tag。

build:./dir
image:webapp:tag

context

context 選項(xiàng)可以是 Dockerfile 的文件路徑,也可以是到鏈接到 git 倉(cāng)庫(kù)的 url。

當(dāng)提供的值是相對(duì)路徑時(shí),它被解析為相對(duì)于撰寫(xiě)文件的路徑,此目錄也是發(fā)送到 Docker 守護(hù)進(jìn)程的 context。

build:
   context:./dir

dockerfile

使用此 dockerfile 文件來(lái)構(gòu)建,必須指定構(gòu)建路徑。

build:
   context:.
   dockerfile:Dockerfile-alternate

args

添加構(gòu)建參數(shù),這些參數(shù)是僅在構(gòu)建過(guò)程中可訪問(wèn)的環(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

注意:在Dockerfile中,如果ARG在FROM指令之前指定, ARG則在構(gòu)建說(shuō)明中不可用FROM。如果您需要在兩個(gè)位置都可以使用參數(shù),請(qǐng)?jiān)贔ROM指令下指定它。

你可以在指定構(gòu)建參數(shù)時(shí)省略該值,在這種情況下,它在構(gòu)建時(shí)的值是運(yùn)行Compose的環(huán)境中的值。

args:
   - buildno
   - gitcommithash

注意:YAML布爾值(true,false,yes,no,on,off)必須用引號(hào)括起來(lái),這樣分析器會(huì)將它們解釋為字符串。

cache_from

編寫(xiě)緩存解析鏡像列表,此選項(xiàng)是v3.2中的新選項(xiàng)。

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

labels

使用 Docker標(biāo)簽 將元數(shù)據(jù)添加到生成的鏡像中,可以使用數(shù)組或字典。

建議使用反向 DNS 標(biāo)記來(lái)防止簽名與其他軟件所使用的簽名沖突,此選項(xiàng)是v3.3中的新選項(xiàng)。

build:

   context:.

   labels:

     com.example.description:"Accountingwebapp"

     com.example.department:"Finance"

     com.example.label-with-empty-value:""

build:

   context:.

   labels:

     - "com.example.description=Accountingwebapp"

     - "com.example.department=Finance"

     - "com.example.label-with-empty-value"

shm_size

設(shè)置容器 /dev/shm 分區(qū)的大小,值為表示字節(jié)的整數(shù)值或表示字符的字符串

build:

   context:.

   shm_size:'2gb'

build:

   context:.

   shm_size:10000000

target

根據(jù)對(duì)應(yīng)的 Dockerfile 構(gòu)建指定 Stage

build:

   context:.

   target:prod

cap_add,cap_drop

添加或刪除容器功能

cap_add:

   - ALL

 

cap_drop:

   - NET_ADMIN

   - SYS_ADMIN

注意:當(dāng)用(Version 3) Compose 文件在群集模式下部署堆棧時(shí),該選項(xiàng)被忽略。因?yàn)?docker stack 命令只接受預(yù)先構(gòu)建的鏡像

command

覆蓋容器啟動(dòng)后默認(rèn)執(zhí)行的命令

command:bundle exec thin -p 3000

該命令也可以是一個(gè)列表,方式類似于dockerfile:

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

configs

使用服務(wù) configs 配置為每個(gè)服務(wù)賦予相應(yīng)的訪問(wèn)權(quán)限,支持兩種不同的語(yǔ)法

  • SHORT 語(yǔ)法

SHORT 語(yǔ)法只能指定配置名稱,這允許容器訪問(wèn)配置并將其安裝在 /<config_name> 容器內(nèi),源名稱和目標(biāo)裝入點(diǎn)都設(shè)為配置名稱。

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

以上實(shí)例使用 SHORT 語(yǔ)法將 redis 服務(wù)訪問(wèn)授予 my_config 和 my_other_config ,并被 my_other_config 定義為外部資源,這意味著它已經(jīng)在 Docker 中定義??梢酝ㄟ^(guò) docker config create 命令或通過(guò)另一個(gè)堆棧部署。如果外部部署配置都不存在,則堆棧部署會(huì)失敗并出現(xiàn) config not found 錯(cuò)誤。

注意: config 定義僅在 3.3 版本或在更高版本的撰寫(xiě)文件格式中受支持,YAML 的布爾值(true, false, yes, no, on, off)必須要使用引號(hào)引起來(lái)(單引號(hào)、雙引號(hào)均可),否則會(huì)當(dāng)成字符串解析。

LONG 語(yǔ)法

LONG 語(yǔ)法提供了創(chuàng)建服務(wù)配置的更加詳細(xì)的信息。

  • source:Docker 中存在的配置的名稱
  • target:要在服務(wù)的任務(wù)中裝載的文件的路徑或名稱。如果未指定則默認(rèn)為 /
  • uid 和 gid:在服務(wù)的任務(wù)容器中擁有安裝的配置文件的數(shù)字 UID 或 GID。如果未指定,則默認(rèn)為在Linux上。Windows不支持。
  • mode:在服務(wù)的任務(wù)容器中安裝的文件的權(quán)限,以八進(jìn)制表示法。例如,0444 代表文件可讀的。默認(rèn)是 0444。如果配置文件無(wú)法寫(xiě)入,是因?yàn)樗鼈儼惭b在臨時(shí)文件系統(tǒng)中,所以如果設(shè)置了可寫(xiě)位,它將被忽略。可執(zhí)行位可以設(shè)置。如果您不熟悉 UNIX 文件權(quán)限模式,Unix Permissions Calculator

下面示例在容器中將 my_config 名稱設(shè)置為 redis_config,將模式設(shè)置為 0440(group-readable)并將用戶和組設(shè)置為 103。該redis服務(wù)無(wú)法訪問(wèn) my_other_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

可以同時(shí)授予多個(gè)配置的服務(wù)相應(yīng)的訪問(wèn)權(quán)限,也可以混合使用 LONG 和 SHORT 語(yǔ)法。定義配置并不意味著授予服務(wù)訪問(wèn)權(quán)限。

container_name

為自定義的容器指定一個(gè)名稱,而不是使用默認(rèn)的名稱

container_name:my-web-container

由于Docker容器名稱必須是唯一的,因此如果指定了自定義名稱,則無(wú)法將服務(wù)擴(kuò)展到1個(gè)容器之外。試圖這樣做會(huì)導(dǎo)致錯(cuò)誤。

depends_on

容器中服務(wù)之間的依賴關(guān)系,依賴關(guān)系會(huì)導(dǎo)致以下行為:

  • docker-compose up以依賴順序啟動(dòng)服務(wù)。在以下示例中,db并redis在之前啟動(dòng)web。
  • docker-compose up SERVICE自動(dòng)包含SERVICE依賴項(xiàng)。在以下示例中,docker-compose up web還創(chuàng)建并啟動(dòng)db和redis。
  • docker-compose stop按依賴順序停止服務(wù)。在以下示例中,web在db和之前停止redis
version:"3.7"
services:
   web:
     build:.
     depends_on:
       - db
       - redis
   redis:
     image:redis
   db:
     image:postgres

使用時(shí)需要注意以下幾點(diǎn)depends_on:

  • depends_on不會(huì)在啟動(dòng)web之前等待db和redis“就緒”

  • 版本3不再支持condition形式depends_on。

deploy

指定與部署和運(yùn)行服務(wù)相關(guān)的配置。

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

有幾個(gè)子選項(xiàng)可供選擇:

endpoint_mode(第一個(gè))

  • endpoint_mode:指定連接到群組外部客戶端服務(wù)發(fā)現(xiàn)方法

  • endpoint_mode:vip :Docker 為該服務(wù)分配了一個(gè)虛擬 IP(VIP),作為客戶端的 “前端“ 部位用于訪問(wèn)網(wǎng)絡(luò)上的服務(wù)。

  • endpoint_mode: dnsrr : DNS輪詢(DNSRR)服務(wù)發(fā)現(xiàn)不使用單個(gè)虛擬 IP。Docker為服務(wù)設(shè)置 DNS 條目,使得服務(wù)名稱的 DNS 查詢返回一個(gè) IP 地址列表,并且客戶端直接連接到其中的一個(gè)。如果想使用自己的負(fù)載平衡器,或者混合 Windows 和 Linux 應(yīng)用程序,則 DNS 輪詢調(diào)度(round-robin)功能就非常實(shí)用。

version:"3.7"
services:
 wordpress:
   image:wordpress
   ports:
     - "8080:80"
   networks:
     - overlay
   deploy:
     mode:replicated
     replicas:2
     endpoint_mode:vip
 mysql:
   image:mysql
   volumes:
      - db-data:/var/lib/mysql/data
   networks:
      - overlay
   deploy:
     mode:replicated
     replicas:2
     endpoint_mode:dnsrr
volumes:
   db-data:
networks:
   overlay:

labels(第二種)

指定服務(wù)的標(biāo)簽,這些標(biāo)簽僅在服務(wù)上設(shè)置

version:"3.7"
services:
   web:
     image:web
     deploy:
       labels:
         com.example.description:"Thislabelwillappearonthewebservice"

通過(guò)將 deploy 外面的 labels 標(biāo)簽來(lái)設(shè)置容器上的 labels

version:"3.7"
services:
   web:
     image:web
     labels:
       com.example.description:"Thislabelwillappearonallcontainersforthewebservice"

mode(第三種)

global:每個(gè)集節(jié)點(diǎn)只有一個(gè)容器

replicated:指定容器數(shù)量(默認(rèn))

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

placement(第四種)

指定 constraints 和 preferences

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(第五種)

如果服務(wù)是 replicated(默認(rèn)),需要指定運(yùn)行的容器數(shù)量

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

resources(第六種)

配置資源限制

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

例子中,redis 服務(wù)限制使用不超過(guò) 50M 的內(nèi)存和 0.50(50%)可用處理時(shí)間(CPU),并且保留 20M 了內(nèi)存和 0.25 CPU時(shí)間。

devices

設(shè)置映射列表,與 Docker 客戶端的 --device 參數(shù)類似

devices:

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

dns

自定義 DNS 服務(wù)器,與 --dns 具有一樣的用途,可以是單個(gè)值或列表

dns:8.8.8.8

dns:

   - 8.8.8.8

   - 9.9.9.9

dns_search

自定義 DNS 搜索域,可以是單個(gè)值或列表

dns_search:example.com

dns_search:

   - dc1.example.com

   - dc2.example.com

entrypoint

在 Dockerfile 中有一個(gè)指令叫做 ENTRYPOINT 指令,用于指定接入點(diǎn)。在 docker-compose.yml 中可以定義接入點(diǎn),覆蓋 Dockerfile 中的定義

entrypoint:/code/entrypoint.sh

入口點(diǎn)也可以是一個(gè)列表,方式類似于 dckerfile:

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

從文件中添加環(huán)境變量??梢允菃蝹€(gè)值或是列表

如果已經(jīng)用 docker-compose -f FILE 指定了 Compose 文件,那么 env_file 路徑值為相對(duì)于該文件所在的目錄

但 environment 環(huán)境中的設(shè)置的變量會(huì)會(huì)覆蓋這些值,無(wú)論這些值未定義還是為 None

env_file:.env

env_file:

   - ./common.env

   - ./apps/web.env

    -/opt/secrets.env

a.env 文件

# a.env

VAR=1

b.env文件

# b.env

VAR=hello

對(duì)于在文件a.env 中指定的相同變量但在文件 b.env 中分配了不同的值,如果 b.env 像下面列在 a.env 之后,則剛在 a.env 設(shè)置的值被 b.env 相同變量的值覆蓋,此時(shí) $VAR 值為 hello。此外,這里所說(shuō)的環(huán)境變量是對(duì)宿主機(jī)的 Compose 而言的,如果在配置文件中有 build 操作,這些變量并不會(huì)進(jìn)入構(gòu)建過(guò)程中,如果要在構(gòu)建中使用變量還是首選 arg 標(biāo)簽。

environment

添加環(huán)境變量,可以使用數(shù)組或字典。與上面的 env_file 選項(xiàng)完全不同,反而和 arg 有幾分類似,這個(gè)標(biāo)簽的作用是設(shè)置鏡像變量,它可以保存變量到鏡像里面,也就是說(shuō)啟動(dòng)的容器也會(huì)包含這些變量設(shè)置,這是與 arg 最大的不同。

一般 arg 標(biāo)簽的變量?jī)H用在構(gòu)建過(guò)程中。而 environment 和 Dockerfile 中的 ENV 指令一樣會(huì)把變量一直保存在鏡像、容器中,類似 docker run -e 的效果。

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

expose

暴露端口,但不映射到宿主機(jī),只被連接的服務(wù)訪問(wèn)。這個(gè)標(biāo)簽與 Dockerfile 中的 EXPOSE 指令一樣,用于指定暴露的端口,但是只是作為一種參考,實(shí)際上 docker-compose.yml 的端口映射還得 ports 這樣的標(biāo)簽

expose:

 - "3000"

 - "8000"

image

從指定的鏡像中啟動(dòng)容器,可以是存儲(chǔ)倉(cāng)庫(kù)、標(biāo)簽以及鏡像 ID。

如果鏡像不存在,Compose 會(huì)自動(dòng)拉去鏡像。

image: redis

image: ubuntu:14.04

image: tutum/influxdb

image: example-registry.com:4000/postgresql

image: a4bc65fd

init

在容器內(nèi)運(yùn)行init,轉(zhuǎn)發(fā)信號(hào)并重新獲得進(jìn)程。將此選項(xiàng)設(shè)置true是為服務(wù)啟用此功能。

version:"3.7"

services:

   web:

     image:alpine:latest

    init:true

links

鏈接到其它服務(wù)的中的容器,可以指定服務(wù)名稱也可以指定鏈接別名(SERVICE:ALIAS),與 Docker 客戶端的 --link 有一樣效果,會(huì)連接到其它服務(wù)中的容器。

web:
 links:

    - db

    - db:database

    - redis

logging

配置日志服務(wù)

logging:

   driver:syslog

   options:

   syslog-address:"tcp://192.168.59.5:123"

該 driver值是指定服務(wù)器的日志記錄驅(qū)動(dòng)程序,默認(rèn)值為 json-file,與 --log-diver 選項(xiàng)一樣

driver: "json-file"

driver: "syslog"

driver: "none"

注意:只有驅(qū)動(dòng)程序 json-file 和 journald 驅(qū)動(dòng)程序可以直接從 docker-compose up 和 docker-compose logs 獲取日志。使用任何其他方式不會(huì)顯示任何日志。
對(duì)于可選值,可以使用 options 指定日志記錄中的日志記錄選項(xiàng)

driver:"syslog"

options:

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

默認(rèn)驅(qū)動(dòng)程序 json-file 具有限制存儲(chǔ)日志量的選項(xiàng),所以,使用鍵值對(duì)來(lái)獲得最大存儲(chǔ)大小以及最小存儲(chǔ)數(shù)量

driver: "json-file"

options:

   max-size:"200k"

   max-file:"10"

上面實(shí)例將存儲(chǔ)日志文件,直到它們達(dá)到max-size:200kB,存儲(chǔ)的單個(gè)日志文件的數(shù)量由該 max-file 值指定。隨著日志增長(zhǎng)超出最大限制,舊日志文件將被刪除以存儲(chǔ)新日志

docker-compose.yml 限制日志存儲(chǔ)的示例

version:"3.7"

services:

   some-service:

     image:some-service

     logging:

       driver:"json-file"

       options:

         max-size:"200k"

         max-file:"10"

network_mode

網(wǎng)絡(luò)模式,用法類似于 Docke 客戶端的 --net 選項(xiàng),格式為: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]"

networks

加入指定網(wǎng)絡(luò)

services:

   some-service:

     networks:

      - some-network

      - other-network

#####aliases
同一網(wǎng)絡(luò)上的其他容器可以使用服務(wù)器名稱或別名來(lái)連接到其他服務(wù)的容器,相同的服務(wù)可以在不同的網(wǎng)絡(luò)有不同的別名。

services:

   some-service:

     networks:

       some-network:

         aliases:

          - alias1

          - alias3

       other-network:

         aliases:

          - alias2

下面實(shí)例中,提供 web 、worker以及db 服務(wù),伴隨著兩個(gè)網(wǎng)絡(luò) new 和 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_address、ipv6_address

為服務(wù)的容器指定一個(gè)靜態(tài) IP 地址

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 模式設(shè)置為主機(jī) PID 模式,可以打開(kāi)容器與主機(jī)操作系統(tǒng)之間的共享 PID 地址空間。使用此標(biāo)志啟動(dòng)的容器可以訪問(wèn)和操作宿主機(jī)的其他容器,反之亦然

pid: "host"

ports

映射端口

  • SHORT 語(yǔ)法
    • 可以使用 HOST:CONTAINER 的方式指定端口,也可以指定容器端口(選擇臨時(shí)主機(jī)端口),宿主機(jī)會(huì)隨機(jī)映射端口
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"

注意:當(dāng)使用 HOST:CONTAINER 格式來(lái)映射端口時(shí),如果使用的容器端口小于60可能會(huì)得到錯(cuò)誤得結(jié)果,因?yàn)閅AML 將會(huì)解析 xx:yy 這種數(shù)字格式為 60 進(jìn)制,所以建議采用字符串格式。

  • LONG 語(yǔ)法
    • LONG 語(yǔ)法支持 SHORT 語(yǔ)法不支持的附加字段
      • target:容器內(nèi)的端口
      • published:公開(kāi)的端口
      • protocol: 端口協(xié)議(tcp 或 udp)
      • mode:通過(guò)host 用在每個(gè)節(jié)點(diǎn)還是哪個(gè)發(fā)布的主機(jī)端口或使用 ingress 用于集群模式端口進(jìn)行平衡負(fù)載
ports:

   - target:80

     published:8080

     protocol:tcp

     mode:host

restart

默認(rèn)值為 no ,即在任何情況下都不會(huì)重新啟動(dòng)容器;當(dāng)值為 always 時(shí),容器總是重新啟動(dòng);當(dāng)值為 on-failure 時(shí),當(dāng)出現(xiàn) on-failure 報(bào)錯(cuò)容器退出時(shí),容器重新啟動(dòng)。

restart: "no"

restart: always

restart: on-failure

restart: unless-stopped

volumes

掛載一個(gè)目錄或者一個(gè)已存在的數(shù)據(jù)卷容器,可以直接使用 HOST:CONTAINER 這樣的格式,或者使用 HOST:CONTAINER:ro 這樣的格式,后者對(duì)于容器來(lái)說(shuō),數(shù)據(jù)卷是只讀的,這樣可以有效保護(hù)宿主機(jī)的文件系統(tǒng)

version: "3.7"

services:

  web:

    image: nginx:alpine

    volumes:

      - type: volume

        source: mydata

        target: /data

        volume:

          nocopy: true

      - type: bind

        source: ./static

        target: /opt/app/static

 

  db:

    image: postgres:latest

    volumes:

      - "/var/run/postgres/postgres.sock:/var/run/postgres/postgres.sock"

      - "dbdata:/var/lib/postgresql/data"

 

volumes:

  mydata:

  dbdata:

此示例顯示服務(wù)使用的命名卷(mydata)web以及為單個(gè)服務(wù)(db服務(wù) 下的第一個(gè)路徑volumes)定義的綁定安裝。該db服務(wù)還使用名為dbdata(db服務(wù)中的第二個(gè)路徑volumes)的命名卷,但使用舊字符串格式定義它以安裝命名卷。必須在頂級(jí)volumes鍵下列出命名卷

SHORT語(yǔ)法

  • 可以選擇在主機(jī)(HOST:CONTAINER)或訪問(wèn)模式(HOST:CONTAINER:ro)上指定路徑。
  • 可以在主機(jī)上掛載相對(duì)路徑,該路徑相對(duì)于正在使用的 Compose 配置文件的目錄進(jìn)行擴(kuò)展。相對(duì)路徑應(yīng)始終以 . 或 … 開(kāi)頭
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

LONG語(yǔ)法

LONG 語(yǔ)法有些附加字段

  • type:安裝類型,可以為 volume、bind 或 tmpfs
  • source:安裝源,主機(jī)上用于綁定安裝的路徑或定義在頂級(jí) volumes密鑰中卷的名稱 ,不適用于 tmpfs 類型安裝。
  • target:卷安裝在容器中的路徑
  • read_only:標(biāo)志將卷設(shè)置為只讀
  • bind:配置額外的綁定選項(xiàng)
  • propagation:用于綁定的傳播模式
  • volume:配置其他卷選項(xiàng)
  • nocopy:創(chuàng)建卷時(shí)禁止從容器復(fù)制數(shù)據(jù)的標(biāo)志
  • tmpfs:配置額外的 tmpfs 選項(xiàng)
  • size:tmpfs 的大小,以字節(jié)為單位
  • consistent:完全一致。容器運(yùn)行時(shí)和主機(jī)始終保持相同的安裝視圖。這是默認(rèn)值。
  • cached:主機(jī)的mount視圖是權(quán)威的。在主機(jī)上進(jìn)行的更新在容器中可見(jiàn)之前可能會(huì)有延遲。
  • delegated:容器運(yùn)行時(shí)的mount視圖是權(quán)威的。在容器中進(jìn)行的更新在主機(jī)上可見(jiàn)之前可能會(huì)有延遲。
version: "3.7"
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:

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • docker容器內(nèi)要啟動(dòng)兩個(gè)進(jìn)程時(shí)Dockerfile的實(shí)現(xiàn)代碼

    docker容器內(nèi)要啟動(dòng)兩個(gè)進(jìn)程時(shí)Dockerfile的實(shí)現(xiàn)代碼

    這篇文章主要介紹了docker容器內(nèi)要啟動(dòng)兩個(gè)進(jìn)程時(shí)Dockerfile的實(shí)現(xiàn)代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-11-11
  • Docker無(wú)法連接到官方鏡像倉(cāng)庫(kù)常見(jiàn)原因及解決辦法

    Docker無(wú)法連接到官方鏡像倉(cāng)庫(kù)常見(jiàn)原因及解決辦法

    在軟件開(kāi)發(fā)和部署過(guò)程中,Docker已經(jīng)成為一個(gè)廣泛使用的容器化解決方案,下面這篇文章主要介紹了Docker無(wú)法連接到官方鏡像倉(cāng)庫(kù)常見(jiàn)原因及解決辦法的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2026-02-02
  • Docker Compose 常用命令詳解(最新推薦)

    Docker Compose 常用命令詳解(最新推薦)

    Docker Compose 是一個(gè)用于定義和運(yùn)行多容器 Docker 應(yīng)用的工具,本文將詳細(xì)介紹 Docker Compose 的常用命令,幫助你高效地管理容器應(yīng)用,感興趣的朋友一起看看吧
    2025-04-04
  • Idea通過(guò)docker compose?發(fā)布項(xiàng)目的過(guò)程

    Idea通過(guò)docker compose?發(fā)布項(xiàng)目的過(guò)程

    這篇文章主要介紹了Idea結(jié)合docker-compose發(fā)布項(xiàng)目,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-08-08
  • docker磁盤(pán)空間不足的解決辦法

    docker磁盤(pán)空間不足的解決辦法

    linux的磁盤(pán)空間掛載后,需要遷移一下docker 鏡像原本的位置,因此有此實(shí)踐,分享操作過(guò)程,文章通過(guò)代碼示例給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-11-11
  • docker容器中文亂碼的解決方法

    docker容器中文亂碼的解決方法

    Docker默認(rèn)不支持中文,在docker中部署Java運(yùn)行環(huán)境,查看日志時(shí)都是亂碼,下面這篇文章主要給大家介紹了關(guān)于docker容器中文亂碼的解決方法,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05
  • docker程序鏡像的安裝流程

    docker程序鏡像的安裝流程

    鏡像相當(dāng)于容器的"源代碼",docker 鏡像文件類似于 Java 類模板,而 docker 容器實(shí)例類似于 Java 中 new 出來(lái)的實(shí)例對(duì)象,這篇文章主要介紹了docker程序鏡像的安裝,需要的朋友可以參考下
    2024-01-01
  • Docker部署Jirafeau文件共享工具的實(shí)現(xiàn)步驟

    Docker部署Jirafeau文件共享工具的實(shí)現(xiàn)步驟

    Jirafeau 是一款開(kāi)源的文件分享工具,為用戶提供簡(jiǎn)單、快速的一鍵式文件上傳與分享服務(wù),本文就來(lái)介紹一下Docker部署Jirafeau文件共享工具的實(shí)現(xiàn)步驟,感興趣的可以了解一下
    2025-07-07
  • docker?運(yùn)行花生殼實(shí)現(xiàn)內(nèi)外網(wǎng)穿透的詳細(xì)過(guò)程

    docker?運(yùn)行花生殼實(shí)現(xiàn)內(nèi)外網(wǎng)穿透的詳細(xì)過(guò)程

    這篇文章主要介紹了docker?運(yùn)行花生殼實(shí)現(xiàn)內(nèi)外網(wǎng)穿透,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-03-03
  • chatgpt-web之docker打包流程

    chatgpt-web之docker打包流程

    這篇文章主要介紹了chatgpt-web中docker的打包流程,文中有詳細(xì)的代碼示例,對(duì)學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2023-05-05

最新評(píng)論

罗江县| 昌吉市| 古浪县| 桐梓县| 介休市| 同心县| 鸡泽县| 香河县| 深泽县| 务川| 西和县| 龙陵县| 怀集县| 珠海市| 抚远县| 景洪市| 璧山县| 菏泽市| 灵寿县| 沂源县| 思茅市| 邹平县| 榆社县| 九江市| 汾西县| 宿州市| 宁南县| 女性| 肇州县| 和政县| 大安市| 铜山县| 蒙阴县| 南开区| 青浦区| 望江县| 射洪县| 理塘县| 华蓥市| 黄平县| 华容县|