本篇文章是個經驗分享文,作者分享使用 Docker 作為開發環境時值得注意的 Best practices,透過這些經驗分享希望能夠讓開發者少走一些冤枉路。
原文提出了 15 個經驗談,這邊幫大家節錄幾個,有興趣的可以點選原文瞭解更多!
1. One thing at a time
2. Be ephemeral
3. Utilize .dockerignore
4. Less is more
5. Secrets should be secret
6. PID 1 is your birth right
7. Share and Care
8. Vulnerability Scan
9. Tag like you mean it
10. Permissions are costly
11. Source of Truth
12. Always official
13. Don’t include debug
14. Use entry point script smartly
15. Size does matter
One thing at a time
建置 Image 的時候專注做好一件事情,每個 Image 應該有一個專心要解決的問題,譬如一個應用程式,一個小工具等。對於 Nginx 這類型的 Image 來說,應該沒有人會期望於裡面看到有 Apache 的應用程式吧?
Be ephemeral
這個主要探討的是該 Image 本身建置時應該要以 stateless 的概念去處理,未來不論是透過 docker 或是 Kubernetes 來管理部署時,Contaienr 都很有機會被重啟,每次的重啟都意味該容器是重新啟動。所以千萬不要讓你的 Image 變成多次重啟會導致應用程式出問題的形式,任何的這類型資料應該都要透過外部取得,不要塞到你的 Image 內
Utilize .dockerignore
善用 .dockerignore 這個檔案來將不必要的檔案從 build 過程給排除,使用方法與 .gitignore 類似。透過這個檔案的設定可以避免 docker build 的時候不會把一些過大或是完全不需要的檔案都送給 docker daemon,不當浪費時間也浪費空間。
Less is more
避免安裝任何無關或是非必要的套件到你的 image 中,特別是那些 "nice to have" 的理由。
註: 我個人是滿討厭把 Image 弄得很乾淨的,除錯什麼工具都沒有,連 ash/sh/busybox/bash 都沒有的 image 更是我討厭中的排行榜冠軍
Secrets should be secret
任何機密資訊都應該要於運行期間動態載入,而不是建置期間塞入。請使用其他工具譬如 Vault 來管理這些機密資訊,並且執行期間讓 Container 能夠存取到正確的值。
PID 1 is your birth right
Linux 環境下會使用 SIGTERN, SIGKILL 等相關的 Singal 來戳你的應用程式,請確保你運行的應用程式要能夠攔截這些訊號來處理並完成有效的 Graceful shutdown.
Share and Care
如果環境中有多個 Image 彼此有共享相同的工具與功能,與其每個 Image 都單獨建置維護不如建置一個 Base Image,接者讓所有要使用的 image 去載入使用即可。
透過這種方式可以讓整體的維護性與管理性更為簡單,每個 image 可以減少重複的程式碼,同時要升級時只要針對 base Image 處理即可。
https://medium.com/pradpoddar/avoid-costly-mistakes-using-advanced-docker-development-best-practices-acd812784109
同時也有10000部Youtube影片,追蹤數超過2,910的網紅コバにゃんチャンネル,也在其Youtube影片中提到,...
「gitignore」的推薦目錄:
- 關於gitignore 在 矽谷牛的耕田筆記 Facebook 的最佳貼文
- 關於gitignore 在 Kewang 的資訊進化論 Facebook 的最佳貼文
- 關於gitignore 在 卡斯伯 Facebook 的精選貼文
- 關於gitignore 在 コバにゃんチャンネル Youtube 的最讚貼文
- 關於gitignore 在 大象中醫 Youtube 的最讚貼文
- 關於gitignore 在 大象中醫 Youtube 的最佳貼文
- 關於gitignore 在 A collection of useful .gitignore templates - GitHub 的評價
- 關於gitignore 在 Git - 忽略特定檔案.gitignore | roi's blog 的評價
- 關於gitignore 在 使用.gitignore 檔案忽略檔案和目錄 - 他山教程 的評價
- 關於gitignore 在 作者gitignore 的總覽(PTT發文,留言,暱稱) - PTT網頁版 的評價
- 關於gitignore 在 Gitignore - YouTube 的評價
- 關於gitignore 在 .gitignore is ignored by Git - Stack Overflow 的評價
gitignore 在 Kewang 的資訊進化論 Facebook 的最佳貼文
小編分享過多次的 Git,常常在 QA 時被問到下面這種需求:
有一個已經寫好的模組 M,然後想要給 A, B, C 這三個專案使用,A 要用 1.0.0 版的 M,B 跟 C 則是用 1.1.0 版的 M。而且 M 是公司機密,不可對外公布。
當 M 開發了新功能的時候,不希望 A, B, C 這些專案使用的 M 也一併更新,而是等到想更新的時候才要更新 M。
---
使用過 Git 一陣子的朋友,通常會在 Git 裡面找看看有哪個功能可以符合需求,結果就找到了 git submodule。
submodule 其實是類似捷徑的概念,以上面需求為例,當 A 需要用到 M 的時候,可以使用 git submodule add
當 M 更新時,A 要用 git submodule update (而不是一般常用的 git pull),才會更新專案 A 的模組 M,可以避免 M 或 A 更新之後,無意間也更新了 M 的版本。
---
但 submodule 也有一些麻煩的地方,像是如果不小心在 submodule 上做了一些變更,commit 跟 push 的時候絕對會搞混,到底現在是在 A 還是在 M commit。
然後在 A 跟 M 看線圖的時候也長的不一樣,這其實是很困擾的一件事情。所以小編怕麻煩,通常都不會用 submodule。
---
其實只要了解你所使用的語言及框架,這類需求其實很容易就可以解決。以 Nodejs 為例,開發時大家常到 npm.org 下載模組來安裝。其實 npm.org 也可以自建 (以下簡稱 mynpm.org),所以只要把模組 M 上傳到 mynpm.org,以後都從 mynpm.org 下載模組 M 就可以了。可以解決下列這些問題:
1. 避免公司重要技術外洩
2. A, B, C 專案甚至之後的其他專案也可以利用 SemVer 來持續更新模組 M
3. Git 線圖容易追蹤
---
像這類的作法可能會有幾個小問題,像是 JavaScript, Ruby, Python 這類直譯式語言,在遠端佈署的時候,如果 mynpm.org 沒有對外該怎麼辦?這時候其實可以在 .gitignore 裡面設定,當開發時可以將模組 M 的目錄強制納入 Git 管理。
如果是像 Java, C# 這類編譯式語言的話就比較不會有這個問題了,因為在本機就已經編譯成執行檔,直接上傳到遠端佈署就可以囉!
---
https://hahow.in/cr/kewang-git
看完這篇文章可以知道就算是同一種需求,Git 也會有不同解決方式喔!還不快來報名小編的 Git 線上課程,讓你在任何共同協作場合都可以用 Git 來解決問題喔!
#git #gitsubmodule #gitignore #semver
gitignore 在 卡斯伯 Facebook 的精選貼文
如果是自己手動建立的開發環境
常常會遇到 gitignore 會需要加入哪些的問題
如果沒有預先整理好
有時夥伴們會不小心誤加入不該加入的檔案
這份範例提供了各種專案可能會使用到的 gitignore
前端就先載入 node.js 撐著先 😏
gitignore 在 コバにゃんチャンネル Youtube 的最讚貼文
gitignore 在 大象中醫 Youtube 的最讚貼文
gitignore 在 大象中醫 Youtube 的最佳貼文
gitignore 在 Git - 忽略特定檔案.gitignore | roi's blog 的推薦與評價
第一個遇到的問題就是當我修改完成code 準備要commit 時,發現Git 追蹤(track)了一些不應該push 到remote repository的東西。 像是IntelliJ IDE的一些檔案 ... ... <看更多>
gitignore 在 使用.gitignore 檔案忽略檔案和目錄 - 他山教程 的推薦與評價
.gitignore 檔案旨在作為儲存庫的一部分提交。如果要在不提交忽略規則的情況下忽略某些檔案,可以使用以下選項:. 編輯 .git/info/exclude ... ... <看更多>
gitignore 在 A collection of useful .gitignore templates - GitHub 的推薦與評價
gitignore file templates. We use this list to populate the .gitignore template choosers available in the GitHub.com interface when creating new repositories and ... ... <看更多>