Создает ли файл touch копию в слое Docker-контейнера?
Как насчет того, чтобы сделать только изменение метки времени файла (т.е. touch'ed) в контейнере Docker? Будет ли UFS (или используемый вариант) создавать копию файла в слое Docker-контейнера или сможет ли он справиться с этим сценарием более эффективно?
Поиск точной информации о последствиях касания файлов в контексте докера и о том, как лучше всего управлять этим сценарием, чтобы уменьшить совокупный размер хранилища файлов по слоям.
1 ответ
На этот вопрос легко ответить экспериментально. Запустить контейнер:
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
,