【问题标题】:Copy / update the code in docker container without stopping container在不停止容器的情况下复制/更新 docker 容器中的代码
【发布时间】:2018-09-25 05:58:00
【问题描述】:

我有一个 docker-composer 设置,我在其中上传服务器的源代码,比如 flask api。现在,当我更改我的 python 代码时,我必须遵循这样的步骤

  1. 停止正在运行的容器(docker-compose stop)
  2. 在容器中构建和加载更新的代码 (docker-compose up --build)

这需要一点时间。有没有更好的办法?就像在运行的 docker 中更新代码,然后在不停止整个容器的情况下重新启动 Apache 服务器?

【问题讨论】:

    标签: apache docker docker-compose


    【解决方案1】:

    你可以通过一些肮脏的方式来修改正在运行的容器的文件系统。 首先,您需要找到用作容器运行时根目录的目录路径。运行docker container inspect id/name。在 JSON 输出中查找键 UpperDir。您可以编辑/复制/删除该目录中的文件。

    另一种方法是获取容器内运行的进程的进程 ID。转到/proc/process_id/root 目录。这是在 docker 中运行的进程的根目录。您可以即时编辑它,更改将显示在容器中。

    【讨论】:

      【解决方案2】:

      您可以在旧容器仍在运行时运行docker build,并且您的停机时间仅限于转换期间。

      将负载平衡器放在容器前面可能会有所帮助,原因有很多。根据您的应用程序,这可能是像 HAProxy 这样的“哑”负载平衡器,或者像 nginx 这样的完整 Web 服务器,或者是您的云提供商提供的东西。这允许您一次运行应用程序的多个副本,可能在不同的主机上(有助于扩展和可靠性)。在这种情况下,序列变为:

      1. docker build新头像
      2. docker run
      3. 将其附加到负载平衡器(现在流量会同时流向新旧容器)
      4. 测试新容器是否正常工作
      5. 从负载平衡器中分离旧容器
      6. docker stop && docker rm旧货柜

      如果您不介意较重的基础架构,那么这个顺序基本上与您在 Kubernetes 部署对象中更改映像标签时发生的情况完全相同,但采用 Kubernetes 是一项重大承诺。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-04-25
        • 2013-09-22
        • 2015-03-04
        • 2014-10-05
        • 2018-04-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多