docker-compose 有趣的訂法(ENV => entrypoint)


#1

直接先丟 example code

version: "3.4"

x-Template: &Template
  volumes:
  - ./soft:/soft
  entrypoint:
  - /bin/bash
  - -c
  - ls /soft/$${TTT}d/ $$0 $$@
  - -a
  - -l
  build: "./dockerfile/base"
  image: tttt:base

services:
  item1:
    << : *Template
    environment:
    - TTTT=item1
  item2:
    << : *Template
    environment:
    - TTTT=item2
  item3:
    << : *Template
    environment:
    - TTTT=item3

這個需求很特殊,類似我有 20 個 project 都由不同團隊開發,假設每個 project 都已經編譯好了所以不可能動內部的內容,所有參數都只有用 stdin / flag 的方式傳入,但每個 project 所用的設定和資源全都一模一樣 … 這種通常有兩種做法,最簡單的會類似全展開,一直複製貼上下去,單純想偷懶看有沒有更好的解法就是

原始來源自這篇

當然這題有很多解法,類似很多人都會選的類似多寫一個 entrypoint.sh 然後看是要 COPY 進去還是 mount 進去再執行都行,但這樣看這個專案時就需要檢查 docker-compose.yml 和該 entrypoint.sh 才行,且如果用的是 COPY / ADD 就一定會多一版 custom image 且每次修改都必須重 build,所以 … (( 結論應該是爽度問題哈哈,所以你可以不選這招,雖然很酷炫

好處當然有,單檔完成所有動作,所有東西看一個 docker-compose-yml 即可,壞處就是寫法有點難看懂就是

目前手邊的專案越來越多,而團隊也正在高度 devOpts 中,所以當你手邊超過 20 個東西在跑在執行, docker 化是必然,上 k8s 也很正常就是