【问题标题】:What is the advantage of in each deploy, building a new docker image containing the application instead of just updating the application?在每次部署中,构建一个包含应用程序的新 docker 映像而不只是更新应用程序有什么优势?
【发布时间】:2018-10-26 19:06:29
【问题描述】:

我正在将 Nodejs 中的应用程序迁移到 GCP 中的 kubernetes。在 CI 教程中,我看到更新的应用程序被复制到新的 docker 映像并发送到 GCR。

与仅更新代码相比,上传图像的过程很慢。那么发送包含应用程序的新图像究竟有什么好处呢?

【问题讨论】:

    标签: docker kubernetes continuous-integration google-container-registry


    【解决方案1】:

    你错过了整个 docker 哲学和不可变基础设施的概念,并且最初采用了来自地狱的矩阵、docker 和其他基于容器的技术来解决来自地狱的矩阵。

    解决方案

    已经编写了整本书来回答您的问题,为什么不复制代码以及为什么使用图像,但简短的回答是,使用 docker 图像并通过一些优化来解决缓慢问题,例如最小化 docker 图像、最小层数、缓存等

    Minimal docker images

    【讨论】:

      【解决方案2】:

      Docker 的理念很简单——层是可重用的 [1]。只要层没有改变,它们就可以跨图像重复使用。只要您将应用程序的层保持在最后几层,就可以重用基础层,从而将层数保持在最低限度。您应该考虑使用多阶段构建来最大程度地减少容器的构建阶段依赖关系。 Hasura.io 有一篇关于有效地为 NodeJS 应用程序使用多阶段构建的优秀文章[2]。

      1. https://www.infoworld.com/article/3077875/linux/containers-101-docker-fundamentals.html
      2. https://blog.hasura.io/an-exhaustive-guide-to-writing-dockerfiles-for-node-js-web-apps-bbee6bd2f3c4

      【讨论】:

        【解决方案3】:

        应每次推送图像,以确保每个版本都根据其包含的代码版本进行标记。
        您可以通过在构建过程中尽可能晚地更新代码的方式对图像进行分层,从而克服每次推送整个图像的缓慢问题。
        这样一来,大层就已经存在,您不必每次都推送它们。
        查看 this 指南以创建高效的 docker 镜像。

        【讨论】:

          猜你喜欢
          • 2020-11-24
          • 1970-01-01
          • 2021-05-08
          • 2012-10-15
          • 1970-01-01
          • 1970-01-01
          • 2019-09-13
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多