我已经下载了一个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条答案
按热度按时间stszievb1#
由于现有的Docker镜像无法更改,我所做的就是基于我原来的Docker镜像为新的Docker镜像创建一个dockerfile,并修改它以将本地的测试文件夹包含到新镜像中。
这个链接很有用:
构建自己的镜像- Docker文档
字符串
Docker文件中的上面一行告诉Docker你的镜像基于哪个镜像。因此,父图像的内容被复制到新图像。
最后,为了从本地驱动器包含测试文件夹,我在Docker文件中添加了以下命令
型
...并将测试文件夹添加到该新映像中。
下面是用于从现有镜像创建新镜像的dockerfile。
型
**更新:**要编辑运行中的docker镜像中的文件,我们可以通过上面的docker文件安装vim编辑器打开该文件:
型
现在,可以使用vim命令编辑和保存文件。
ou6hu8tu2#
您不会更改现有图像,图像将标记有校验和,并被视为只读。使用镜像的容器指向文件系统上的相同文件,为容器添加了它们的RW层,因此依赖于未更改的镜像。层缓存也增加了这种依赖性。
由于分层的文件系统和缓存,仅添加一个文件夹创建新映像只会添加一个层,而不是新映像的完整副本。因此,简单/干净/正确的方法是使用Dockerfile创建新映像。
l7wslrjt3#
首先,我不建议你乱用其他图像。如果你能创造自己的就更好了。接下来,您可以使用
copy
命令将文件夹从主机添加到Docker镜像。字符串
唯一需要注意的是
<src>
路径必须在构建的上下文中;你不能复制../something /something
,因为docker构建的第一步是将context目录(和子目录)发送到docker守护进程。型
4uqofj5v4#
我认为你可以使用
docker cp
命令对从你的docker镜像运行的容器进行更改,然后提交更改。这里有一个参考,
docker cp
指南:https://docs.docker.com/engine/reference/commandline/cp/docker commit
指南:https://docs.docker.com/engine/reference/commandline/container_commit/的请记住,Docker镜像是只读的,因此您无法对其进行任何更改。唯一的方法是修改你的docker文件并重新创建镜像,但在这种情况下,你会丢失数据(如果没有挂载在Docker卷上)。但是你可以对非只读的容器进行修改。