Docker compose 可以讓你一起管理多個container,當你有多個服務需要一起啟動的時候,就可以使用它來替你完成這件事。
前面幾篇文章有說明如何個別配置啟動MySQL以及Java程式,這邊主要說明如何改使用docker compose 一起啟動並連接兩個服務的方式。
docker compose 可以一次啟動多個服務,docker-compose.yml
請到該檔案所在路徑使用指令:docker-compose up
,就能執行這個檔案了
version: '3.7'
networks:
web_app:
driver: bridge
name: web_app_network
services:
db:
image: mysql:8.0.31
container_name: mysql-3308
networks:
- web_app
environment:
- MYSQL_ROOT_PASSWORD=pass
- MYSQL_DATABASE=goal-life
ports:
- "3308:3306"
app:
image: goal-life
container_name: my-spring-boot-app
networks:
- web_app
ports:
- "8081:8080"
depends_on:
- db
( name 這邊可以不用加,預設會是 app image name 加上 network name ⇒ goal-life_web_app)
networks:
web_app:
driver: bridge
name: web_app_network
設定了兩個服務,分別是db 以及app,這個服務的命名可以自己定義
使用 image 為 mysql:8.0.31,並於執行後將container命名為mysql-3308,使用network web_app,配置這個MySQL container 的密碼以及database,並把預設的3306 port號映射為本地的3308。
(這邊就同前面幾篇在docker 構建 MySQL container的配置方法一樣,只是改使用docker-compose一起管理與啟動)
db:
image: mysql:8.0.31
container_name: mysql-3308
networks:
- web_app
environment:
- MYSQL_ROOT_PASSWORD=pass
- MYSQL_DATABASE=goal-life
ports:
- "3308:3306
大部分上方db就有說明是什麼意思,這邊只針對depends_on的部分說明
depends_on -db:主要是配置這個app服務需要依賴於db服務,順序需要db先行啟動、再啟動app。
app:
image: goal-life
container_name: my-spring-boot-app
networks:
- web_app
ports:
- "8081:8080"
depends_on:
- db
雖然depends_on 已經有配置要依賴於db服務了,但無法確保他一定會等db都完整啟動了,才啟動app,所以在第一此使用docker-compose up 執行時,會看到db有啟動成功,但app仍顯示連線失敗的錯誤訊息。
(如果要特別控管一定要等db執行成功,才執行app,可以寫控管流程的腳本,這邊就不細說,請參照官方文件說明)
下一篇我們再來解析docker compose 與 network的執行過程與內容吧!
也會多說明Java application.properties連線配置方式。