文件触摸在Docker容器层中创build副本吗?

如何在Docker容器中仅更改文件时间戳(即触摸)? UFS(或者所使用的variablesnetworking)会在Docker容器层创build一个文件副本还是能够更有效地处理这种情况?

在Docker的上下文中查找有关文件触摸效果的信息,以及如何最好地pipe理此场景以减less累积文件存储在各个层次上的占用空间。

这是一个很容易回答的问题。 启动一个容器:

docker run -it ubuntu 

触摸某个东西并退出容器:

 root@914f5453af3c:/# touch /bin/ls root@914f5453af3c:/# exit 

将容器保存为新图像:

 $ docker commit 914f5453af3c testimage 

将图像图层导出到本地目录:

 $ mkdir testimage $ docker save testimage | tar -C testimage -xf- 

这会给你一个如下所示的目录:

 $ ls testimage 15c6fddb70d1d281b7c20cdd5a54be3379c4c282a3e9ba2ae27c79a655ca9ed6 46bda337e95a0163468d9daa3a13ba104507f68186a09cdb2892b20030aeb530 63c22c7d4e3cd1a04ada1a24dd84837c1ce0c445bb48b75ed45f84250146459f 6d1bde67c5695c66882fd71951376e176ba908fc9a560bd8eeb07c4b4797da89 7c05062524dd680596681fb193b3096fcd775da2c0e7e66e0ad580850ee3a973.json 96ab7e8335a8dff5ed0144a46ddbe6ab6c1e76011670cb54efc515c46ea6b09b fbe2d84b180c3f84eb15754cf95e1a6359a84ed3c6e2f6869f0a2015343611fc manifest.json repositories 

查看repositories以查找最顶层:

 $ cat testimage/repositories 

{ “testimage”:{ “最新的”: “6d1bde67c5695c66882fd71951376e176ba908fc9a560bd8eeb07c4b4797da89”}}

看看这个图层的内容:

 $ tar -tf testimage/6d1bde67c5695c66882fd71951376e176ba908fc9a560bd8eeb07c4b4797da89/ layer.tar bin/ bin/ls root/ root/.bash_history 

在那里你可以看到最上面的图层有一个/bin/ls的副本作为touch的结果。