Docker Image (образ контейнера)
Контекст термина
Термин используется в контексте контейнеризации и DevOps (Docker, Kubernetes, CI/CD).
Не относится к изображениям (PNG, JPG) или графическим файлам.
Суть в одном предложении
Docker Image — это неизменяемый, версионируемый шаблон, содержащий приложение и его окружение, из которого запускаются контейнеры.
Краткое определение
Docker Image — это собранный образ файловой системы и конфигурации, включающий код приложения, зависимости, runtime и инструкции запуска, предназначенный для создания контейнеров.
Где используется
- Docker и Docker Compose
- Kubernetes
- CI/CD пайплайны
- Dev / Test / Stage / Prod окружения
- Cloud-инфраструктура
- GitOps-процессы
Архитектурное значение
Docker Image решает одну фундаментальную проблему:
"У меня работает, а на сервере — нет."
Образ гарантирует:
- Идентичное окружение
- Повторяемую сборку
- Предсказуемый деплой
- Отсутствие зависимости от системы хоста
Подробное объяснение
Image создаётся на основе Dockerfile.
Пример:
FROM php:8.2-fpm-alpine
WORKDIR /var/www
COPY composer.json composer.lock ./
RUN composer install --no-dev --optimize-autoloader
COPY . .
CMD ["php-fpm"]
Сборка:
docker build -t my-app:1.0.0 .
Теперь my-app:1.0.0 — это Docker Image.
Запуск контейнера:
docker run -d -p 9000:9000 my-app:1.0.0
Контейнер — это процесс, созданный из Image.
Структура Docker Image
Образ состоит из слоёв (layers).
Каждая инструкция Dockerfile создаёт слой:
- FROM
- RUN
- COPY
- ADD
Это даёт:
- Кеширование сборки
- Быстрое распространение
- Повторное использование базовых образов
Проверка слоёв:
docker history my-app:1.0.0
Иммутабельность
Docker Image — неизменяемый.
Если нужно изменить приложение:
- создаётся новый образ
- меняется тег
- деплоится новая версия
Это критично для:
- Zero-downtime deployment
- Rollback
- GitOps
Теги и версионирование
Неправильно:
my-app:latest
Правильно:
my-app:1.0.0
my-app:1.0.1
my-app:prod-2026-02-15
latest не гарантирует воспроизводимость.
Где хранятся Docker Image
- Docker Hub
- GitHub Container Registry
- GitLab Registry
- Private registry
- AWS ECR
Публикация:
docker push registry.example.com/my-app:1.0.0
Image vs Container
| Docker Image | Container |
|---|---|
| Шаблон | Запущенный процесс |
| Неизменяемый | Имеет состояние |
| Хранится в registry | Работает в runtime |
Оптимизация образов
1️⃣ Multi-stage build
FROM composer:2 AS builder
WORKDIR /app
COPY . .
RUN composer install --no-dev
FROM php:8.2-fpm-alpine
WORKDIR /app
COPY --from=builder /app .
Преимущества:
- Меньший размер
- Без dev-зависимостей
- Быстрее деплой
2️⃣ Минимальные базовые образы
- alpine
- slim версии
3️⃣ Чистка кеша
RUN apt-get clean && rm -rf /var/lib/apt/lists/*
Безопасность Docker Image
Нельзя:
- Хранить секреты в образе
- Использовать root
- Оставлять dev-инструменты
Лучше:
USER www-data
Проверка уязвимостей:
docker scan my-app:1.0.0
Где особенно важно
- CI/CD
- Kubernetes
- High-load проекты
- SaaS
- Микросервисы
Для одного WordPress на VPS образ может быть избыточен.
Для масштабируемой инфраструктуры — обязательный элемент.
Что не является Docker Image
- Виртуальная машина
- Архив с кодом
- Снимок файлов без runtime
- Запущенный контейнер
Частые ошибки
❌ Использование only latest
❌ Большие образы (1–2GB)
❌ Секреты в ENV
❌ Установка dev-зависимостей в прод
Аналоги и связанные термины
- Docker
- Container
- Dockerfile
- Volume
- Kubernetes
- CI/CD
Пример использования
«В CI собирается Docker Image версии 1.0.3 и публикуется в registry, после чего Kubernetes обновляет Deployment.»
Мини-FAQ
Можно ли изменить Docker Image после сборки?
Нет. Нужно пересобрать новый.
Зависит ли образ от ОС хоста?
Нет. Он использует ядро хоста, но содержит своё окружение.
Можно ли использовать Docker Image без Docker?
Да, если используется совместимый runtime (например, containerd).
Смотри также
- Docker
- Container
- Kubernetes
- CI/CD
- GitOps