compose 其實就是組合的意思
所以 Docker Compose 就是把專案內需要用到的映像檔進行組合。
既然都可以組合這些映像檔了,所以 Docker Compose 當然也可以管理利用這些映像檔跑起來的 container
想像今天有個網頁專案
如果每個部分都自己寫一個 Dockerfile 之後再跑 docker build 以及 docker run 是不是就很麻煩。
所以 Docker Compose 就是為了應付這種狀況而產生的工具。
接下來就來講講 Docker Compose 的寫法吧!
Docker Compose 會 yaml 格式進行設定
副檔名會用 .yml 結尾
整個檔案就會命名為:docker-compose.yml
Docker Compose 內部可以分為四個區塊
這邊要提一個很重要的觀念,不管是 Dockerfile 還是 Docker Compose 都會用到映射這個觀念。
映射簡單來說就是把本地端的檔案丟給 Docker Container 內部使用。
version 代表著這份 Docker Compose file 的版本,不同的版本其 Docker engine 的支援度不同
目前有 version 1 、 version 2、 version 3 三種版本,最常使用且支援度最高的是 version 3
宣告 Docker Compose file 版本,也很簡單只要寫成這樣即可:
version: '3'
對於 Docker Compose 來說,只要是此專案需要用到的東西都統稱為服務(services)
以剛剛的例子來看,這個專案就會有五種服務,這些服務的描述就是寫在 services 內。
一步一步建立一個 service 吧!
定義這個 services 的名稱
services:
web:
# write web settings
指定哪個映像檔
# image 來自 Dockerfile build
web:
build: ./front-end
# image 來自 Docker Hub
mysql:
build: mysql:5.7
指定對外以及 container 端口(port)
# ports 寫法會是 "HOST:CONTAINER"
ports:
"80:80"
# 假如只寫一個則代表 "CONTAINER"
ports:
"80"
服務彼此相依性
depends_on:
- api_server
container 重啟
# restart 有四種參數:"no"、always、on-failure、unless-stopped
restart: always
再來講點進階版的設定
volumes 代表著將專案內檔案映射至 container 中指定資料夾
volumes:
- db-data:/var/lib/mysql
environment 代表此服務的環境變數,這個就要看此映像檔支援哪些環境變數設定
environment:
MYSQL_DATABASE: 'mytestdb'
MYSQL_USER: 'testuser'
MYSQL_PASSWORD: 'password'
MYSQL_ROOT_PASSWORD: 'password'
network 代表服務彼此間的內部溝通網路橋樑
networks:
- myNetWork
expose 代表此服務要暴露哪個端口使其他的服務可以藉由此端口進行連接
expose:
- '3306'
volumes 的存在就是為了讓每次重啟 container 時都還可以引用到之前所存放的資料。
可以跟 services 區塊內的 volumes 搭配使用
services:
db:
image: db
volumes:
- data-volume:/var/lib/db
volumes:
data-volume:
network 設定此專案的網路
在 network 中會搭配一些 driver ,常見的有:
最後寫法長像這樣:
networks:
myNetwork:
driver: bridge
下次的分享會主題是 Kubernetes 的介紹
謝謝大家