修改泊坞窗图像

时间:2017-04-14 16:27:43

标签: docker dockerfile docker-image

我最近开始研究码头工具。我已经下载了一个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"]

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

4 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

首先,我不建议搞乱其他形象。如果你能创造自己的,那就更好了。继续,您可以使用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"]

答案 2 :(得分:2)

由于现有的docker镜像无法更改,我所做的就是根据原始docker镜像为其内容创建了一个新的docker镜像的dockerfile,并将其修改为包含新图像中local的test文件夹。 此链接很有用Build your own image - Docker Documentation

FROM abc/def:latest

docker文件中的上述行告诉Docker您的图像所基于的图像。因此,父图像中的内容将复制到新图像

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

COPY test /home/humpty-dumpty/test

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

下面是用于从现有图像创建新图像的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

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

vim <filename>

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

答案 3 :(得分:1)

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

这是一个参考,

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

码头工具提交指南:https://docs.docker.com/engine/reference/commandline/container_commit/

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

相关问题