iT邦幫忙

2022 iThome 鐵人賽

DAY 26
0
IT管理

用UNRAID打造AIO全生態系列 第 26

Docker Compose:相依性管理

  • 分享至 

  • xImage
  •  

經過昨天的教學,相信大家對於UNRIAD的Docker Compose已熟練
所以從今天要來開始進階寫Docker Compose程式了
我們要來在單個APP運行多個Container


Container相依性的目的

在開始之前,我們需要先了解為什麼Docker需要利用Docker Compose做相依性管理:

1.為了更好的管理容器配置

如果是用Docker run
那每個容器要一同使用某個變量,是無法辦到的

但Docker Compose 因為能同時管理多個Container的特性
所以可在yaml裡定義某個屬性
例如:在.env檔案裡定義不同屬性及變量
不僅起到資安的作用,也能增加方便和易讀性

小提示
雖然叫".env"檔案,但可不只能定義環境變數(environment:)喔!

舉例來說
.env檔案

IMG: mysql:latest
INTER_PORT: 8080
INTER_FOLDER: /var/lib/mysql
UNRAID_FOLDER: /mnt/user/appdata 
MYSQL_ROOT_PASSWORD_1: test123
MYSQL_DATABASE_1: testdb
MYSQL_ROOT_PASSWORD_2: test987987
MYSQL_DATABASE_2: mydb

yaml檔案

version: "2.11"
services:
  mysql:
    image: ${IMG}
    volumes:
        - ${UNRAID_FOLDER}/mysql:${INTER_FOLDER}:rw
    ports:
      - 8888:${INTER_PORT}
    environment:
        MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD_1}
        MYSQL_DATABASE: ${MYSQL_DATABASE_1}
  #第二個Container
  mysql2:
    image: ${IMG}
    volumes:
        - ${UNRAID_FOLDER}/mysql2:${INTER_FOLDER}:rw
    ports:
      - 8887:${INTER_PORT}
    environment:
        MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD_2}
        MYSQL_DATABASE: ${MYSQL_DATABASE_2}

這樣要改值,不只不用擔心手殘/images/emoticon/emoticon14.gif
也能規劃編輯/寫入檔案的權限
例如

.env >> root
docker-compose.yml >> nobody

2.避免某些APP因其他APP未啟動而產生錯誤

舉例來說,有個雲端服務的APP(例如:NextCloud)
它是綁著資料庫來運作的(例如:mysql)

雖然我們可以在Docker主頁手動進行先後執行
就能解決某些APP因其他APP未啟動而產生錯誤
但這實在難搞阿,就沒有更懶人的方法嗎?

有的!
我們一起來利用Docker Compose設定啟動先後順序
利用剛剛的程式來改寫:

yaml檔案

version: "2.11"
services:
  mysql:
    image: ${IMG}
    volumes:
        - ${UNRAID_FOLDER}/mysql:${INTER_FOLDER}:rw
    ports:
      - 8888:${INTER_PORT}
    environment:
        MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD_1}
        MYSQL_DATABASE: ${MYSQL_DATABASE_1}
  #第二個Container
  mysql2:
    image: ${IMG}
    volumes:
        - ${UNRAID_FOLDER}/mysql2:${INTER_FOLDER}:rw
    ports:
      - 8887:${INTER_PORT}
    environment:
        MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD_2}
        MYSQL_DATABASE: ${MYSQL_DATABASE_2}
    # 新增以下Code
    depends_on:
      - mysql

這樣Compose就會等待mysql執行成功後,再執行mysql2了~

好的,這時執行Compose UP試試看能否正常運行!


上一篇
Docker Compose:進階管理
下一篇
Docker Compose:內置指令的用法
系列文
用UNRAID打造AIO全生態31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言