好不容易開發好的程式,在不同環境竟然一個可以正常跑,一個卻出了問題?要回頭找答案時,又花費了一堆時間找到底是哪一個軟體版本不一致,或是其他地方出了差錯。
這時候如果在開發的時候,將應用程式打包在一個可以任意移動的盒子,在盒子裡具備了所有讓應用程式可以正常運作的素材,這樣好用的方式就叫做容器化,最代表的工具就叫做 Docker。
首先,在電腦上要先安裝 Docker,這個容器化的流程才能被執行,但只要有安裝的電腦,這個被打包起來的盒子就能確保最後跑起來的結果是一樣的。
開發工程師在程式碼的同一個資料夾中,撰寫一個叫 Dockerfile 的腳本,這個腳本就像是食譜一樣,告訴 Docker 說,我的這些材料是用什麼作業系統、要怎麼打包。
接下來一起提交到 Github 中,CI/CD 工具(也就是前面提到的如 Jenkins 或 GitHub Actions),就會執行 docker build 的指令,告訴 Docker 要依照食譜開始做菜。
最後做完後,就會輸出一個 docker Image 檔,等到今天要部署到開發/測試/正式環境的時候,只要執行 docker run 的指令,將 docker Image 完成部署,工程師要做的事情,只需要在開發的時候,將 Dockerfile 放進程式碼的同一資料夾中,後續的流程就會由 CI/CD Pipeline 自動化完成。
容器化與 docker 對於 devops 的好處就是讓消除程式在上版時的各種風險,並降低人工手動的流程,將自動化的好處完整的展現出來。