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

docker-compose編排語法及使用說明

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

一、前言

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

使用 Compose 基本上分為三步:

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

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

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

多個配置文件

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

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

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

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

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

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

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

version

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

build

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

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

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

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

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

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

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

build:./dir
image:webapp:tag

context

context 選項可以是 Dockerfile 的文件路徑,也可以是到鏈接到 git 倉庫的 url。

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

build:
   context:./dir

dockerfile

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

build:
   context:.
   dockerfile:Dockerfile-alternate

args

添加構(gòu)建參數(shù),這些參數(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

注意:在Dockerfile中,如果ARG在FROM指令之前指定, ARG則在構(gòu)建說明中不可用FROM。如果您需要在兩個位置都可以使用參數(shù),請在FROM指令下指定它。

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

args:
   - buildno
   - gitcommithash

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

cache_from

編寫緩存解析鏡像列表,此選項是v3.2中的新選項。

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

labels

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

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

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ù)對應(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 文件在群集模式下部署堆棧時,該選項被忽略。因?yàn)?docker stack 命令只接受預(yù)先構(gòu)建的鏡像

command

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

command:bundle exec thin -p 3000

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

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

configs

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

  • SHORT 語法

SHORT 語法只能指定配置名稱,這允許容器訪問配置并將其安裝在 /<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 語法將 redis 服務(wù)訪問授予 my_config 和 my_other_config ,并被 my_other_config 定義為外部資源,這意味著它已經(jīng)在 Docker 中定義。可以通過 docker config create 命令或通過另一個堆棧部署。如果外部部署配置都不存在,則堆棧部署會失敗并出現(xiàn) config not found 錯誤。

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

LONG 語法

LONG 語法提供了創(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。如果配置文件無法寫入,是因?yàn)樗鼈儼惭b在臨時文件系統(tǒng)中,所以如果設(shè)置了可寫位,它將被忽略??蓤?zhí)行位可以設(shè)置。如果您不熟悉 UNIX 文件權(quán)限模式,Unix Permissions Calculator

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

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

container_name

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

container_name:my-web-container

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

depends_on

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

  • docker-compose up以依賴順序啟動服務(wù)。在以下示例中,db并redis在之前啟動web。
  • docker-compose up SERVICE自動包含SERVICE依賴項。在以下示例中,docker-compose up web還創(chuà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

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

  • depends_on不會在啟動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

有幾個子選項可供選擇:

endpoint_mode(第一個)

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

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

  • endpoint_mode: dnsrr : DNS輪詢(DNSRR)服務(wù)發(fā)現(xiàn)不使用單個虛擬 IP。Docker為服務(wù)設(shè)置 DNS 條目,使得服務(wù)名稱的 DNS 查詢返回一個 IP 地址列表,并且客戶端直接連接到其中的一個。如果想使用自己的負(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"

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

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

mode(第三種)

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

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ù)限制使用不超過 50M 的內(nèi)存和 0.50(50%)可用處理時間(CPU),并且保留 20M 了內(nèi)存和 0.25 CPU時間。

devices

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

devices:

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

dns

自定義 DNS 服務(wù)器,與 --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

entrypoint

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

entrypoint:/code/entrypoint.sh

入口點(diǎn)也可以是一個列表,方式類似于 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)境變量??梢允菃蝹€值或是列表

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

但 environment 環(huán)境中的設(shè)置的變量會會覆蓋這些值,無論這些值未定義還是為 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

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

environment

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

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

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

expose

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

expose:

 - "3000"

 - "8000"

image

從指定的鏡像中啟動容器,可以是存儲倉庫、標(biāo)簽以及鏡像 ID。

如果鏡像不存在,Compose 會自動拉去鏡像。

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ā)信號并重新獲得進(jìn)程。將此選項設(shè)置true是為服務(wù)啟用此功能。

version:"3.7"

services:

   web:

     image:alpine:latest

    init:true

links

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

web:
 links:

    - db

    - db:database

    - redis

logging

配置日志服務(wù)

logging:

   driver:syslog

   options:

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

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

driver: "json-file"

driver: "syslog"

driver: "none"

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

driver:"syslog"

options:

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

默認(rèn)驅(qū)動程序 json-file 具有限制存儲日志量的選項,所以,使用鍵值對來獲得最大存儲大小以及最小存儲數(shù)量

driver: "json-file"

options:

   max-size:"200k"

   max-file:"10"

上面實(shí)例將存儲日志文件,直到它們達(dá)到max-size:200kB,存儲的單個日志文件的數(shù)量由該 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

網(wǎng)絡(luò)模式,用法類似于 Docke 客戶端的 --net 選項,格式為: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ù)器名稱或別名來連接到其他服務(wù)的容器,相同的服務(wù)可以在不同的網(wǎng)絡(luò)有不同的別名。

services:

   some-service:

     networks:

       some-network:

         aliases:

          - alias1

          - alias3

       other-network:

         aliases:

          - alias2

下面實(shí)例中,提供 web 、worker以及db 服務(wù),伴隨著兩個網(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ù)的容器指定一個靜態(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 模式,可以打開容器與主機(jī)操作系統(tǒng)之間的共享 PID 地址空間。使用此標(biāo)志啟動的容器可以訪問和操作宿主機(jī)的其他容器,反之亦然

pid: "host"

ports

映射端口

  • SHORT 語法
    • 可以使用 HOST:CONTAINER 的方式指定端口,也可以指定容器端口(選擇臨時主機(jī)端口),宿主機(jī)會隨機(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 格式來映射端口時,如果使用的容器端口小于60可能會得到錯誤得結(jié)果,因?yàn)閅AML 將會解析 xx:yy 這種數(shù)字格式為 60 進(jìn)制,所以建議采用字符串格式。

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

   - target:80

     published:8080

     protocol:tcp

     mode:host

restart

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

restart: "no"

restart: always

restart: on-failure

restart: unless-stopped

volumes

掛載一個目錄或者一個已存在的數(shù)據(jù)卷容器,可以直接使用 HOST:CONTAINER 這樣的格式,或者使用 HOST:CONTAINER:ro 這樣的格式,后者對于容器來說,數(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以及為單個服務(wù)(db服務(wù) 下的第一個路徑volumes)定義的綁定安裝。該db服務(wù)還使用名為dbdata(db服務(wù)中的第二個路徑volumes)的命名卷,但使用舊字符串格式定義它以安裝命名卷。必須在頂級volumes鍵下列出命名卷

SHORT語法

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

LONG 語法有些附加字段

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

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

相關(guān)文章

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

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

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

    Docker無法連接到官方鏡像倉庫常見原因及解決辦法

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

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

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

    Idea通過docker compose?發(fā)布項目的過程

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

    docker磁盤空間不足的解決辦法

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

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

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

    docker程序鏡像的安裝流程

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

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

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

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

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

    chatgpt-web之docker打包流程

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

最新評論

都昌县| 惠安县| 贵港市| 达孜县| 平乐县| 邓州市| 当阳市| 鹤庆县| 青铜峡市| 墨江| 镇沅| 平安县| 仪陇县| 章丘市| 英吉沙县| 清丰县| 偏关县| 隆德县| 德惠市| 尤溪县| 阆中市| 育儿| 曲靖市| 宜阳县| 视频| 长沙县| 合川市| 鞍山市| 建瓯市| 东乌珠穆沁旗| 晋城| 安新县| 九龙城区| 奇台县| 白玉县| 隆德县| 聂拉木县| 德安县| 巴楚县| 夏邑县| 高州市|