以下是我想要实现的 docker 层: https://stackoverflow.com/questions/31222377/what-are-docker-image-layers
我想使用以下命令将文件夹从主机挂载到 docker:
docker run \
-v /path/to/host/large_size_folder:/var/large_size_folder \
my_docker \
/bin/bash -c "rm -rf /var/large_size_folder/file1 && echo "hello" > /var/large_size_folder/file2"
因为它的大小/path/to/host/large_size_folder
非常大,所以我不想将其复制到docker镜像中。所以我习惯-v
将它挂载到docker镜像上。
然后,我运行 docker 并使用 bash 来查看add/modify/delete
“ ”内的文件/var/large_size_folder
。
但此操作也会从主机添加/修改/删除文件。
在 中docker layer only
运行时是否可以在不影响主机目录的情况下进行任何修改?/bin/bash -c "rm -rf /var/large_size_folder/file1 && echo "hello" > /var/large_size_folder/file2"
docker container
您可以通过手动添加(Docker 也在内部使用它来管理卷)来实现解决方案
overlayfs
,以便对文件系统的更改写入单独的目录,并且可以随时撤消。因此,设置以下内容:(创建目录 - 您可以根据需要更改这些目录的位置)
/path/to/host/large_size_folder
(已经存在)是其中的下层目录overlayfs
,包含原始数据(不会被修改)/tmp/large_size_folder_changes
是存放修改的上层目录/tmp/overlayfs
是工作目录(工作overlayfs
所需的内部目录)overlayfs
/mnt/large_size_folder_merged
是合并目录,我们可以在其中访问组合内容,这就是您想要映射到 Docker 容器中的内容安装的命令
overlayfs
是:然后要创建 Docker 容器,请使用:
/var/large_size_folder
现在,您对容器内部所做的任何更改都将反映/mnt/large_size_folder_merged
在主机上。变化只能在里面看到
/tmp/large_size_folder_changes
,而原来的/path/to/host/large_size_folder
没有变化。另请参阅此处:如何使用 OverlayFS?