linux - 构建具有 RPM 升级 future 前景的 Docker 镜像

标签 linux docker docker-compose dockerfile rpm

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

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

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

最佳答案

您基本上永远不会在正在运行的 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),然后删除旧容器,以实现零停机更新。

关于linux - 构建具有 RPM 升级 future 前景的 Docker 镜像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57552200/

相关文章:

angular - 可以从docker容器exec命令中访问URL,但是Angular应用获取ERR_CONNECTION_TIMED_OUT

docker - 在以不同docker-compose文件描述并在不同docker-machines中运行的容器之间创建NFS共享

docker - docker 中的Fiware Orion挂起

linux - 在kali linux上安装octave?

linux - Docker 容器访问父服务器中的本地主机

linux - 使用 AWK 获取一组 COLUMNS 中的 UNIQUE VALUE 出现次数

docker - 尝试通过docker-compose为mariadb运行迁移时出错

docker - Spring Boot Redis 在使用 Redis 时获取连接被拒绝的异常

linux - grep命令的输出并显示与字符串匹配的所有行

linux - 获取 find 命令以在 GMT 中显示日期