保持 image 小
選擇合適的 base image。
若是多個 image 有共同之處,考慮建立一個 base image 來共享組件,並在其上構建 image。
保持生產 image 小並支持 debug,考慮使用生產 image 做爲 base image 來 debug image。
構建 image 時,老是使用 版本信息,目標環境(prod,test) 來打標籤,而不要依賴自動建立的 latest 標籤。
在哪裏和如何持久化應用數據
不要把數據存儲在容器的可寫層,相比使用 volume 和綁定mounts,增長了 container 大小且I/O低效。
做爲代替,使用 volumes 存儲數據。
使用 bind mounts 更適合在開發期間。
生產中使用 secrets 來存儲敏感數據,對非敏感數據使用 configs。
在可能的狀況下使用 swarm 服務
可能的狀況下,使用 swarm 服務設計你的應用並具備規模化的能力。
即便只須要運行一個獨立的應用實例,swarm services 提供了一些高級特性,servies 配置是說明性的,docker老是讓實際狀態與預期的保持同步。
網絡和volumns 能夠在 swarm services 中鏈接和斷開,docker 使用非破壞的方式從新部署獨立的服務。獨立的容器須要根據配置改變手動中止刪除建立。
若干特性,如存儲 secrets 和 configs 的能力,讓 image 儘量通用,image 和 container 不存儲敏感信息。
讓 docker stack deploy 代替 docker pull,當新節點添加到 swarm,imags會自動被pull。
對測試和部署使用 CI/CD
當版本控制檢測到變動或pull request,使用 Docker Cloud 或其餘 CI/CD 管道自動 build 和 tag image 並測試。Docker Cloud 能夠部署app直接到生產環境。
開發環境和生產環境的不一樣之處