Как мне посмотреть, что кеширует Docker? - PullRequest
0 голосов
/ 21 января 2019

Эксперимент и отладка Dockerfile Я изменяю строку здесь и перезапускаюсь, и из вывода журнала я вижу "---> Использование кэша" и "---> b0efa ....".У меня вопрос, где хранятся те, я заполняю свой диск детритом от моих экспериментов?

Ответы [ 2 ]

0 голосов
/ 21 января 2019

Мой вопрос: где они хранятся ...

Основное хранилище находится в слоях, но более заметная часть кэша докера находится в безымянных изображениях.Если вы выполните команду:

$ 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 удалит потерянные изображения и части кэша сборки, которые больше не используются никакими помеченными изображениями.Если вы максимизируете кэширование изображений, сохраняя свои изменения только на последних слоях, минимизируя размер этих изменений и используя уникальный тег для каждой сборки, то вы получите небольшую выгоду от сокращения изображения, а кэш практически не занимает места.,

0 голосов
/ 21 января 2019

Это обычные изображения (точнее слои).Вы можете посмотреть, что внутри, запустив контейнер из одного

docker run --rm -it b0efa sh

Если вы регулярно запускаете docker system prune, который очистит все неиспользуемые изображения и слои, которые в них попадают;если кэшированный слой является частью изображения, которое вы на самом деле используете, он не занимает дополнительного места.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...