【问题标题】:Can Docker Autonomously Restart Containers and Commit Changes with New Image Tag?Docker 可以自动重启容器并使用新的镜像标签提交更改吗?
【发布时间】:2016-07-17 20:53:03
【问题描述】:

我使用 Docker 进行部署,就目前而言,我使用 Docker-Compose(.yml 文件)同时启动约 6 个容器。 Compose 文件中的每个图像都是在本地找到的(部署环境中没有 Internet 连接)。

就目前而言,我的部署采取的步骤如下:

  1. 运行 docker-compose up(使用带有“最新”标签的图像从本地图像启动 6 个容器,例如 image1:latest、image2:latest 等)
  2. 退出/停止时,我有 6 个停止的容器。手动重启六个停止的容器中的每一个(docker start xxx)
  3. 手动提交每个重新启动的容器(docker commit xxx)
  4. 以增量方式手动重新标记每个上一代图像(image1:latest -> image1:version1、image1:version2 等)并手动删除包含“最新”标记的图像
  5. 使用“最新”标签 (image1:latest) 手动标记每个已提交的容器(现在是镜像)

这个过程是用户参与的,我们的部署需要用户参与,只需要运行“docker-compose up”命令然后关闭/停止 Docker-Compose。

所需的最终目标是让脚本或 Docker 自行处理这些步骤并最终生成不同代的映像(image1:version1、image1:version2、image1:latest 等)。

所以,我的问题是,我将如何创建一个脚本(或让 Docker 来做)脚本(或 Docker)可以自主地:

  • 在停止/退出 Docker-Compose 时重新启动已停止的容器
  • 提交重启的容器
  • 用最新标签将以前的图像重新标记为递增的版本#(image1:version1、image1:version2 等),然后删除以前的 image1:latest 图像
  • 用“最新”标签标记新提交的重启容器(现在是镜像)

这是一个相当冗长和密集的问题,但如果我能在完成我的任务所需的任何步骤方面提供任何帮助,我将不胜感激。谢谢你。

【问题讨论】:

  • 你的第4步和第5步有点混乱。正如我所读到的,您标记最新 -> 增量版本,删除最新标签,然后将增量版本重新标记为最新。为什么会这样?
  • 在初始/首次运行时,您拥有所有 6 个图像(docker-compose 启动 6 个容器所需的),并且 compose 会使用“最新”标签抓取图像。然后我们需要保存新生成的图片,并给它们打上“最新”的标签。上一代(初始人口)也不能有“最新”标签,因此我必须用版本号重新标记它。我们的目标是在运行过程中保存新一代图像,并让最新一代包含“最新”图像,以便在我们下次运行时获取它们。

标签: image docker containers yaml docker-compose


【解决方案1】:

了望塔项目试图解决这个问题。

https://github.com/CenturyLinkLabs/watchtower

当基础镜像更新时,它会自动重启正在运行的容器。

它也是智能的,例如,当需要重新启动链接到其他容器的容器时,它会在不破坏链接的情况下这样做。

我从未尝试过,但值得一试!

让我们知道进展如何。我会喜欢这个问题,因为这听起来是个好主意。

PS 如果瞭望塔证明很痛苦,而您尝试手动执行此操作,那么...

docker inspect

是您的朋友,因为它为您提供了大量有关容器和图像的信息。允许您确定当前状态。

【讨论】:

    猜你喜欢
    • 2014-11-18
    • 1970-01-01
    • 2018-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多