【问题标题】:Create new docker image vs run shell commands创建新的 docker 镜像与运行 shell 命令
【发布时间】:2019-06-19 13:49:43
【问题描述】:

我们正在使用fabric-ca docker 镜像。它没有安装 scp,所以我们有两个选择:

选项 1:按照here 所述创建新图像

选项 2:在容器启动时从 shell 安装 scp

我们想了解每种方法的优缺点。

【问题讨论】:

  • 结束投票?请不要。这是一个有效的问题,每个选项都有客观的利弊,很多人在开始使用 Docker 时都会遇到这个问题。阅读答案可以节省一些人以错误的方式做事的时间。
  • 读起来好像对我很固执@AlexPakka。这个讨论的双方都有纯粹主义者和实用主义者,没有正确的方法可以做到这一点。这或多或少是 OP 愿意接受的,我们无法控制。

标签: docker


【解决方案1】:

您应该认为您的选项 2 不是首发。构建自定义映像或使用主机目录绑定挂载(docker run -v /host/path:/container/path 选项)注入您需要的数据;我可能更喜欢 bind-mount 选项。

docker rm 一个容器是非常常规的,当你这样做时,你在容器中本地所做的任何更改都会丢失。例如,如果有新的软件版本或重要的安全更新,您必须使用新映像重新创建容器。您几乎不应该在容器中的交互式 shell 中安装软件,特别是如果您要使用它来复制应用程序所需的数据:每次删除和重新创建容器时都必须重复此步骤。

【讨论】:

    【解决方案2】:

    选项 1:允许您进一步构建,创建稳定状态,您可以在发布之前验证/测试图像

    选项 2:启动时间更长,需要在容器启动期间在线,更难跟踪/理解和管理锁定的软件堆栈,例如启动 docker 与 Dockerfile 的 bash 脚本以及您最终将用于容器编排的任何技术。

    最终,我仅将选项 2 用于发现、概念验证或尝试某些东西。一旦我知道我需要持续使用某个容器,我就会通过 Dockerfile 构建一个合适的镜像。

    【讨论】:

      【解决方案3】:

      选项1:

      • 图片的BUILD较长,但你只执行第一次
      • RUN 更快
      • RUN 不需要互联网连接
      • 包括对不同步骤的验证
      • 允许可追溯性

      选项2:

      • RUN 更长
      • 您需要通过RUN 连接互联网
      • 难以追踪

      【讨论】:

        猜你喜欢
        • 2020-11-18
        • 2020-11-24
        • 2017-12-05
        • 1970-01-01
        • 2020-10-04
        • 2015-04-15
        • 2020-10-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多