修改Docker映像

qwe*_*rty 6 docker dockerfile 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"]
Run Code Online (Sandbox Code Playgroud)

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

qwe*_*rty 6

由于无法更改现有的Docker映像,所以我所做的是我根据原始docker映像的内容为其新docker映像创建了一个dockerfile,并将其修改为在新映像中包含本地的测试文件夹。该链接对构建自己的映像很有帮助-Docker文档

FROM abc/def:latest
Run Code Online (Sandbox Code Playgroud)

泊坞窗文件中的上一行告诉Docker映像所基于的映像。因此,父图像的内容将复制到新图像

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

COPY test /home/humpty-dumpty/test
Run Code Online (Sandbox Code Playgroud)

并且测试文件夹已添加到该新图像中。

以下是用于从现有映像创建新映像的dockerfile。

FROM abc/def:latest

# Extras
RUN sudo apt-get install -y vim

# copies local folder into the image 
COPY test /home/humpty-dumpty/test
Run Code Online (Sandbox Code Playgroud)

更新:-为了编辑正在运行的docker映像中的文件,我们可以使用通过上述docker文件安装的vim编辑器打开该文件

vim <filename>
Run Code Online (Sandbox Code Playgroud)

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


BMi*_*tch 5

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

由于分层文件系统和缓存,创建一个只添加一个文件夹的新图像只会添加一个具有该添加的层,而不是新图像的完整副本。因此,简单/干净/正确的方法是使用 Dockerfile 创建一个新镜像。