修改 docker 图片

Modifying a docker image

我最近开始研究 docker。我已经下载了一个 docker 图像,我想以某种方式更改它,以便我可以将包含其内容的文件夹从我的本地复制到该图像中,或者可以编辑图像中的任何文件。

我想如果我能以某种方式提取图像,进行更改,然后创建一个图像。不确定它是否会那样工作。我尝试寻找选项,但找不到有希望的解决方案。

镜像的当前 Dockerfile 有点像这样:

FROM abc/def
MAINTAINER Humpty Dumpty <@hd>


RUN sudo apt-get install -y vim

ADD . /home/humpty-dumpty
WORKDIR /home/humpty-dumpty
RUN cd lib && make

CMD ["bash"]

注意:-我正在寻找一种简单而干净的方法来仅更改现有图像,而不用更改创建新图像。

您不会更改现有图像,图像标有校验和并被视为只读。使用图像的容器指向文件系统上的相同文件,在容器的 RW 层上添加,因此依赖于未更改的图像。层缓存也增加了这种依赖性。

由于分层文件系统和缓存,仅添加一个文件夹创建新图像只会添加一个图层,而不是新图像的完整副本。因此,easy/clean/correct方式是使用Dockerfile创建新镜像。

首先,我不建议乱用其他图片。如果能自己创建就更好了。展望未来,您可以使用 copy 命令将文件夹从主机添加到 docker 图像。

 COPY <src> <dest>

唯一的警告是<src>路径必须在构建的上下文中;您不能复制 ../something /something,因为 docker 构建的第一步是将上下文目录(和子目录)发送到 docker 守护进程。

FROM abc/def
MAINTAINER Humpty Dumpty <@hd>


RUN sudo apt-get install -y vim

// Make sure you already have /home/humpty-dumpty directory
// if not create one
RUN mkdir -p /home/humpty-dumpty


COPY test /home/humpty-dumpty/ // This will add test directory to home/humpty-dumpty
WORKDIR /home/humpty-dumpty
RUN cd lib && make

CMD ["bash"]

我认为您可以使用 docker cp 命令对从 docker 映像构建的 container 进行更改,然后提交更改。

这里有参考,

docker cp 指南: https://docs.docker.com/engine/reference/commandline/cp/

docker 提交指南:https://docs.docker.com/engine/reference/commandline/container_commit/

请记住,docker image 只是准备就绪,因此您无法对其进行任何更改。唯一的方法是修改您的 docker 文件并重新创建图像,但在这种情况下您会丢失数据(如果未安装在 docker volume 上)。但是你可以对 container 进行更改,它还没有准备好。

由于无法更改现有的 docker 图片,我所做的是根据原始 docker 图片为新的 docker 图片创建了一个 docker 文件获取其内容并将其修改为在新图像中包含来自本地的测试文件夹。 这个 link 很有帮助 Build your own image - Docker Documentation

FROM abc/def:latest

docker 文件中的上述行告诉 Docker 您的图像基于哪个图像。所以,父图像的内容被复制到新图像

最后,为了在本地驱动器上包含测试文件夹,我在我的 docker 文件中添加了以下命令

COPY test /home/humpty-dumpty/test

并在该新图像中添加了测试文件夹。

下面是用于从现有图像创建新图像的 docker 文件。

FROM abc/def:latest

# Extras
RUN sudo apt-get install -y vim

# copies local folder into the image 
COPY test /home/humpty-dumpty/test

更新:- 要编辑 运行 docker 图像中的文件,我们可以使用通过安装的 vim 编辑器打开该文件以上 docker 文件

vim <filename>

现在,vim命令可以用来编辑和保存文件。