【问题标题】:Build Docker image with a future view of RPM upgrade [closed]使用 RPM 升级的未来视图构建 Docker 映像 [关闭]
【发布时间】:2019-08-19 07:28:57
【问题描述】:

我的目标是为我的应用程序构建一个 docker 镜像,应用程序的核心部分在镜像构建期间通过 RPM 安装。

假设我已经使用“application-version-1.rpm”文件构建了我的 docker 映像,并且容器正在使用该映像运行。一两个月后,开发人员发布了一个带有补丁“application-version-2.rpm”的新 rpm,我需要在运行的容器中安装/升级这个 rpm 文件。由于此容器正在生产中运行,我如何使用现有数据和新发布的 rpm 文件更新我的图像。对此有任何想法。

注意:我需要停止应用程序服务来安装/升级新的 rpm 文件。我的 docker 镜像中的入口点是应用程序服务。所以如果我停止应用服务,它就会停止容器。

【问题讨论】:

  • 为什么需要在运行的容器内部进行更新?而是解决这个问题。
  • 有关专业服务器或网络相关基础设施管理的问题对于 Stack Overflow 来说是无关紧要的,除非它们直接涉及编程或编程工具。您可能能够获得有关服务器故障的帮助。
  • 此外,当您使用 OpenShift 时,您可以在眨眼间部署新容器并将流量转移到新容器,因此不会出现停机。
  • 这不是 docker 应该被使用的方式。了解如何将服务器视为cattle versus pets

标签: linux docker docker-compose dockerfile rpm


【解决方案1】:

您基本上永远不会在正在运行的 Docker 容器中进行软件更新。相反,您构建一个安装了新软件的新 Docker 镜像,停止现有容器,然后使用新镜像启动一个新容器。

docker run --name myapp ... myapp:1
# Time passes
docker build --no-cache -t myapp:2 .
docker stop myapp
docker rm myapp
docker run --name myapp ... myapp:2

像这样删除容器是非常常规的,所以如果有任何您关心的数据,您需要使用docker run -v 选项确保它存储在容器外部。

如果您使用 Docker Compose 作为编排器,您可以docker-compose stop 现有容器,然后再次docker-compose up --build;或者您可以使用docker build 手动重建映像并更改docker-compose.yml 文件中的image: 行。如果您使用 Kubernetes 部署,更改其 pod 规范中的 image: 实际上会导致它首先启动一个新容器 (pod),然后删除旧容器,以实现零停机更新。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-20
    • 1970-01-01
    • 1970-01-01
    • 2019-07-05
    • 2011-11-15
    • 1970-01-01
    • 1970-01-01
    • 2021-06-09
    相关资源
    最近更新 更多