保持 image 小
選擇合適的 base image。
使用 multi-stage 構建。
https://docs.docker.com/develop/develop-images/multistage-build/
如果多個 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直接到生產環境。
開發環境和生產環境的不同之處
