Skip to content

Основы Docker: Образы (Images)

Docker Image — это шаблон, используемый для создания Docker-контейнеров. Образы являются неизменяемыми (read-only) файлами, которые состоят из серии слоев. Эти слои объединяются для создания файловой системы контейнера.

Основные характеристики Docker Images

  • Слоистая файловая система (Layered Filesystem): Образы Docker состоят из нескольких слоев, каждый из которых представляет собой набор изменений в файловой системе. Эти слои создаются на основе инструкций в Dockerfile. Преимущество слоистой структуры заключается в том, что слои могут быть повторно использованы между различными образами, что экономит место на диске и ускоряет процесс сборки и передачи образов.
  • Неизменяемость (Immutability): После создания образ не может быть изменен. Любые изменения приводят к созданию нового слоя поверх существующего образа.
  • Портативность (Portability): Образы Docker можно легко передавать между различными Docker-хостами и хранить в Docker Registry.
  • Рецепт для контейнеров: Образ содержит все необходимое для запуска одного или нескольких идентичных контейнеров.

Управление образами Docker

Вы можете управлять образами Docker с помощью команды docker image (или просто docker).

Просмотр списка образов

bash
docker image ls
docker images

Эти команды выводят список всех образов, находящихся на вашем локальном Docker-хосте, включая их репозиторий, тег, ID образа, дату создания и размер.

  • REPOSITORY: Имя репозитория образа (например, ubuntu, nginx, mysql).
  • TAG: Тег образа, который используется для версионирования (например, latest, 20.04, 1.21). По умолчанию используется тег latest, если не указан другой.
  • IMAGE ID: Уникальный идентификатор образа.
  • CREATED: Дата и время создания образа.
  • SIZE: Размер образа.

Поиск образов в Docker Hub

Docker Hub (https://hub.docker.com/) — это публичный реестр образов Docker. Вы можете искать образы, используя команду docker search:

bash
docker search nginx
docker search ubuntu --filter is-official=true # Поиск только официальных образов Ubuntu

Результат поиска включает имя образа, описание, количество звезд (популярность), является ли образ официальным и автоматизированным.

Загрузка образов из Docker Hub

Чтобы загрузить образ из Docker Hub на ваш локальный Docker-хост, используйте команду docker pull:

bash
docker pull ubuntu:latest # Загрузка последней версии образа Ubuntu
docker pull nginx:1.20   # Загрузка образа Nginx с тегом 1.20

Если тег не указан, Docker автоматически загрузит образ с тегом latest.

Создание образов (Dockerfile)

Образы Docker создаются на основе инструкций, содержащихся в файле Dockerfile. Мы подробно говорили о Dockerfile в предыдущей теме. Для сборки образа из Dockerfile используется команда docker build:

bash
docker build -t my-custom-image:1.0 .
  • -t my-custom-image:1.0: Указывает имя и тег для создаваемого образа (my-custom-image — имя, 1.0 — тег). Если тег не указан, по умолчанию используется latest.
  • .: Указывает контекст сборки (обычно текущая директория), который содержит Dockerfile и другие необходимые файлы.

Просмотр истории образа

Чтобы увидеть слои, составляющие образ, и команды, которые использовались для их создания, используйте команду docker history:

bash
docker history ubuntu:latest

Эта команда показывает слои в обратном хронологическом порядке (начиная с самого верхнего слоя).

Отметка образов тегами

Вы можете присваивать образам дополнительные теги для удобства управления версиями или для указания другого репозитория:

bash
docker tag my-custom-image:1.0 [my-registry.com/my-namespace/my-custom-image:latest](https://my-registry.com/my-namespace/my-custom-image:latest)

Эта команда создает новый тег latest для образа my-custom-image:1.0 в репозитории my-registry.com/my-namespace/.

Выгрузка образов в Docker Registry

Чтобы поделиться своими образами или использовать их на другом Docker-хосте, вы можете выгрузить их в Docker Registry (например, Docker Hub или частный реестр) с помощью команды docker push:

bash
docker login # Если требуется аутентификация в реестре
docker push [my-registry.com/my-namespace/my-custom-image:latest](https://my-registry.com/my-namespace/my-custom-image:latest)

Сохранение и загрузка образов (локально)

Вы также можете сохранить образ в tar-архив и затем загрузить его на другом Docker-хосте без использования реестра:

bash
docker save -o my-image.tar my-custom-image:1.0
docker load -i my-image.tar

Удаление образов

Чтобы удалить один или несколько образов, используйте команду docker rmi (remove image):

bash
docker rmi my-custom-image:1.0 # Удаление образа по имени и тегу
docker rmi <image_id>         # Удаление образа по ID

Будьте осторожны при удалении образов, так как это необратимая операция. Убедитесь, что вы удаляете нужные образы.

Чтобы удалить все неиспользуемые образы (образы, на которые не ссылаются ни один контейнер):

bash
docker image prune

Чтобы удалить все неиспользуемые образы и связанные с ними данные (включая неиспользуемые контейнеры и сети):

bash
docker system prune

Также будьте осторожны при использовании docker system prune, так как это может удалить важные данные.

Лучшие практики при работе с Docker Images

  • Используйте минимальные базовые образы: Начинайте с небольших базовых образов (например, alpine-based), чтобы уменьшить размер и повысить безопасность ваших итоговых образов.
  • Мультистейдж сборки (Multi-stage builds): Используйте несколько стадий в Dockerfile для сборки приложения и копирования только необходимых артефактов в финальный образ, что также уменьшает его размер.
  • Кэширование слоев: Располагайте инструкции в Dockerfile таким образом, чтобы максимально эффективно использовать кэширование слоев Docker, что ускоряет процесс сборки.
  • Регулярно обновляйте базовые образы: Следите за обновлениями безопасности базовых образов и пересобирайте свои образы при необходимости.
  • Используйте теги для версионирования: Правильное использование тегов помогает отслеживать различные версии ваших образов.
  • Оптимизируйте размер образов: Удаляйте ненужные файлы и зависимости из финальных образов.
  • Безопасность образов: Сканируйте свои образы на наличие уязвимостей.

Docker Images являются фундаментальной концепцией в Docker. Понимание того, как создавать, управлять и оптимизировать образы, является ключевым для эффективной работы с Docker.