Посмотришь, из чего состоит собранный образ и что значит тег после двоеточия.
Каждая инструкция Dockerfile оставляет в образе слой — снимок того, что она изменила в файлах. Слои показывает docker history, последний — сверху; формат оставляет две колонки — размер и инструкцию:
Нижняя строка — основа из FROM: образ busybox, 4,58 МБ. Его слой общий для всех образов на основе busybox и лежит на диске один раз. Свои слои site весят килобайты, а у CMD — 0B: эта инструкция файлов не меняет, она записывает настройку образа.
Тег — имя версии после двоеточия: site:1, site:2. Без тега docker подставляет latest. Тег указывает на конкретный образ, и у одного образа тегов бывает несколько. Сборка с тегом, который уже занят, переносит его на новый образ. Прежний остаётся без имени: контейнер из него sudo docker ps покажет с ID образа вместо имени.
Сети на машине нет, и docker pull не работает. Основу для FROM подготовка загрузила из файла: docker load -i /opt/images/busybox.tar. Рядом лежат alpine.tar и nginx-alpine.tar.
Контейнер web работает из образа site:2. Ты поправил index.html и снова выполнил sudo docker build -t site:2 .. Что теперь отдаёт web?
-
Занятый тег сборке не мешает: она закончится строкой
naming to docker.io/library/site:2 done, а прежний образ останется без тега. -
Потеря тега контейнер не останавливает:
sudo docker psпокажет web со статусомUp, а в колонке IMAGE — ID прежнего образа. -
Тег нужен docker, когда он создаёт контейнер. Работающий web создан из прежнего образа и отдаёт его файлы, пока его не пересоздадут.
Контейнер остаётся на образе, из которого создан, даже когда тег переехал на новый — docker ps показывает у него ID прежнего образа. Новая версия дойдёт до сайта, когда web пересоздадут из нового site:2.
Главное в шаге
-
Каждая инструкция Dockerfile — слой образа;
docker historyпоказывает их от последнего к основе. -
Слой основы из
FROMобщий для всех образов на её основе. - Тег — имя версии образа: сборка с занятым тегом переносит его на новый образ, а работающий контейнер остаётся на своём.