Ответ
Docker image — это неизменяемый (immutable) шаблон, содержащий всё необходимое для запуска приложения: код, зависимости, системные библиотеки, переменные окружения и конфигурации. Из образа создаются контейнеры.
Ключевые характеристики:
- Иммутабельность — образ нельзя изменить после сборки. Любые изменения требуют создания нового образа.
- Слоистая структура — каждый шаг в
Dockerfileсоздаёт новый слой. Слои кэшируются и переиспользуются, что ускоряет сборку. - Хранение в реестрах — образы хранятся в реестрах (Docker Hub, AWS ECR, Google Container Registry).
Пример Dockerfile:
# Базовый образ (первый слой)
FROM openjdk:17-jdk-slim
# Установка рабочей директории (второй слой)
WORKDIR /app
# Копирование файлов (третий слой)
COPY target/myapp.jar ./app.jar
# Открытие порта (метаданные, не создаёт слой)
EXPOSE 8080
# Команда запуска (четвёртый слой)
CMD ["java", "-jar", "app.jar"]
Работа с образами:
# Сборка образа из Dockerfile
docker build -t myapp:1.0 .
# Просмотр локальных образов
docker images
# Загрузка образа в реестр
docker push myapp:1.0
# Скачивание образа из реестра
docker pull myapp:1.0
# Удаление локального образа
docker rmi myapp:1.0
Почему слои важны:
- При изменении одного шага в
Dockerfileпересобираются только последующие слои - Разные образы могут делиться общими базовыми слоями, экономя дисковое пространство
- Слоистая структура обеспечивает эффективную дельту при передаче образов