【发布时间】:2018-10-26 19:06:29
【问题描述】:
我正在将 Nodejs 中的应用程序迁移到 GCP 中的 kubernetes。在 CI 教程中,我看到更新的应用程序被复制到新的 docker 映像并发送到 GCR。
与仅更新代码相比,上传图像的过程很慢。那么发送包含应用程序的新图像究竟有什么好处呢?
【问题讨论】:
标签: docker kubernetes continuous-integration google-container-registry
我正在将 Nodejs 中的应用程序迁移到 GCP 中的 kubernetes。在 CI 教程中,我看到更新的应用程序被复制到新的 docker 映像并发送到 GCR。
与仅更新代码相比,上传图像的过程很慢。那么发送包含应用程序的新图像究竟有什么好处呢?
【问题讨论】:
标签: docker kubernetes continuous-integration google-container-registry
Docker 的理念很简单——层是可重用的 [1]。只要层没有改变,它们就可以跨图像重复使用。只要您将应用程序的层保持在最后几层,就可以重用基础层,从而将层数保持在最低限度。您应该考虑使用多阶段构建来最大程度地减少容器的构建阶段依赖关系。 Hasura.io 有一篇关于有效地为 NodeJS 应用程序使用多阶段构建的优秀文章[2]。
【讨论】:
应每次推送图像,以确保每个版本都根据其包含的代码版本进行标记。
您可以通过在构建过程中尽可能晚地更新代码的方式对图像进行分层,从而克服每次推送整个图像的缓慢问题。
这样一来,大层就已经存在,您不必每次都推送它们。
查看 this 指南以创建高效的 docker 镜像。
【讨论】: