Мой вопрос: где они хранятся ...
Основное хранилище находится в слоях, но более заметная часть кэша докера находится в безымянных изображениях.Если вы выполните команду:
$ docker image ls -a
REPOSITORY TAG IMAGE ID CREATED SIZE
...
<none> <none> 2ff3cc78bae3 2 months ago 990MB
<none> <none> b4d595b73712 2 months ago 990MB
<none> <none> a24136e532bd 2 months ago 990MB
...
, вы увидите несколько <none> <none>
строк.Вы можете просмотреть эти изображения, чтобы увидеть, для чего они используются:
$ docker image inspect 2ff3cc78bae3
[
{
"Id": "sha256:2ff3cc78bae335d793fbdfc3d4b2c802c790dceb99b870195d2ec24f3cb7c344",
"Parent": "sha256:b4d595b7371298e378de8f5985dc63d5c1a44cf44b1a2b1d93b30f6e514cf72d",
"ContainerConfig": {
"Cmd": [
"/bin/sh",
"-c",
"#(nop) ",
"ARG IMAGE_PATCH_VER=0"
],
...
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:b28ef0b6fef80faa25436bec0a1375214d9a23a91e9b75975bba3b2889f8504f",
"sha256:0b703c74a09c1e55d52e6b689babc6ae6374a793c1acfe8ff21a554014d8f434",
"sha256:2eb1c9bfc5ead1e646e39ab760ead591f995cf606c327235a21eeb075ec5c178",
"sha256:ab016c9ea8f8bb97f7b1c2871b0560787028864d06a49d062816ad72b9336cc6",
"sha256:b7c56a9790e60bd54b54228e6b0d9c4328664b0692786b22e7de480e862770cc",
"sha256:3b2a1688b8f31944a0ed33e09f5d241eb2c19da66b3a946866af8d30fcd17187",
"sha256:3499b696191f1b2cf59ae755ca59d33b3de0c6f8f7671bdd71c30cd97c9335e8",
"sha256:0d67aa2185d5678243a50613b5776c32c2f60022c15f593711d39f00f2d38285",
"sha256:84bbcb8ef932ed7447fb7cdfb54952206a13b90f55a710ea2baad224b4be87dc",
"sha256:156bc36c74a7ee16382e50c19370325c4d81b9d36ccd97c647b8e695e95b08ae",
"sha256:9384f8c620b82317bf68d3e7ce67d30be265c53cb42ddee3894f00bd45f4957e",
"sha256:ac25a83975980a489e2eb39128645895fbca444a4702fd0fe64ae72df52040ff",
"sha256:61a39ec185581a88c0007f013ea155cd0aca0a4be61eb0cedc3f965dd9208f42",
"sha256:40caba409f3cc8ce2dd84877730bfde9a74f8f057cebabd4887418c315adf24c",
"sha256:b8e1d28b784040096a4fbb1c56820ff42975da14eb79093bf30bfba04b060ca9",
"sha256:def95060ad1afb136328dbc9273098910a68878df6acda8f70a3f1100a6624e6",
"sha256:0d21822b2d1e5c1873d31742109952f847f93623f404ec293d942ecdf6ad472e",
"sha256:9288edafe57c1648cce14f1921080cc42901a8ffad88d3c2e2d08142c253d54c",
"sha256:3b27b9cf51a6e6176966dc654aa47e6ef3ce19834224ed791cc23970db7d2fc5",
"sha256:08794ff8753b0fbca869a7ece2dff463cdb7cffd5d7ce792ec067e3fd954fe01",
"sha256:37986c5c5dff18257b9a12a19801828a80aea036992b34d35a33efdb743b2529",
"sha256:34bb0412a3f6c0f3684e05fcd0a301dc999510511c3206d8cd34c538bfdb8b46",
"sha256:c8a7927d0a54d0cac0aa417d61c936d3950d5f1514f4d080520a61205cd5ed4a",
"sha256:cbb437280c0499a471745df063c647a646dfcc1745681466303df2c2af3efd92",
"sha256:6599eb7e022c080e98cfd60e7570ebfda4be22917ea76b8d6bad16279a86c6b3",
"sha256:f5fd05da7ca7dca9a48008b36a9a6ea2f330e426930dbe25f7b51e0eea2bccd2",
"sha256:f5fd05da7ca7dca9a48008b36a9a6ea2f330e426930dbe25f7b51e0eea2bccd2"
]
},
}
]
Приведенный выше вывод значительно обрезан, чтобы показать некоторые ключевые детали.
Сначала родительский элемент указывает на предыдущее изображение впостроить кеш.Кеш докера зависит от того, как предыдущий шаг был прежним.Поэтому, если вы добавите или удалите строку из середины файла Docker, это родительское изображение больше не будет совпадать, и вы нарушите кеш.
Следующий бит, который следует отметить, - это значение Cmd или командазапустить.В этом случае это неактивный комментарий от установки ARG, но это могла быть любая команда, запущенная из команды RUN.Среда и выполняемая команда должны совпадать для соответствия кэша.С помощью команды COPY / ADD необходимо сопоставить контрольную сумму добавляемых файлов, которая включает метаданные, такие как владение и права доступа к файлу.
Наконец, это раздел слоев, который позволяет сравнить со слоями родительского изображения.:
$ docker image inspect b4d595b73712
[
{
....
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:b28ef0b6fef80faa25436bec0a1375214d9a23a91e9b75975bba3b2889f8504f",
"sha256:0b703c74a09c1e55d52e6b689babc6ae6374a793c1acfe8ff21a554014d8f434",
"sha256:2eb1c9bfc5ead1e646e39ab760ead591f995cf606c327235a21eeb075ec5c178",
"sha256:ab016c9ea8f8bb97f7b1c2871b0560787028864d06a49d062816ad72b9336cc6",
"sha256:b7c56a9790e60bd54b54228e6b0d9c4328664b0692786b22e7de480e862770cc",
"sha256:3b2a1688b8f31944a0ed33e09f5d241eb2c19da66b3a946866af8d30fcd17187",
"sha256:3499b696191f1b2cf59ae755ca59d33b3de0c6f8f7671bdd71c30cd97c9335e8",
"sha256:0d67aa2185d5678243a50613b5776c32c2f60022c15f593711d39f00f2d38285",
"sha256:84bbcb8ef932ed7447fb7cdfb54952206a13b90f55a710ea2baad224b4be87dc",
"sha256:156bc36c74a7ee16382e50c19370325c4d81b9d36ccd97c647b8e695e95b08ae",
"sha256:9384f8c620b82317bf68d3e7ce67d30be265c53cb42ddee3894f00bd45f4957e",
"sha256:ac25a83975980a489e2eb39128645895fbca444a4702fd0fe64ae72df52040ff",
"sha256:61a39ec185581a88c0007f013ea155cd0aca0a4be61eb0cedc3f965dd9208f42",
"sha256:40caba409f3cc8ce2dd84877730bfde9a74f8f057cebabd4887418c315adf24c",
"sha256:b8e1d28b784040096a4fbb1c56820ff42975da14eb79093bf30bfba04b060ca9",
"sha256:def95060ad1afb136328dbc9273098910a68878df6acda8f70a3f1100a6624e6",
"sha256:0d21822b2d1e5c1873d31742109952f847f93623f404ec293d942ecdf6ad472e",
"sha256:9288edafe57c1648cce14f1921080cc42901a8ffad88d3c2e2d08142c253d54c",
"sha256:3b27b9cf51a6e6176966dc654aa47e6ef3ce19834224ed791cc23970db7d2fc5",
"sha256:08794ff8753b0fbca869a7ece2dff463cdb7cffd5d7ce792ec067e3fd954fe01",
"sha256:37986c5c5dff18257b9a12a19801828a80aea036992b34d35a33efdb743b2529",
"sha256:34bb0412a3f6c0f3684e05fcd0a301dc999510511c3206d8cd34c538bfdb8b46",
"sha256:c8a7927d0a54d0cac0aa417d61c936d3950d5f1514f4d080520a61205cd5ed4a",
"sha256:cbb437280c0499a471745df063c647a646dfcc1745681466303df2c2af3efd92",
"sha256:6599eb7e022c080e98cfd60e7570ebfda4be22917ea76b8d6bad16279a86c6b3",
"sha256:f5fd05da7ca7dca9a48008b36a9a6ea2f330e426930dbe25f7b51e0eea2bccd2",
"sha256:f5fd05da7ca7dca9a48008b36a9a6ea2f330e426930dbe25f7b51e0eea2bccd2"
]
},
}
]
Если вы посмотрите на эти слои, где хранятся все файлы, вы увидите, что они идентичны.Добавление ARG к изображению не создает новых файлов, поэтому это ожидается.Если бы это была команда RUN или COPY, вы бы увидели все те же слои за исключением одного дополнительного слоя в новом изображении.Когда вы запускаете контейнер, Docker использует указатели на эти слои, чтобы создать оверлейную файловую систему, которая обращается к слоям как срезы файловой системы только для чтения (с контейнером, имеющим один срез чтения-записи вверху). Важной частью здесь является то, что эти слои не копируются, несколько изображений могут указывать на одни и те же слои.
Заполняю ли я диск детритом из моих экспериментов?
Зависит.Если ваши изображения значительно меняются, и вы используете один и тот же тег для каждой сборки, то у вас может быть много потерянных (немаркированных) изображений, занимающих большой объем дискового пространства.A docker image prune
удалит потерянные изображения и части кэша сборки, которые больше не используются никакими помеченными изображениями.Если вы максимизируете кэширование изображений, сохраняя свои изменения только на последних слоях, минимизируя размер этих изменений и используя уникальный тег для каждой сборки, то вы получите небольшую выгоду от сокращения изображения, а кэш практически не занимает места.,