docker-compose編排語法及使用說明
一、前言
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.14labels
使用 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:globalplacement(第四種)
指定 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.zonereplicas(第五種)
如果服務(wù)是 replicated(默認(rèn)),需要指定運(yùn)行的容器數(shù)量
version:"3.7"
services:
worker:
image:dockersamples/examplevotingapp_worker
networks:
- frontend
- backend
deploy:
mode:replicated
replicas:6resources(第六種)
配置資源限制
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ù)載
- LONG 語法支持 SHORT 語法不支持的附加字段
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)代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11
Idea通過docker compose?發(fā)布項目的過程
這篇文章主要介紹了Idea結(jié)合docker-compose發(fā)布項目,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-08-08
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ì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-03-03

