← Назад к вопросам

В чем разница между Docker image и Docker контейнером?

1.6 Junior🔥 121 комментариев
#Docker, Kubernetes и DevOps

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

# Docker Image и Docker Контейнер: Ключевые Различия

Docker image и Docker контейнер — это фундаментальные концепции контейнеризации, которые часто путают, но они имеют четкие различия.

Docker Image

Docker image — это неизменяемый (immutable) шаблон или синий-отпечаток, из которого создаются контейнеры. Это статичный объект, содержащий:

  • Файловую систему приложения
  • 依зимости: все библиотеки и пакеты
  • Переменные окружения и конфигурация
  • Инструкции выполнения (команды для запуска приложения)
  • Слои (layers) из Dockerfile

Имеджи хранятся в реестрах (Registry) вроде Docker Hub, и занимают дисковое пространство. Вы можете создать множество контейнеров из одного имиджа.

FROM openjdk:17-slim
WORKDIR /app
COPY target/app.jar app.jar
CMD ["java", "-jar", "app.jar"]

Docker Контейнер

Докер контейнер — это запущенный процесс или экземпляр Docker image. Это динамический объект с состоянием:

  • Запущенный процесс (или остановленный)
  • Изолированная окружение (файловая система, сеть, процессы)
  • Состояние (запущен, остановлен, перезагружен)
  • Собственный слой (writeable layer) для изменений

Аналогия из ООП

Докер image подобен классу, а контейнер — объекту (экземпляру класса):

public class AppTemplate {  // Docker Image
    private String config;
    public void run() { /* ... */ }
}

// Docker Контейнер — это запущенный объект:
AppTemplate container1 = new AppTemplate();  // Контейнер 1
AppTemplate container2 = new AppTemplate();  // Контейнер 2

Сравнительная таблица

КритерийImageКонтейнер
ТипШаблон (статичный)Экземпляр (динамичный)
СостояниеНеизменяемыйМожет изменяться
СлойТолько read-only слоиИмеет writeable слой
РесурсыНа дискеОЗУ, CPU, сеть
Жизненный циклПостоянно существуетЗапускается/останавливается
Команда созданияdocker builddocker run

Практические примеры

# Создание image из Dockerfile
docker build -t my-java-app:1.0 .

# Запуск контейнеров из этого image
docker run -d --name container1 my-java-app:1.0
docker run -d --name container2 my-java-app:1.0

# Оба контейнера работают независимо из одного image

Внутренняя архитектура

Когда контейнер создается:

  1. Docker берет image слои (read-only)
  2. Добавляет поверх них writeable слой для контейнера
  3. Монтирует файловую систему
  4. Запускает процесс, указанный в image

Этот writeable слой позволяет контейнерам работать независимо: изменения в одном контейнере не влияют на другой или на image.

Почему это важно в Java разработке

Для Java приложения:

  • Image содержит JRE/JDK, зависимости Maven, скомпилированный .jar
  • Контейнер — это запущенное приложение с выделенной памятью, портами, переменными окружения

Вы можете легко масштабировать, создав несколько контейнеров из одного image, что упрощает развертывание микросервисов.

Понимание этого различия критично для работы с Kubernetes, Docker Compose и CI/CD pipeline в современной Java разработке.

В чем разница между Docker image и Docker контейнером? | PrepBro