如何更改/升级Docker映像的一部分?图片中的模块,而不是整个图片

问题描述

首先,从理论上讲是正确的并且可能吗? 假设:我有一个Superset的Docker映像,它由一些模块组成:Python,Postgres,Superset本身等。该容器运行良好,但是我需要将Superset本身从v.1.15升级到v.1.21,同时Python和其他部分都是令人满意的最新版本。 如何仅更改/升级图像的Superset部分? (因为已发布的图像文件尚未更新)

解决方法

实际上,您可以从此图像中“派生”:

FROM amancevice/superset

RUN ...

来自docs.docker.com: run FROM指令初始化一个新的构建阶段,并为后续指令设置基本映像。


运行时

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。 您可以在容器中玩耍,但所做的更改仅应用于此容器,不会影响此图像中的新容器。