iT邦幫忙

2022 iThome 鐵人賽

DAY 25
0
IT管理

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

Docker Compose:進階管理

  • 分享至 

  • xImage
  •  

上篇我們已經成功編輯yaml並透過Docker Compose讓Container跑起來了
這篇就要來深入講解一些yaml的小技巧,以及在UNRAID的WebUI上怎麼來連結Docker Compose


這是上篇運行mysql成功的畫面
https://ithelp.ithome.com.tw/upload/images/20221009/20117399qP7LdDl4tK.png

可以看到運行新增的Docker Compose APP成功後,就起動了一個Container在主頁上
而主頁的Container管理指令用的是Docker run
這說明什麼呢?

Docker Compose跟Docker run是互通的
因為它們的本質是相同的,只是Docker Compose多了很多"進階管理"的功能
所以先說說接下來這幾天的進度八!

  • Compose YAML撰寫入門

1.yaml變數
2.env檔使用方式

  • Compose YAML+.env進階撰寫

1.Container相依性的目的
2.多個Container實戰
3.多個Container相依性實戰

  • Compose 加入內置指令

1.command
2.healthcheck

  • Compose 進階小技巧

1.Compose相關格式互換
2.總結



1.yaml變數

既然yaml是種語言,那自然也有定義變數的功能
用這用法可以精簡yaml設定內容

例如我們可以繼用上篇的mysql來改寫:

version: "2.11"
services:
  mysql:
    image: mysql:latest
    ports:
        - 8888:8080
    environment:
        MYSQL_ROOT_PASSWORD: test123
        MYSQL_DATABASE: testdb
  volumes:
        - /mnt/user/appdata/mysql:/var/lib/mysql:rw

這時,"volumes"就不再是單純屬性了
而是起到了yaml變數的作用

  • yaml變數定義口訣:
    與上層不共用,與下層共用

這樣撰寫等同於程式內所有Container都共享一個volumes屬性

小提示
但一般Docker Compose實例上
我們不會使用變數來撰寫yaml檔案
因為這樣反而容易撰寫錯誤,甚至造成檔案衝突
而是利用屬性搭配.env檔案來撰寫

2.env檔使用方式

先說說使用env的優點

  • 屬性值複雜時比較好管理
  • 減少資安風險

為何要強調減少資安風險呢?
因為很多Container會把環境變數的參數用在設定帳號密碼等資訊
這樣如果將檔案分開,將能設置檔案權限
讓有心人士不會竊取到真實資訊之餘,也能運行Compose

所以就分成了兩個檔案
首先檔案:.env
就照一般設置環境變數的方法即可

MYSQL_ROOT_PASSWORD: test123
MYSQL_DATABASE: testdb

docker-compose.yml,內容則改成

version: "2.11"
services:
  mysql:
    image: mysql:latest
    volumes:
        - /mnt/user/appdata/mysql:/var/lib/mysql:rw
    ports:
      - 8888:8080
    environment:
        #  ${.env檔案裡的變數名稱}
        MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
        MYSQL_DATABASE: ${MYSQL_DATABASE}

改完後重新執行 COMPOSE UP
Compose就會自動將.env跟yml一起讀取了/images/emoticon/emoticon34.gif


上一篇
Docker Compose:管理與執行
下一篇
Docker Compose:相依性管理
系列文
用UNRAID打造AIO全生態31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言