個人學習筆記,謝絕轉載!!!
原文:https://www.cnblogs.com/wshenjin/p/13293881.html
docker-compose.yml是一個定義服務、網絡和卷的YAML文件,默認路徑是當前目錄下的docker-compose.yml,可以使用.yml或.yaml作為文件擴展名。
docker-compose.yml標准模板文件應該包含version、services、networks 三大部分,最關鍵的是services和networks兩個部分。
docker-compose.yml
version: '3'
services:
rdb_01: #服務名稱,一個服務對應一個容器
image: rdb-v3.2.7 #image標簽指定服務鏡像名稱或鏡像ID,如果本地不存在,Compose將會嘗試拉取鏡像。
build: #除了基於指定的鏡像,還可以基於Dockerfile。build標簽指定Dockerfile所在文件夾的路徑,Compose將會利用Dockerfile自動構建鏡像並啟動容器。
#如果同時指定image和build兩個標簽,那么Compose會構建鏡像並且把鏡像命名為image值指定的名字。
context: ./redis3.2.7/ #設定上下文根目錄,也可以是鏈接到git倉庫的url。當提供的值是相對路徑時,被解析為相對於撰寫文件的路徑,此目錄也是發送到Docker守護進程的context。
dockerfile: Dockerfile #指定dockerfile,這個dockerfile就位於centext標簽指定的路徑下。
#context和dockerfile可以合並到build標簽,例如:build: ./redis3.2.7/
container_name: myrdb #自定義容器名稱,默認容器名稱格式是:${項目名稱}_${服務名稱}_${序號}
commond: CND #覆蓋容器啟動后默認執行的命令
entrypoint: /path/entrypoi.sh #覆蓋Dockerfile中的定義的entrypoint
depends_on: #容器依賴
- web_01 #例如:web_01服務啟動完,再啟動redb_01
ports: #映射端口
- "6379:6379"
extra_hosts #在容器/etc/hosts文件中添加hosts
- "host1:1.1.1.1"
- "host2:2.2.2.2"
volumes: #掛載卷
- /data/redis/ #只是指定一個路徑,會自動在創建一個數據卷
- /volumes/rdb_01/:/data/redis/
- /volumes/pubvolume/:/tmp/:ro #只讀
volumes_from: #從另一個服務或容器掛載其數據卷
- web_01 #服務名稱
- nginx-v1.14 #容器名稱
dns:8.8.8.8 #自定義dns
dns: #可以按列表的語法
- 8.8.8.8
- 9.9.9.9
expose: #暴露端口,但不映射到宿主機,只允許能被連接的服務訪問。僅可以指定內部端口為參數
- "1234"
networks: #指定網絡,默認每個services都會建立一個獨立的網絡
- "rdb_network" #自定義個 rdb_network,需要在networks字段配置
rdb_network: #也可以這樣,並指定IP地址,語法捉摸不透
ipv4_address: 172.16.1.10
environment: #設置環境變量
- RDB_ENV=TESTRDB
networks:
rdb_network: #自定義一個網絡,rdb_network
driver: bridge #網絡模式
ipam:
driver: default
config:
- subnet: 172.16.1.0/24 #自定義IP段