婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 淺談docker compose書寫規則

淺談docker compose書寫規則

熱門標簽:工廠位置地圖標注 繽客網注冊時地圖標注出不來 企業400電話辦理哪正規 400電話辦理哪家好廠商 重慶營銷外呼系統排名 地圖標注企業名稱侵權案件 地圖標注需要現場嗎 鶴壁電銷外呼系統怎么安裝 網站上插入地圖標注內容

本文對集群部署相關的一概不做介紹

版本約束

  • Docker Engine >= 19.03
  • Docker Compose >=3.8

結構介紹

docker-compose.yaml 文件結構主要由

version # docker compose版本
networks # 網絡,用于docker容器內部通訊
x-{name} # 模版命名規則 以x-開頭 用于復用
volumes # 掛載卷
services # 服務模塊,內部定義容器信息 其內部參數相當于docker run時的參數

模塊介紹

Docker Compose官方文檔

version

設定docker-compose.yaml的版本
需要升級的話,參看文檔版本升級參考文檔

Compose file 版本 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.+

network_mode

使用與--network參數相同的值,以及特殊形式service:[service name]

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

networks

為當前docker-compose.yaml文件創建的容器設定網絡

不一定存在于和version同級,也可以在各個其他模塊中,例如services中

內部網絡

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

公用網絡

version: "3"
networks:
 default-network:

aliases(待補充)

網絡的別名

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:

ipv4_address , ipv6_address(待補充)

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"

services

最主要的部分,用來配置各個服務

build

用于構建鏡像,當build和image字段都存在時,使用image指定的鏡像名和tag作為build鏡像的name和tag

version: "3.8" # docker compose版本
services:
 webapp: # docker-compose定義的服務(容器)名,主要是針對docker-compose命令的參數,與docker ps看到的容器名不一定一致
  build: # 使用Dockerfile構建鏡像
   context: ./dir 上下文路徑,相對路徑則是相對于compose文件路徑
   dockerfile: Dockerfile-alternate # 指定Dockerfile文件名
   args: # 指定Dockerfile的參數 環境變量
    buildno: 1 # directory寫法和list寫法均可

context

可以使用相對路徑或者git倉庫的url

build:
 context: ./dir

Dockerfile

指定Dockerfile文件名,必須指定context

build:
 context: .
 dockerfile: Dockerfile-alternate

args

Dockerfile中的ARG字段,用于指定docker build時的環境變量

ARG buildno
ARG gitcommithash

RUN echo "Build number: $buildno" # bash-like風格的寫法
RUN echo "Based on commit: $gitcommithash"

可以使用list或者map來設定args

build:
 context: .
 args: # map
  buildno: 1
  gitcommithash: cdc3b19
build:
 context: .
 args: # list
  - buildno=1
  - gitcommithash=cdc3b19

tips
如果需要使用boolean值,需要使用雙引號("true", "false", "yes", "no", "on", "off"),以便解析器將他們解析為字符串。

cache_from

為build過程指定cache

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

labels

同Dockerfile中的LABEL指令,為鏡像設定metadata

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

network

docker --network指令,為容器指定網絡,個人理解為設定局域網
橋接可以將兩個物理局域網連接起來
三種模式

build:
 context: .
 network: host # host模式,網絡延遲最低,性能與宿主機一致
build:
 context: .
 network: custom_network_1 # 自創network 
build:
 context: .
 network: none # 無網絡

shm_size

設置容器內/dev/shm目錄的大小

/dev/shm目錄非常重要,此目錄并不在硬盤上,而是在內存中,默認大小為內存的一半大小,存入其中的文件不會被清空,容器內劃分此目錄可以一定程度上指定容器的性能。

build:
 context: .
 shm_size: '2gb' # 使用字符串設置大小
build:
 context: .
 shm_size: 10000000 # 設置字節大小

command

相當于Dockerfile中的CMD命令

command: bundle exec thin -p 3000 # shell-like
command: ["bundle", "exec", "thin", "-p", "3000"] # json-like

container_name

相當于docker run --name

container_name: my-web-container

depends_on

用于表述服務之間的依賴關系

docker-compose up時,會根據depends_on來決定啟動順序

version: "3.8"
services:
 web:
  build: .
  depends_on: # 先啟動 db 和 redis
   - db
   - redis
 redis:
  image: redis
 db:
  image: postgres

tips:
docker-compose 不會等待depends_on中的容器的狀態時‘ready'時才啟動,所以需要在啟動完成后檢查容器狀態。官方給出了解決辦法,使用shell腳本來曲線救國,不做贅述。

depends_on does not wait for db and redis to be “ready” before starting web - only until they have been started. If you need to wait for a service to be ready, see Controlling startup order for more on this problem and strategies for solving it.
       ----form https://docs.docker.com/compo...

devices

掛載的外接設備,與--devices功能相同

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

dns

自定義dns地址

dns: 8.8.8.8 # 單個string值
dns: # list 
 - 8.8.8.8
 - 9.9.9.9

dns_search

自定義dns搜索域名

dns_search: example.com # 單個string值
dns_search:
 - dc1.example.com
 - dc2.example.com

entrypoint

覆蓋重寫默認的 entrypoint

entrypoint: /code/entrypoint.sh

同Dockerfile中的寫法

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

tips:
docker-compose.yaml 中的 entrypoint 清空Dockerfile中的CMD命令,并覆蓋所有的Dockerfile中的ENTRYPOINT指令。

env_file

docker-compose.yaml添加環境變量文件。如果在docker-compose -f FILE中設置了 compose 文件,則env_file中的文件路徑是相對于FILE的相對路徑

env_file: .env # single value
env_file: # list
 - ./common.env
 - ./apps/web.env
 - /opt/runtime_opts.env

tips:
.env 文件格式:

# Set Rails/Rack environment # '#'為注釋,
# 空行會被忽略
RACK_ENV=development # 格式為 VAR=VAL

.env 文件中的環境變量無法在build過程中被顯示讀取,只會被docker-compose.yaml文件讀取,如果需要在build時使用該環境變量,請在build后加args子參數。

對于指定多個.env文件的情況,官網的這句話賊復雜

Keep in mind that the order of files in the list is significant in determining the value assigned to a variable that shows up more than once.
---from https://docs.docker.com/compo...

直譯過來是

請記住,列表中文件的順序對于確定分配給多次顯示的變量的值很重要。

因為對環境參數文件的處理是自上而下的,所以翻譯成人話就是,多個參數文件中包含同一個環境變量,以最后一個為準。

environment

添加環境變量

environment: # map
 RACK_ENV: development
 SHOW: 'true'
 SESSION_SECRET:
environment: # list
 - RACK_ENV=development
 - SHOW=true
 - SESSION_SECRET

tips:
.env 文件中的環境變量無法在build過程中被顯示讀取,只會被docker-compose.yaml文件讀取,如果需要在build時使用該環境變量,請在build后加args子參數。
次環境變量在構建鏡像時,可以被我們自身的代碼讀取到,例如:

func getEnvInfo() string {
  rackEnv := os.Getenv("RACK_ENV")
  fmt.Println(rackEnv)
}

output:
development

expose

暴露端口,但是僅限于服務之間的通信,暴露的是內部端口,類似Dockerfile的EXPOSE指令

expose:
 - "3000"
 - "8000"

external_links

連接服務

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

tips:
官方推薦使用network

extra_hosts

添加自定義域名,同--add-host

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

也可以在容器內的/etc/hosts文件內寫入

162.242.195.82 somehost
50.31.209.229  otherhost

healthcheck

同Dockerfile中的HEALTHCHECK指令

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

使用disabel: true,相當于test: ["NONE"]

healthcheck:
 disable: true

image

指定需要拉取或使用的鏡像,也可以使用倉庫/標簽或部分鏡像ID

image: redis # 默認標簽 latest
image: ubuntu:18.04
image: tutum/influxdb
image: example-registry.com:4000/postgresql
image: a4bc65fd

init

在容器內運行一個初始化程序,以轉發信號開獲取進程。

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

tips:
使用的默認初始化二進制文件是Tini,并安裝在/usr/libexec/docker-init守護程序主機上。您可以通過init-path配置選項將守護程序配置為使用自定義init二進制文件 。

isolation

指定容器隔離技術,Linux只支持default,windows支持default`process hyperv`三個值,具體參考 Docker Engine Docs

labels

同Dockerfile中的LABEL指令,為容器設定metadata

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

links

舊版的功能,不推薦使用

logging

為當前服務設置日至參數

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

driver參數同--log-driver指令

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

tips:
只有使用json-filejournald時,docker-compose updocker-compose logs才能看到日志,其他任何的驅動都無法看到日志打印。

指定日志設置,同docker run --log-opt.格式為k-v結構

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

默認的日志驅動是json-file,可以設置存儲限制

options:
 max-size: "200k" # 單文件最大存儲
 max-file: "10" # 文件最大數量

tips:
上述的option參數僅為json-file日志驅動支持的參數,不同驅動支持的參數各不相同,具體參照下表。

支持的驅動列表

Driver Description
none 不輸出日志。
local 日志以自定義格式存儲,旨在最大程度地減少開銷。
json-file 日志以自定義格式存儲,旨在最大程度地減少開銷。
syslog 將日志消息寫入syslog設施。該syslog守護程序必須在主機上運行。
journald 將日志消息寫入journald。該journald守護程序必須在主機上運行。
gelf 將日志消息寫入Graylog擴展日志格式(GELF)端點,例如Graylog或Logstash。
fluentd 將日志消息寫入fluentd(向前輸入)。該fluentd守護程序必須在主機上運行。
awslogs 將日志消息寫入Amazon CloudWatch Logs。
splunk 將日志消息寫入到splunk使用HTTP Event Collector。
etwlogs 將日志消息寫為Windows事件跟蹤(ETW)事件。僅在Windows平臺上可用。
gcplogs 將日志消息寫入Google Cloud Platform(GCP)日志記錄。
logentries 將日志消息寫入Rapid7 Logentries。

tips:
具體請參考 Configure logging drivers

ports

對外暴露端口

short syntax:
要么指定兩個端口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"

tips:
當以HOST:CONTAINER格式映射端口時,使用低于60的容器端口可能會報錯,因為YAML會將格式xx:yy中的數字解析為以60進制的數(可以理解為時間)。因此建議始終將端口映射顯式指定為字符串。

long syntax

長語法允許出現短語法不允許出現的字段

  • arget:容器內的端口
  • published:公開暴露端口
  • protocol:端口協議(tcp或udp)
  • mode:host用于在每個節點上發布主機端口,或ingress使群集模式端口達到負載平衡。
ports:
 - target: 80
  published: 8080
  protocol: tcp
  mode: host

restart

容器重啟策略

restart: "no" # 失敗不重啟
restart: always # 失敗后總是重啟
restart: on-failure # 錯誤碼為 on-failure 時才重啟
restart: unless-stopped # 手動停止后不重啟

secrets(待補充)

volumes

用來掛載數據卷

short syntax
短語法使用最簡單的格式[SOURCE:]TARGET[:MODE]

  • SOURCE可以是宿主機地址,也可以是數據卷名。
  • TARGET是容器內路徑。
  • MODE包括rofor read-onlyrw for read-write(默認)

如果使用宿主機的相對路徑,則以docker-compose.yaml為基礎進行拓展。

volumes:
 # 指定容器內路徑,docker 自動創建路徑
 - /var/lib/mysql

 # 掛載絕對路徑
 - /opt/data:/var/lib/mysql

 # 掛載相對路徑
 - ./cache:/tmp/cache

 # 用戶目錄相對路徑
 - ~/configs:/etc/configs/:ro

 # 命名掛載
 - datavolume:/var/lib/mysql

long syntax

長語法允許使用短語法無法表達的字段

  • type: 安裝類型, bind, tmpfs 或者 npipesource: 掛載源,可以是宿主機路徑,也可以是頂級掛載設置中設置好的卷名。tmpfs不適用于掛載target: 容器內掛載路徑read_only: 設置掛載路徑只讀
  • bind: 配置額外的綁定設置
    • propagation: 用于設置綁定的傳播模式
  • volume: 配置額外的掛載配置
    • nocopy: 創建卷時禁用從容器復制數據標識位
  • tmpfs: 配置額外的tmpfs配置
    • size: 設置掛載tmpfs的大小(字節)
  • consistency: 裝載的一致性要求,consistent (主機和容器具有相同的視圖),cached(讀緩存,主機視圖具有權威性)或delegated(讀寫緩存,容器的視圖具有權威性)之一
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:

到此這篇關于淺談docker compose書寫規則的文章就介紹到這了,更多相關docker compose書寫規則內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

標簽:渭南 鹽城 棗莊 克拉瑪依 96 常州 日照 東莞

巨人網絡通訊聲明:本文標題《淺談docker compose書寫規則》,本文關鍵詞  淺談,docker,compose,書寫,規則,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《淺談docker compose書寫規則》相關的同類信息!
  • 本頁收集關于淺談docker compose書寫規則的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    九九国产精品视频| 日韩午夜激情av| 91论坛在线播放| 欧美精品日日鲁夜夜添| 国产精品美女久久久久久久网站| 黄色小说综合网站| 欧美视频中文字幕| 国产精品国产精品国产专区不片| 国产成人精品一区二区三区四区| 欧美日韩国产免费| 91麻豆精品国产91久久久资源速度 | 亚洲线精品一区二区三区八戒| 久久er精品视频| 欧美三级欧美一级| 蜜臀精品久久久久久蜜臀| 欧美日韩综合在线免费观看| 国产精品视频看| 91麻豆免费看| 亚洲视频网在线直播| 欧美自拍偷拍一区| 亚洲日本青草视频在线怡红院| 国产精一区二区三区| 成人免费小视频| a美女胸又www黄视频久久| 中文字幕免费不卡在线| 欧美日韩免费高清一区色橹橹| 一个色综合网站| 成人午夜精品在线| 亚洲成人你懂的| 91精品国产色综合久久ai换脸 | 26uuu久久天堂性欧美| 石原莉奈在线亚洲二区| 色偷偷久久一区二区三区| 免费成人在线观看视频| 精品国产免费久久| 欧美中文字幕不卡| 五月天激情综合网| 欧美一区二区三区四区高清 | 午夜精品久久久久久久99樱桃| 欧美亚洲一区三区| 国产精品综合在线视频| 国产女人aaa级久久久级| 麻豆传媒一区二区三区| 又紧又大又爽精品一区二区| 精品视频123区在线观看| 欧美tickling网站挠脚心| 波多野结衣中文字幕一区二区三区 | 国产精品亚洲成人| 亚洲6080在线| 精品免费国产二区三区| 成人免费视频播放| 黑人巨大精品欧美黑白配亚洲| 国产精品久久久久天堂| 成人sese在线| 成人av第一页| 日韩av午夜在线观看| 亚洲一区二区欧美日韩 | 欧美日韩成人综合在线一区二区| 日韩精品一区二区三区四区视频| 国内外精品视频| 美腿丝袜亚洲色图| 亚洲欧美国产三级| 精品久久久久久无| 精品日韩一区二区| 欧美在线观看18| 成人福利在线看| www.性欧美| 老司机午夜精品| 99久久精品国产毛片| 成人黄色网址在线观看| 久久国产欧美日韩精品| 久久国产免费看| 亚洲午夜精品网| 国产精品麻豆视频| 亚洲男人天堂一区| 久久蜜臀中文字幕| 这里只有精品99re| 精品捆绑美女sm三区| 欧美一区二区性放荡片| 日韩三级免费观看| 欧美丰满嫩嫩电影| 韩国三级中文字幕hd久久精品| 国产主播一区二区三区| 日本成人中文字幕在线视频 | 久久久久久久久伊人| 欧美精品色一区二区三区| 精品免费日韩av| 欧美一个色资源| 6080yy午夜一二三区久久| 日韩免费看网站| 欧美大片国产精品| 成年人午夜久久久| 欧美精品自拍偷拍| 欧美日韩精品一区视频| 久久免费视频一区| 中文字幕免费一区| 日本一区二区三区久久久久久久久不| 亚洲日本一区二区三区| 亚洲日穴在线视频| 亚洲欧美日韩国产手机在线| 无吗不卡中文字幕| 亚洲网友自拍偷拍| 丝袜脚交一区二区| 首页国产欧美久久| 自拍偷拍亚洲欧美日韩| 亚洲综合av网| 日本女优在线视频一区二区| 久久99精品国产.久久久久久| 一区二区三区小说| 天堂一区二区在线免费观看| 日本一不卡视频| 国产在线观看免费一区| 9191精品国产综合久久久久久 | 欧美丝袜自拍制服另类| 欧美精品自拍偷拍| 精品久久久久久综合日本欧美| 亚洲欧美日韩小说| 欧美老肥妇做.爰bbww视频| 欧美一区二区成人6969| 夜夜嗨av一区二区三区中文字幕 | 国产精品久久久久久久久免费相片 | 午夜精品久久久久久久蜜桃app| 国产成人自拍在线| 成人免费高清在线观看| 国产日韩视频一区二区三区| 青青草国产精品亚洲专区无| 国产成人在线影院| 欧美三级日韩三级国产三级| 精品欧美乱码久久久久久1区2区| 欧美成人猛片aaaaaaa| 日韩免费视频一区二区| 喷水一区二区三区| 成人做爰69片免费看网站| 久久久久久久久久久黄色| 午夜精品久久久| 成人国产视频在线观看| 国产精品每日更新| 热久久久久久久| 日韩免费视频一区二区| 夜夜亚洲天天久久| 国产aⅴ综合色| 国产精品女人毛片| 免费人成黄页网站在线一区二区| 911国产精品| 一区二区三区 在线观看视频| 蜜桃免费网站一区二区三区| 色88888久久久久久影院按摩 | 蜜桃av一区二区| www精品美女久久久tv| 日韩色在线观看| 久久99国产精品免费| 91免费国产在线观看| 久久九九影视网| 91小视频在线| 中文字幕第一区| 91久久久免费一区二区| 国产日韩欧美制服另类| 日韩一区日韩二区| 欧美日韩一卡二卡| 亚洲免费伊人电影| 欧美精品自拍偷拍| 亚洲gay无套男同| 国产精品综合二区| 亚洲三级小视频| 色婷婷一区二区三区四区| 午夜伦理一区二区| 9191久久久久久久久久久| 中文字幕不卡在线观看| 91成人免费在线| 一区二区三区四区中文字幕| 精品久久久久久综合日本欧美| 男女男精品视频| 91色在线porny| 国产欧美一区视频| 成人黄色综合网站| 一区二区三区在线播放| 欧美午夜影院一区| 五月天丁香久久| 欧美日韩mp4| 97se亚洲国产综合自在线| 日本一区二区不卡视频| 99精品欧美一区二区蜜桃免费 | 成人av电影在线观看| 亚洲免费观看高清| 精品国产精品一区二区夜夜嗨| 国产一区二区0| 日韩av电影一区| 久久久欧美精品sm网站| av在线综合网| 国产福利不卡视频| 成人免费一区二区三区在线观看 | 欧美tickling网站挠脚心| 精品无码三级在线观看视频| 91.xcao| 在线精品国精品国产尤物884a| 日韩电影在线一区二区三区| 亚洲人吸女人奶水| 日韩一卡二卡三卡四卡| 日本欧美在线看| 婷婷久久综合九色综合绿巨人|