启动现有的 Docker 容器还是总是 运行 一个新容器(并手动删除旧容器)更好?

Is it better to start an existing Docker container or always run a new one (and manually remove the old ones)?

CI/CD 和自动化工作流最友好的解决方案是什么?始终强制使用新的 运行 意味着我们始终使用最新的图像,但它会在必须删除旧的、不活动的容器方面产生额外的工作(特别是如果它们被命名为相同的)。

总是运行创建一个新容器而不给它命名,然后定期用docker container prune清理所有东西是可行的方法吗?我正在寻找最佳实践。

对于 CI 工作流程,尤其是:

  • 每次构建都会创建一个带有唯一标签的新图像。
  • 集成测试总是使用该新图像创建新容器。 (没有可以与正确的图像一起重复使用的现有容器;您可以在特定构建的上下文中生成一个唯一的名称。)
  • 部署时,使用新映像创建新容器。 (或更新 Compose 设置或 Kubernetes 对象以具有新标签,这将导致创建新容器。)

删除和重新创建容器是非常常规的事情。 docker build; docker run 序列还意味着您的容器的启动始终从已知位置开始,并且您通常不会有需要清理的旧临时文件或陈旧的 pid 文件。您也无法更改现有容器下的图像,因此在 CI 系统的上下文中,您 必须 使用新建图像创建一个新容器。

IME 始终使用 docker run 并没有太大的缺点。 docker exec 是一个调试工具,虽然它非常有用,但在这里没有它的位置。你根本不需要 docker start