Docker-образ — это шаблон файловой системы и метаданных, из которого Docker запускает контейнеры. В образ уже упакованы приложение, его зависимости, базовая ОС и настройки окружения.
Все основные операции с образами выполняются через подкоманду docker image: с ее помощью можно смотреть список образов, исследовать их содержимое, скачивать из реестра, импортировать из архивов, удалять, тегировать и отправлять в реестр.
Получение списка образов: ls
Команда docker image ls выводит в терминал список скачанных образов следующего вида:
ИЗОБРАЖЕНИЕ
docer_image_ls
В колонке IMAGE отражены названия образов, а колонка ID содержит уникальные идентификаторы образов. Обращаться к образам для операций над ними можно по имени образа или по ID.
Просмотр истории изменений образа: history
docker image history — показать историю изменений образа. Команда отражает историю сборки образа по слоям. Пример просмотра образа docker image history n8nio/n8n:latest:
ИЗОБРАЖЕНИЕ
docker_image_history
Та же информация об образе отражена в Docker Hub (https://hub.docker.com/).
Получение подробной информации об образе: inspect
docker image inspect — показать подробную информацию об одном или нескольких образах. Команда выводит полные метаданные образа в формате JSON: ID, теги, digest, архитектура, OS, переменные окружения (Env), рабочая директория (WORKDIR), команда по умолчанию (CMD + ENTRYPOINT), экспонируемые порты, volumes, labels, автор, дата создания, конфигурация контейнера (StopSignal, User и т.д.), размер и количество слоев:
ИЗОБРАЖЕНИЕ
docker_inspect
Команда полезна, когда нужно понять, как именно образ настроен (какие порты открыты, какие переменные заданы, какая команда запустится), для отладки, CI/CD, security-сканирования и написания docker-compose.
Создание образа из архива: import
docker image import — создать образ из «сырой» файловой системы, упакованной в tar-архив (локальный файл или URL). В отличие от docker image load, который восстанавливает полноценный Docker-образ из заранее сохраненного архива (docker image save), import берет готовый rootfs и превращает его в новый образ без истории сборки.
Команда полезна, когда у вас есть экспортированный rootfs (например, из chroot, LXC, старой системы) и нужно быстро сделать из него Docker-образ, или когда вы получаете файловую систему от стороннего поставщика в tar-архиве, а не полноценный Docker-образ.
Например, так можно импортировать rootfs из URL: docker import https://example.com/exampleimage.tgz. А так — импортировать rootfs из локального архива с именем и тегом: docker import /path/to/rootfs.tar myimage:latest.
Загрузка образа из архива: load
docker image load — загрузить один или несколько образов из tar-архива (бэкап, выгруженный через docker image save) или стандартного ввода (STDIN). В отличие от docker image import, который строит образ из «сырых» данных файловой системы (rootfs, без сохраненной истории сборки), docker image load восстанавливает образ целиком из архива save, включая историю слоев, теги и метаданные, как если бы образ только что был скачан из реестра или собран локально.
Используя команду docker image load -i nginx.tar, можно загрузить образ из файла: при этом будут восстановлены все образы и теги, сохраненные в архиве.
Скачивание образа из реестра: pull
docker image pull — скачать образ из реестра (например, Docker Hub или приватного registry). Если тег не указан, по умолчанию используется latest. Например, docker image pull nginx:latest. Найти нужный образ заранее можно на Docker Hub. Каждый образ на Docker Hub имеет раздел Tags, где перечислены все теги и приведена полная команда для скачивания с учетом нужного тега:
ИЗОБРАЖЕНИЕ
doocker_pull_dh
Сохранение образа в архив: save
docker image save — сохранить один или несколько образов в tar-архив. Например, docker image save nginx:latest -o nginx.tar. Удобно использовать, когда нужно перенести образы на сервер без доступа к реестру (offline-доставка) или сделать резервную копию важных образов перед обновлением или миграцией.
Удаление конкретного образа: rm
docker image rm — удалить один или несколько образов по имени или ID. Например, docker image rm nginx:latest. Команда используется, когда нужно точечно удалить конкретный образ (или несколько), но не трогать остальные:
ИЗОБРАЖЕНИЕ
docker_image_rmМожно удалить сразу несколько образов, перечислив их через пробел: docker image rm nginx:latest redis:7-alpine myuser/myapp:1.0.0.
Важно: Docker не позволит удалить образ, если на его основе запущены или существуют контейнеры. В таком случае сначала нужно остановить и удалить соответствующие контейнеры (например, через docker rm / docker container rm), а уже потом повторить docker image rm:
ИЗОБРАЖЕНИЕ
docker_image_error
Удаление неиспользуемых образов: prune
docker image prune — удалить все неиспользуемые образы (которые не привязаны ни к одному контейнеру). Например, docker image prune.
Подходит для периодической «генеральной уборки», когда накопилось много старых, неиспользуемых образов. Перед удалением Docker покажет, сколько места будет освобождено, и попросит подтверждение.
Отправка образа в реестр: push
docker image push — отправить образ в реестр (Docker Hub или приватный registry). Например, docker image push myuser/myapp:1.0.0. Здесь myuser/myapp:tag — это логин/namespace и тег образа. Для отправки образа нужно иметь аккаунт и быть залогиненным через docker login -u user_name:
Изображение
docker_login
При аутентификации, в зависимости от настроек безопасности на Docker Hub, Docker может запросить либо пароль от Docker Hub, либо личный токен, который можно посмотреть в разделе Personal access tokens на странице настройки аккаунта Docker Hub.
Создание тега: tag
Тег нужен для того, чтобы добавить имя реестра и namespace перед отправкой образа (push), вести версии образов (:1.0.0, :2024-11-28, :staging) и иметь несколько «алиасов» для одного и того же образа.
Тег создается с помощью команды docker image tag. Например, создать новый тег TARGET_IMAGE[:TAG], который ссылается на уже существующий SOURCE_IMAGE[:TAG] (по сути, «переименовать» или добавить алиас для образа), можно командой docker image tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG].
Пример добавления тега с namespace пользователя перед отправкой на Docker Hub: docker image tag myapp:latest myuser/myapp:latest. А вот так можно подготовить образ к пушу в приватный реестр: docker image tag myapp:1.0.0 registry.example.com/apps/myapp:1.0.0.