Docker Compose 是一個用於定義和運行多容器應用的工具,利用 yaml
文件來配置所需要的所有服務,可以同時啟動多個容器並建立容器之間的關聯。
安裝
安裝方式依照不同作業系統可以在 Docker 官網 找到相對應的安裝方式,以下以 linux 為例 :
- 下載 Docker Compose
1 | sudo curl -L "https://github.com/docker/compose/releases/download/1.25.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose |
- 修改執行權限
1 | sudo chmod +x /usr/local/bin/docker-compose |
- 測式安裝是否成功
1 | docker-compose --version |
建立 docker-compose.yml
範例 :
這個範例啟動了兩個 Container,分別為 app1 和 app2,若是一般專案設定可以像範例的 app1 設定即可,其他設定到 CI、CD 再設定會比較好。
1 | version: '3' |
yml配置指令
version
指定yml使用哪個版本的 compose
build
兩種方式
- 指定建立 image 的路徑,例如 : build: ./dir,Dockerfile 在 ./dir 路徑下
1 | version: '3' |
- 設定 Dockerfile 路徑,並選擇 Dockerfile,通常是因為有自定義不同名稱的 Dockerfile 才需要特別指定 Dockerfile
- context : 上下文路徑
- dockerfile : 指定 Dockerfile
- args : 添加建置參數,只能在建置過程中存取的環境變數
- labels : 建置 image 的標籤
- target : 多層建置,指定建置哪一層
1 | version: '3' |
environment
添加環境變數,若要使用 boolean 需要用單引號括起來,否則 yml 解析器不會解析為 boolean
1 | environment: |
expose
暴露端口,Container 內部開放存取的 Port 號。expose 用於讓 Container 互相溝通,像是 redis 就有 expose port 6379 來讓 Container 之間互相溝通。
1 | expose: |
ports
Port 對應,Host Port : Container Expose Port
1 | ports: |
network_mode
設置網路模式,bridge、host,等。
1 | network_mode: "bridge" |
restart
設置重啟策略,預設是 no
always : 總是重啟
on-failure : container 正常退出時(退出狀態非0)才重啟
1 | restart: "no" |
secrets
儲存敏感數據,例如密碼
1 | secrets: |
volumes
將主機的文件掛載到 Container
1 | volumes: |
depends_on
設定啟動順序,docker compose 可以一次啟動多個 Container,但是有些 Container 之間是有關連性的就必須有順序性的啟動。
1 | version: '3' |
以上列出較常用到指令,其他見參考3
啟動 docker compose 中所定義的所有 image 成 container
-d : 背景執行
1 | docker-compose up -d |
參考
[1] 用 Docker-Compose 啟動多個 Docker Container
[2] Install Docker Compose
[3] Docker Compose | Runoob.com
[4] Understanding “EXPOSE”