Linux Labs

Контейнеры: Docker и compose / Ступень 4 из 11

Dockerfile: свой образ

Не запущена Запускается обычно ~20 с
Выйти из урока

Шаг 3 из 7 · теория · 5 мин

Слои и теги

Посмотришь, из чего состоит собранный образ и что значит тег после двоеточия.

Каждая инструкция Dockerfile оставляет в образе слой — снимок того, что она изменила в файлах. Слои показывает docker history, последний — сверху; формат оставляет две колонки — размер и инструкцию:

text
$ sudo docker history --format 'table {{.Size}}\t{{.CreatedBy}}' site:2
SIZE      CREATED BY
0B        CMD ["httpd" "-f" "-p" "8080"]
20.5kB    RUN /bin/sh -c date -u '+%F %T' > built.txt …
12.3kB    COPY index.html . # buildkit
8.19kB    WORKDIR /www
4.58MB    BusyBox 1.38.0 (glibc), Debian 13

Нижняя строка — основа из 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.

Проверь себя 1 вопрос

Контейнер 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 общий для всех образов на её основе.
  • Тег — имя версии образа: сборка с занятым тегом переносит его на новый образ, а работающий контейнер остаётся на своём.
Ubuntu 24.04
Загрузка…