【问题标题】:how to change/upgrade part of a Docker-image? a module inside the image, not the entire image如何更改/升级 Docker 映像的一部分?图像内的模块,而不是整个图像
【发布时间】:2020-12-05 13:29:53
【问题描述】:
首先,它在理论上是否正确且可能?
假设:我有一个 Superset 的 Docker 映像,由几个模块组成:Python、Postgres、Superset 本身等。容器运行良好,但我需要将 Superset 本身从 v.1.15 升级到 v.1.21 而Python 和其他部分令人满意地是最新的。
如何仅更改/升级图像的 Superset 部分?
(因为发布的图片文件还没有更新)
【问题讨论】:
标签:
docker
docker-compose
containers
docker-image
superset
【解决方案1】:
其实,你可以从这张图片“派生”出来:
FROM amancevice/superset
RUN ...
来自docs.docker.com: run
FROM 指令初始化一个新的构建阶段,并为后续指令设置 Base Image。
当运行时
docker build -t your_new_image .
您将获得一个新图像,其中amancevice/superset 作为基础图像。 RUN 命令让您可以运行任何需要升级的 shell 命令(请参阅docker.docs: run)
如果你只是想在一个正在运行的容器中升级,你可以exec 进入它
docker exec -it <your container> bash
(或sh,无论容器使用什么外壳)。
见docs.docker.com: exec。
您可以在自己的容器中进行操作,但您的更改仅应用于此容器,不会影响此映像中的新容器。