iT邦幫忙

2023 iThome 鐵人賽

DAY 12
0
DevOps

從0開始學習DevOps,並部署CICD至Java專案中系列 第 12

建立Docker Compose來管理多個服務的環境,結合Network

  • 分享至 

  • xImage
  •  

什麼是Docker Compose呢?

Docker compose 可以讓你一起管理多個container,當你有多個服務需要一起啟動的時候,就可以使用它來替你完成這件事。

使用docker compose 一起啟動多個服務

前面幾篇文章有說明如何個別配置啟動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

這個docker compose文件做了哪些事呢?

建立一個網絡(network) 命名為 web_app 。

  • driver: bridge:bridge 橋接模式,主要是用來對外連接的,docker container預設的網絡使用的就是bridge,允許container連接到到同一網絡上的其他container。
  • name:將自定義的network 命名為 web_app_network。

( name 這邊可以不用加,預設會是 app image name 加上 network name ⇒ goal-life_web_app)

networks:
  web_app:
    driver: bridge
    name: web_app_network

這個網絡中的服務有哪些?

設定了兩個服務,分別是db 以及app,這個服務的命名可以自己定義

建立一個db服務

使用 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

建立一個app服務

大部分上方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

docker compose 一起啟動 DB 及 Web 注意事項

雖然depends_on 已經有配置要依賴於db服務了,但無法確保他一定會等db都完整啟動了,才啟動app,所以在第一此使用docker-compose up 執行時,會看到db有啟動成功,但app仍顯示連線失敗的錯誤訊息。

(如果要特別控管一定要等db執行成功,才執行app,可以寫控管流程的腳本,這邊就不細說,請參照官方文件說明

下一篇我們再來解析docker compose 與 network的執行過程與內容吧!

也會多說明Java application.properties連線配置方式。


上一篇
Docker 的 network 是什麼呢?
下一篇
Docker compose 與 network 的執行過程解析,與properties連線配置
系列文
從0開始學習DevOps,並部署CICD至Java專案中30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言