docker-compose.yml參數(shù)的用法(配置文件)
更新時間:2023年11月23日 09:04:12 作者:Jiahao_Lin
這篇文章主要介紹了docker-compose.yml參數(shù)的用法(配置文件),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
docker-compose.yml參數(shù)的用法
簡單易懂
利用淳樸的配置文件風(fēng)格介紹docker-compose.yml
#系統(tǒng)變量 $PWD : 當(dāng)前目錄 #注意:YAML布爾值(true,false,yes,no,on,off)必須用引號括起來,以便解析器將它們解釋為字符串。 #字典時 environment: SHOW: 'true' 數(shù)組時 environment: - SHOW=true
#版本號
version: "2.1"
# 指定創(chuàng)建的虛擬網(wǎng)絡(luò)數(shù)量
# 作用:通過不同的虛擬網(wǎng)絡(luò)實現(xiàn)了容器網(wǎng)絡(luò)之間的隔離,從而在最大程度上去保護后端網(wǎng)絡(luò)的安全。
#networks:
# mynet:
# driver: bridge
# mynet1:
# 重用的代碼模板
# 模板的定義必須以 x- 開頭
x-logging:
# 以 & 開頭的字符串為模板命名
# 以 * 加上模板的名稱引用模板
&default-logging
driver: json-file
options:
max-size: "200k"
max-file: "10"
# 定義全局掛載卷
volumes:
test_1.thinking.com:
test_2.thinking.com:
# 服務(wù)
services:
#服務(wù)名稱
todo:
# 構(gòu)建鏡像
build:
# 指定dockerfile的上下文路徑(相對當(dāng)前docker-compose.yml的位置)
# 包含Dockerfile文件的目錄路徑,或者是git倉庫的URL。
# 當(dāng)提供的值是相對路徑時,它被解釋為相對于當(dāng)前compose文件的位置。
# 該目錄也是發(fā)送到Docker守護程序構(gòu)建鏡像的上下文。
context: .
# Dockerfile的文件名稱
dockerfile: Dockerfile-todo
args:
# 變量
buildno: 1
password: secret
# Dockerfile里面可使用的參數(shù)變量
# Dockerfile:
# ARG buildno
# ARG password
# RUN echo "Build number: $buildno"
# RUN script-requiring-password.sh "$password"
# 鏡像名 : 倉庫/標(biāo)簽:版本
image: zhanyang/todo-demo:1.0.0
# 依賴(以指定順序啟動)
depends_on:
mysql:
condition: service_healthy
# 指定一個自定義容器名稱,而不是生成的默認名稱。
# 由于Docker容器名稱必須是唯一的,因此如果指定了自定義名稱,則無法將服務(wù)擴展到多個容器。
container_name: todo
# 卷掛載路徑設(shè)置。
# 可以設(shè)置宿主機路徑 (HOST:CONTAINER) 或加上訪問模式 (HOST:CONTAINER:ro)
# 掛載數(shù)據(jù)卷的默認權(quán)限是讀寫(rw),可以通過ro指定為只讀。
volumes:
# 只需指定一個路徑,讓引擎創(chuàng)建一個卷
- /var/lib/mysql
# 指定絕對路徑映射
- /opt/data:/var/lib/mysql
# 相對于當(dāng)前compose文件的相對路徑
- ./cache:/tmp/cache
# 用戶家目錄相對路徑
- ~/configs:/etc/configs/:ro
# 命名卷
- datavolume:/var/lib/mysql
# 使用全局掛載卷
- test_1.thinking.com:/test:rw
# 指定日志驅(qū)動為 json-file,存儲日志的最大文件 size 為 200k,最多存儲 10 這樣大的文件。
# logging支持很多driver,而每一個driver對應(yīng)的options都不一樣
# docker inspect -f {{.HostConfig.LogConfig}} lnmp-nginx
# result:{json-file map[max-file:10 max-size:2000k]}
# docker info |grep 'Logging Driver'
# result:Logging Driver: json-file
# 其他:https://docs.docker.com/engine/admin/logging/overview/
logging:
driver: "json-file"
options:
max-size: "200k"
max-file: "10"
# 指定使用的虛擬網(wǎng)絡(luò)
networks:
# - mynet
# 覆蓋容器啟動后默認執(zhí)行的命令。
# 該命令也可以是一個類似于dockerfile的列表:command: ["bundle", "exec", "thin", "-p", "3000"]
command: bundle exec thin -p 3000
# may
command: ["/usr/local/nginx/sbin/nginx"]
# 鏈接到另一個服務(wù)中的容器。 請指定服務(wù)名稱和鏈接別名(SERVICE:ALIAS),或者僅指定服務(wù)名稱。
# 實際是通過設(shè)置/etc/hosts的域名解析,從而實現(xiàn)容器間的通信。
# 故可以像在應(yīng)用中使用localhost一樣使用服務(wù)的別名鏈接其他容器的服務(wù),前提是多個服務(wù)容器在一個網(wǎng)絡(luò)中可路由聯(lián)通
# links也可以起到和depends_on相似的功能,即定義服務(wù)之間的依賴關(guān)系,從而確定服務(wù)啟動的順序
links:
- db
- db:database
- redis
# 鏈接到docker-compose.yml 外部的容器,甚至并非 Compose 管理的容器。參數(shù)格式跟 links 類似。
external
- redis_1
- project_db_1:mysql
- project_db_1:postgresql
# 暴露端口,但不映射到宿主機,只被連接的服務(wù)訪問。 僅可以指定內(nèi)部端口為參數(shù)
expose:
- "3000"
- "8000"
# 暴露端口信息。使用宿主:容器 (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"
# v3.2中ports的長格式的語法允許配置不能用短格式表示的附加字段。
ports:
- target: 80 #容器內(nèi)的端口
published: 8080 #物理主機的端口
protocol: tcp #端口協(xié)議(tcp或udp)
mode: host #host 和ingress 兩總模式,host用于在每個節(jié)點上發(fā)布主機端口,ingress 用于被負載平衡的swarm模式端口。
# no是默認的重啟策略,在任何情況下都不會重啟容器。
restart: "no"
# 指定為always時,容器總是重新啟動。
restart: always
# 如果退出代碼指示出現(xiàn)故障錯誤,則on-failure將重新啟動容器。
restart: on-failure
restart: unless-stopped
# pid 將PID模式設(shè)置為主機PID模式。
# 這就打開了容器與主機操作系統(tǒng)之間的共享PID地址空間。
# 使用此標(biāo)志啟動的容器將能夠訪問和操作裸機的命名空間中的其他容器,反之亦然。
# 即打開該選項的容器可以相互通過進程 ID 來訪問和操作。
pid: "host"
# 配置 DNS 服務(wù)器??梢允且粋€值,也可以是一個列表。
dns: 8.8.8.8
dns:
- 8.8.8.8
- 9.9.9.9
# 自定義搜索域
dns_search: example.com
dns_search:
- dc1.example.com
- dc2.example.com
# 覆蓋Dockerfile中的entrypoint,用法同Dockerfile中的用法
entrypoint: ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]
# 添加環(huán)境變量。 你可以使用數(shù)組或字典兩種形式。
# 任何布爾值; true,false,yes,no需要用引號括起來,以確保它們不被YML解析器轉(zhuǎn)換為True或False。
environment:
RACK_ENV: development
SHOW: 'true'
SESSION_SECRET:
# 【注意】:如果你的服務(wù)指定了build選項,那么在構(gòu)建過程中通過environment定義的環(huán)境變量將不會起作用。
# 將使用build的args子選項來定義構(gòu)建時的環(huán)境變量。
environment:
- RACK_ENV=development
- SHOW=true
- SESSION_SECRE
# 1>將定義的變量編寫在文件中,然后在yml文件中進行添加
env_file: .env
env_file:
- ./common.env
- ./apps/web.env
- /opt/secrets.env
# 2>例如:
# old:
db:
image: mysql
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: redhat
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
# new:
db:
image: mysql
ports:
- "3306:3306"
env_file: ./mysql_env
# 創(chuàng)建env_file文件在當(dāng)前目錄mysql_env
MYSQL_ROOT_PASSWORD=redhat
MYSQL_DATABASE=wordpress
MYSQL_USER=wordpress
MYSQL_PASSWORD=wordpress3
# 添加hostname映射,類似于docker cli下面的--add-host
extra_hosts:
- "www.hcstart.com:192.168.101.14"
# 配置一個檢查去測試服務(wù)中的容器是否運行正常
# 具體: https://docs.docker.com/engine/reference/builder/#healthcheck
# 查看healthcheck的狀態(tài)輸出 : docker inspect lnmp-nginx
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost"]
interval: 1m30s
timeout: 10s
retries: 3
# labels:添加元數(shù)據(jù)到container中,查看現(xiàn)有容器的labels:
# docker inspect -f {{.Config.Labels}} lnmp-nginx # lnmp-nginx :容器名
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"
# 在容器中設(shè)置內(nèi)核參數(shù)
sysctls:
net.core.somaxconn: 1024
net.ipv4.tcp_syncookies: 0
sysctls:
- net.core.somaxconn=1024
- net.ipv4.tcp_syncookies=0
mysql:
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: tododb
MYSQL_USER: user
MYSQL_PASSWORD: pass
build:
context: .
dockerfile: Dockerfile-mysql
image: zhanyang/mysql:5.6
container_name: mysql
# 以 * 加上模板的名稱引用模板 使用全局自定義模板
logging: *default-logging
# 指定使用的虛擬網(wǎng)絡(luò)
networks:
# - mynet1
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
您可能感興趣的文章:
- docker常用容器啟動docker-compose.yml配置文件使用
- 關(guān)于immich?docker-compose.yml配置文件詳解
- 在docker-compose.yml文件中配置容器的環(huán)境變量方式
- 使用docker?compose快速配置一組容器服務(wù)詳解
- Springboot使用docker-compose實現(xiàn)動態(tài)配置過程
- docker-compose配置并部署redis服務(wù)的實現(xiàn)
- 詳解Docker Compose配置文件參數(shù)
- Docker compose配置文件寫法及命令使用示例
- docker-compose安裝yml文件配置方式
- docker compose 一鍵部署分布式配置中心Apollo的過程詳解
- docker-compose部署配置jenkins的詳細教程
- Docker Compose 配置指南小結(jié)
相關(guān)文章
Docker Swarm實現(xiàn)服務(wù)的滾動更新的示例代碼
這篇文章主要介紹了Docker Swarm實現(xiàn)服務(wù)的滾動更新的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04
docker部署nginx訪問宿主機服務(wù)并使用緩存的操作方法
這篇文章主要介紹了docker部署nginx訪問宿主機服務(wù)并使用緩存的操作方法,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,感興趣的朋友一起看看吧2024-04-04
Docker容器處于Removal in process無法刪除問題及解決
這篇文章主要介紹了Docker容器處于Removal in process無法刪除問題及解決方案,具有很好的參考價值,希望對大家有所幫助。2023-07-07
docker部署Prometheus+Cadvisor+Grafana實現(xiàn)服務(wù)器監(jiān)控
這篇文章主要為大家介紹了docker部署Prometheus+Cadvisor+Grafana實現(xiàn)服務(wù)器監(jiān)控,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-11-11
docker 創(chuàng)建RedHat8.5鏡像的命令
這篇文章主要介紹了docker 創(chuàng)建RedHat8.5鏡像的命令,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧2024-03-03
Docker下利用jenkins和docker實現(xiàn)持續(xù)交付
這篇文章主要介紹了利用jenkins和docker實現(xiàn)持續(xù)交付功能,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-05-05

