docker-compose.yml文件配置使用的yaml語言
YAML 是一種簡潔的非標記語言。YAML以數據為中心,使用空白,縮進,分行組織數據,從而使得表示更加簡潔易讀。
首先推薦一個自動檢測YAML 語法的網址: http://nodeca.github.io/js-yaml/
基本規則
-
大小寫敏感
-
使用縮進表示層級關系
-
禁止使用tab縮進,只能使用空格鍵
-
縮進長度沒有限制,只要元素對齊就表示這些元素屬於一個層級
-
使用#表示注釋
-
字符串可以不用引號標注
YAML中允許表示三種格式,分別是常量值,對象和數組
言歸正傳到docker-compose.yml文件配置
docker-compose.yml 文件不僅指定正在使用的容器,還指定如何單獨配置各容器。常用的配置項如下所示:
-
build:定義鏡像生成,可以指定Dockerfile文件所在的目錄路徑,支持絕對路徑和相對路徑;
-
image:從指定的鏡像中啟動容器,可以是存儲倉庫、標簽以及鏡像 ID,如果鏡像不存在,Compose 會自動拉去鏡像;
-
environment:定義環境變量和配置;
-
ports:定義端口映射,比如上面配置中將容器上的公開端口 80 轉接到主機上的外部端口 9901和9902;
-
depends_on,定義依賴關系。此定義會讓當前服務處於等待狀態,直到這些依賴服務啟動。比如某個服務依賴數據庫服務,那么通過此配置解決了服務的啟動順序的問題;
-
volumes,掛載一個目錄或者一個已存在的數據卷容器,可以直接使用 HOST:CONTAINER 這樣的格式,或者使用 HOST:CONTAINER:ro 這樣的格式,后者對於容器來說,數據卷是只讀的,這樣可以有效保護宿主機的文件系統;
-
context,指定Dockerfile 的文件路徑,也可以是到鏈接到 git 倉庫的 url;
-
args,指定構建參數,這些參數只能在構建過程中訪問;
-
target,定義構建指定的階段Dockerfile,比如針對不同階段使用不同的dockerfile,開發階段使用支持編譯調試的dockerfile,而生產環境,則使用輕量級的dockerfile;command,覆蓋默認命令;
-
container_name,指定自定義容器名稱,而不是生成的默認名稱。
-
depends_on:解決了容器的依賴、啟動先后的問題
- container_name:全控制容器的命名,可以使用這個標簽指定
- build:服務除了可以基於指定的鏡像,還可以基於一份 Dockerfile,在使用 up 啟動之時執行構建任務,這個構建標簽就是 build,它可以指定 Dockerfile 所在文件夾的路徑。Compose 將會利用它自動構建這個鏡像,然后使用這個鏡像啟動服務容器
build: /path/to/build/dir # 也可以是相對路徑,只要上下文確定就可以讀取到 Dockerfile。 build: ./dir # 設定上下文根目錄,然后以該目錄為准指定 Dockerfile。 build: context: ../ dockerfile: path/of/Dockerfile
注:如果你同時指定了 image 和 build 兩個標簽,那么 Compose 會構建鏡像並且把鏡像命名為 image 后面的那個名字。
entrypoint: /code/entrypoint.sh
expose:用於指定暴露的端口,但是只是作為一種參考,實際上docker-compose.yml的端口映射還得ports這樣的標簽。
例子:
version: "3" services: zzyly: image: zzytest container_name: zzyly ports: - 80:8080 entrypoint: ["python","main.py"]
總是總是報錯:yaml.scanner.ScannerError:mapping values are not allowed here in "./docker-compose.yaml",line2,column 8
出現這個錯誤的是因為yaml格式不正確,谷歌定義的yaml格式太嚴格了,每個冒號后面都必須帶有空格!!!
參考:https://blog.csdn.net/liguangxianbin/article/details/79492866