本篇文章是個經驗分享文,作者分享使用 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
「linux sh」的推薦目錄:
- 關於linux sh 在 矽谷牛的耕田筆記 Facebook 的最佳解答
- 關於linux sh 在 OSSLab Geek Lab Facebook 的最佳貼文
- 關於linux sh 在 軟體開發學習資訊分享 Facebook 的最佳解答
- 關於linux sh 在 [Shell Script] 執行sh檔案提示Permission denied - 1010Code 的評價
- 關於linux sh 在 nvm-sh/nvm: Node Version Manager - POSIX-compliant bash ... 的評價
- 關於linux sh 在 01楊乾中Linux bash script 第一堂'操作示範 - YouTube 的評價
- 關於linux sh 在 How to check if a file exists in a shell script - Stack Overflow 的評價
- 關於linux sh 在 bash - what does "sh -" mean? - Unix & Linux Stack Exchange 的評價
linux sh 在 OSSLab Geek Lab Facebook 的最佳貼文
OSSLab Geek Lab之前限量賣的HP EC200A Server 有一個小問題,
那就是風扇轉速真的有點真的有點大聲.
ilo(IP KVM)指令又無法修改,硬拔風扇則開不了機.
參考 https://0rz.tw/q4zrW 感謝u/phoenixdev大神的韌體.
目前準備嘗試這樣處理.(理論上通用於全部ilo4 機種 Server)
1.機器先正常裝v2.50 iLO4 此為linux安裝版
https://support.hpe.com/hpsc/swd/public/detail?swItemId=MTX_42ef22e4dff6423e8dbe111904
2.https://github.com/airbus-seclab/ilo4_toolbox
下載法國空中巴士安全團隊ilo4攻擊腳本.
3.修改版v2.6 ilo 4 https://www.dropbox.com/s/87ecmkimbqigyiv/ilo4_260_healthcommands.bin?dl=0
4. exploit_write_flash.py 服務器IP 250 patched fw.bin
5. ssh 到ilo4 ,執行cd map1, reset
也要進Web界面,Information-> Diagnostics並單擊Reset。
刷進去後 多了fan指令
fan p
(fan 0-5, rate 0 -255).
另外一種未經證實處理方式
一.用上面1抓下的檔案 下
sh CP027911.scexe --unpack=
二.把patched rom替換掉ilo4_250.bin
三.下./flash_ilo4 --direct
個人覺得這個方法應該有點困難 因為自從發生疑似Supermicro BMC(Baseboard Management Controller) 有木馬程式後,
大廠對於這類BMC韌體都要求安全簽章.
空中巴士那個攻擊腳本則是不理會簽章,直接刷入.
#OSSLab #我們嘗試用我們的方法解決問題
linux sh 在 軟體開發學習資訊分享 Facebook 的最佳解答
--課程已於 2020 年 10 月更新--
這門課程的講師 Jason Cannon ( http://bit.ly/2Pa7XnH )出過一本書 Linux for Beginners and Command Line Kung Fu 在 Amazon 上評價頗高
你在這門課學到的東西可以應用到任何 shell,但本課程著重 bash shell ,你將學到一些非常先進的 bash 功能。 同樣,無論你使用 bash、bourne(sh)、KornShell(ksh)、C shell(csh)、Z shell(zsh),或甚至 tcsh shell,你都可以將在此學到的東西好好應用。
到本課程結束時,你將能夠輕鬆建立 shell 腳本。 你將學習如何將單調乏味和重複任務變成可節省時間的程式設計,簡化你在 Linux、Unix 或 MAC 系統上的工作。
https://softnshare.com/shell-scripting-linux/
linux sh 在 nvm-sh/nvm: Node Version Manager - POSIX-compliant bash ... 的推薦與評價
Intro · About · Installing and Updating. Install & Update Script. Additional Notes; Troubleshooting on Linux · Usage. Long-term Support; Migrating Global Packages ... ... <看更多>
linux sh 在 01楊乾中Linux bash script 第一堂'操作示範 - YouTube 的推薦與評價
Unix/ Linux 上常見的 Shell 腳本解釋器有bash、 sh 、csh、ksh等,習慣上把它們稱作一種 Shell 。 ▷ shell 分為兩類:圖形介面 shell 和命令行式的 shell 。 ... <看更多>
linux sh 在 [Shell Script] 執行sh檔案提示Permission denied - 1010Code 的推薦與評價
前言Shell Script 主要是使用在Linux 和MacOS 等Unix-like 作業系統的自動化操作指令的程式語言。一般我們會使用.sh 副檔名來命名Shell Script 檔案。 ... <看更多>