2015 年 4 月我在 Docker Taipei 社群講了一場〈追求極簡化 Docker image 之路〉。一年後,在「極簡化 Docker」這條路上,另一條途徑 Alpine Linux 開始嶄露頭角——不必像過去那麼蠻幹,地雷減少,流程優勢顯著,品質上也不見得遜於長期被 glibc 把持的傳統體系。
我嘗試用這種手法重整過去的東西,結果還不算太差。因此,一直希望能有機會再給一場類似【追求極簡化 Docker image 之路,Part 2】的演講。
此外,由於自己持續在使用 Ansible 來處理組態設定事宜,持續維護近 20 個 Ansible Galaxy 開源 roles,也開講了五場【Ansible Workshop】訓練課程,很自然的,我會常常拿 Ansible 與 Docker 並列,思考兩者的定位、運用時機,甚至未來走向;有時甚至靈光一閃,浮現一些 Ansible+Docker 的組合技。
這就是今天在 Community Open Camp 這場演講【從 Ansible 到 Docker:混血模式】的由來。
特色
用這種手法,可以在很大程度上,維持你既有的 Ansible playbook 資產,再加上一些針對 Docker 獨有特性而微調的部分,就可以用最小的力氣,產出三種層次的 image,從肥到瘦依序是:
- 統包的 Docker image(含:OS runtime、Ansible、應用軟體本體)。
- 稍稍瘦身過的 Docker image(含:OS runtime、應用軟體本體,不含 Ansible)。
- 極度瘦身的 Docker image(只含 Alpine Linux runtime 及應用軟體本體)。
以常見的兩個 client 軟體(wrk、boom)、兩個 server 軟體(nginx、json-server)為例,照著流程做到最後一步,得到的結果是:
這種混血手法,提供給有需要在 Docker 及 non-Docker 兩者來回穿梭的工程師參考。
提醒
最後,不管你要不要採用 Docker,不管你的 Docker 是局部導入還是全面導入,請記得兩件事:
- “Infrastructure as Code” mindset,永遠要銘記在心。
- Plan B 永遠是必須考慮的。
這樣,你就可以用比較健康的心態,去面對、評估、嘗試新的技術。
演講投影片:
▷ 演講錄影,擺在 Channel 9 上。
▷ 演講範例程式碼,擺在 GitHub 上,請搭配服用。
▷ 後續文章:〈為什麼要追求極簡化的 Docker image?〉