2017-04-14 65 views
0

我最近开始使用码头工作。我已经下载了一个泊坞窗图像,我想以某种方式更改它,以便我可以将文件夹中的内容从本地复制到该图像中,或者可以编辑图像中的任何文件。修改码头图片

我想如果我能以某种方式提取图像,请进行更改,然后创建一个图像。不知道它是否会像那样工作。我试图寻找选择,但无法找到一个有前途的解决方案。

的图像当前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"] 

注: -我在寻找一个简单而干净的方式只有改变现有的形象,而不是创建一个新的形象变化。

回答

0

由于现有的码头图像无法更改,我所做的是我基于原始码头图像为其内容创建了新码头图像的码头文件,并将其修改为在新图像中包含来自本地的测试文件夹。 这种联系是有益的Build your own image - Docker Documentation

FROM abc/def:latest 

在搬运工文件上面行告诉其图像图像是基于多克。所以,从父图像的内容复制到新的图像

最后,包括本地驱动器上的测试文件夹我在泊坞窗文件

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 

更新: -对于运行泊坞窗图像编辑一个文件,我们可以使用通过上述泊坞窗文件安装现在

vim <filename> 

vim编辑器打开该文件,vim的命令都可以用于编辑和保存文件。

1

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

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

+0

Ohkk ...所以这些图像无法修改。当我下载泊坞窗图像时,我没有这些图像指向的结构。所以我唯一的选择是创建一个新的图像。这同样适用于文件编辑也..也就是说? – qwerty

+0

请记住图像是由ID(校验和)引用的。一个标签指向一个ID,多个标签可以指向相同的ID,或者一个标签,像ubuntu:最新可以指向任何你想要的图像的ID。 – BMitch

2

首先,我不会推荐搞乱其他图片。如果你能创造你自己的会更好。向前迈进,您可以使用copy命令将主机中的文件夹添加到泊坞窗图像。

COPY <src> <dest> 

唯一需要注意的是<src>路径必须在构建的上下文中;您不能COPY ../something /something,因为docker build的第一步是将上下文目录(和子目录)发送到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"] 
1

我想你可以使用docker cp命令来进行更改container这是从码头工人的图像生成并提交更改。

这里是一个参考,

指南搬运工CP: https://docs.docker.com/engine/reference/commandline/cp/

指南搬运工承诺:https://docs.docker.com/engine/reference/commandline/container_commit/

记住,docker image是俱备只所以你不能做出任何更改。唯一的办法是修改你的docker文件并重新创建镜像,但是在这种情况下你会丢失数据(如果没有安装在docker volume上)。但是您可以对container进行更改,但这只是未做好准备。