Что представляет собой Docker-образ и что с ним можно делать после сборки?

Ответ

После выполнения команды docker build создается Docker-образ (Image).

Что такое Docker-образ?

Docker-образ — это неизменяемый (read-only) шаблон, который содержит все необходимое для запуска приложения:

  • Код приложения или скомпилированный бинарный файл.
  • Необходимые зависимости (библиотеки, утилиты).
  • Конфигурационные файлы.
  • Метаданные, описывающие, как запустить контейнер (например, рабочая директория, переменные окружения, команда для запуска).

Структурно образ состоит из набора упорядоченных слоев (layers). Каждый слой представляет собой инструкцию из Dockerfile (например, COPY, RUN, ADD) и содержит только изменения файловой системы относительно предыдущего слоя. Эта слоистая структура делает образы эффективными для хранения и передачи.

Что можно делать с образом после сборки?

  1. Локальное хранение и просмотр:

    • Образ сохраняется в локальном хранилище Docker-демона.
    • Вы можете просмотреть список всех локальных образов командой docker images.
  2. Запуск контейнера:

    • Это основное предназначение образа. Команда docker run my-image:latest создает контейнер из образа.
    • Контейнер — это запущенный экземпляр образа. Он добавляет поверх неизменяемых слоев образа новый, записываемый (writable) слой, где и происходят все изменения во время работы приложения.
      # Запустить контейнер в фоновом режиме и пробросить порт 8080
      docker run -d -p 8080:80 my-image:latest
  3. Отправка в Registry:

    • Чтобы поделиться образом с командой или развернуть его на сервере, его нужно отправить в централизованное хранилище (Registry), такое как Docker Hub, GitLab Container Registry или AWS ECR.
    • Это делается командой docker push my-registry.com/my-image:latest.
  4. Тегирование:

    • Одному и тому же образу можно присвоить несколько тегов для удобства версионирования.
    • docker tag my-image:latest my-image:1.2.0
  5. Проверка и анализ:

    • С помощью docker inspect my-image можно получить подробную информацию об образе в формате JSON, включая все его слои, метаданные и конфигурацию.
    • Образ можно сканировать на наличие уязвимостей с помощью специализированных инструментов (например, Trivy, Snyk).