因為docker-compose的參數項目一樣巨多,這邊先列出常用的,詳情一樣請左轉Compose specification | Docker Documentation
docker-compose.yaml,由幾個部分組成:定義容器的Service
、定義網路的Network
和定義永久儲存資料的Volume
,因為篇幅也是挺大的,就一天講一個吧:
Service
: Service
主要是在定義應用服務啟動時,用來執行的 container 相關資訊,比如說 image 是用哪個、是不是要透過 Dockerfile 先進行編譯、要不要覆寫預設 command 或是 entrypoint、環境變數為何、port 導出與對應等等的,這些參數多半在 docker run 指令有相對應的參數。
image
:指定container要使用哪個imagenetworks
:container加入的網路,此設定需要參考最外層 networks 的設定build
:定義在build container時需要的資料command
:會overwrite image的 CMD
內容,為容器一啟動變執行的指令container_name
:自定義的容器名稱,須符合[a-zA-Z0-9][a-zA-Z0-9_.-]+
正則表達式,等同於docker run --name
restart
:當容器crash時的動作
restart: "no"
:預設行為,在任何情況皆不重啟
restart: always
:若crash永遠會重新啟動,除非container移除restart: on-failure
:若exit code為錯誤則重啟unless-stopped
:關閉的容器會永遠關閉,除非手動再啟動port
:對外開放的port,等同於docker run -p
volumes
:設定 container 要使用的volume,相同於docker run --v
,此部分和networks一樣需要參考最外層 volume 的設定secrets
:可以使container得以存取一些機密資料(定義於外層的secret
),比如簽章、證書等等services:
frontend:
image: awesome/webapp
secrets:
- server-certificate
secrets:
server-certificate:
file: ./server.cert
env_file
:指定以檔案形式描述環境變數的檔案位置VAR[=[VAL]]
environment
:一樣是指定環境變數的方式,但比env_file為優先,以下兩種都是有效的寫法environment:
RACK_ENV: development
SHOW: "true"
USER_INPUT:
environment:
- RACK_ENV=development
- SHOW=true
- USER_INPUT