iT邦幫忙

2023 iThome 鐵人賽

0
DevOps

跟著菜鳥手把手用Docker建立服務系列 第 23

Day23 - 跟菜鳥們分享我實作 Docker Compose 遇到的問題

  • 分享至 

  • xImage
  •  

其實要真正學會一們東西,就是從失敗中學習,這樣才會印象深刻,在失敗的前提是,要真正去實作,當然每個人的遇到的問題可能不同,不管問題簡單與否都是很好的經驗,畢竟我還蠻常遇到簡單的問題搞得我很長的時間,但往好處想下次遇到同樣的問題,可以快速解決/images/emoticon/emoticon07.gif


問題一 : Copy參數及路徑

  • 如果你 Copy 相關的處理是在 Dockerfile裡,那就要注意一下 docekr-compose.yaml 所設定相關連的參數,不然會讀不到你所Copy的資料,就會造成 Container 啟動失敗
  • 建議是 Copy相關的處理寫在 docekr-compose.yaml,原因是比較能知道你對應的相關設定,比較不會出錯,這邊要注意的是docekr-compose必需要3.8版才有支援Copy參數

問題二 : RUN 參數

  • docekr-compose.yaml 不支援Run參數
  • 如果真的想使用Run參數就寫在Dockerfile裡,這也是為何Dockerfile跟Docker Compose 相輔相成的原因,各司其職,什麼樣的功能給適合的工具做,這樣才能明確爾且有效率
  • 當然你也可以用command(CMD)來取代RUN,但要注意什麼樣的情況必須要用RUN,例如我必須在啟動Djang前要先安裝Library,如果把 pip install -r requirements.txt 用 command 執行,那Container會啟動失敗
  • RUN 與 CMD 差別,可以參考Day10 - 跟著菜鳥一起學習DockerFile

問題三 : depends_on 的真面目

  • depends_on目的是考慮到Service相依性的問題,像Mysql跟Django他們是有相依性的,必須Mysql先啟動好才能啟動Django,畢竟要先連線Mysql成功,Django後續才能啟動
  • 正常來講我們直覺的在Django Service在depends_on設定Mysql Service,就有順序的啟動,但真正的事實是,在Mysql容器啟動之後的執行時間比預期的還要長,會有時間差的問題
  • 我們在depends_on多加一個condition,然後用Healthcheck 來解決,確保Service真的成功,才繼續啟動下一個Service

這是我遇到的問題,有些看似很基本很容易理解,但說真的越簡單的東西越容易出錯,可能我自己的粗心大意的關係,但提出來跟大家分享,不要小看這三個問題,光一個問題我就處理很久,解決之後才發現,越簡單的東西你把它看得理所單然就容易出錯,如果大家一一實作遇到的問題一定不一樣,也歡迎菜鳥們分享給大家知道,當作經驗分享/images/emoticon/emoticon12.gif


參考資料:
談 docker compose 的 depends_on 設定怎麼使用


上一篇
Day22 - 菜鳥們一起探討實作的 Docker Compose
下一篇
Day24 - 跟菜鳥們一起幫 Docker 做健康檢查
系列文
跟著菜鳥手把手用Docker建立服務30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言