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

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

2.0 Middle🔥 151 комментариев
#CI/CD и DevOps#Linux

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

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

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

Разница между Docker-образом и контейнером

Это фундаментальное различие, которое часто вызывает путаницу у новичков. Простыми словами: Docker-образ — это шаблон или чертеж, а Docker-контейнер — это запущенный экземпляр этого образа, изолированный процесс в операционной системе.

Docker-образ (Image)

Docker-образ — это неизменяемый (immutable) шаблон, содержащий всё необходимое для запуска приложения: операционную систему, зависимости, код приложения, переменные окружения и конфигурации. Образ состоит из нескольких слоев (layers), что обеспечивает эффективное хранение и повторное использование.

Ключевые характеристики образа:

  • Неизменяемость — после создания образ нельзя изменить. Любые изменения создают новый слой.
  • Слоистая структура — каждый слой представляет собой изменение файловой системы (установка пакета, копирование файлов).
  • Хранится в реестре — образы хранятся в Docker Hub, GitLab Registry или других репозиториях.
  • Создается из Dockerfile — образ создается командой docker build, которая читает инструкции из Dockerfile.
# Пример Dockerfile для создания образа
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "app.py"]
# Создание образа из Dockerfile
docker build -t myapp:1.0 .

Docker-контейнер (Container)

Docker-контейнер — это запущенный экземпляр образа. Это изолированный процесс со своей файловой системой, сетевым пространством и процессами, работающий поверх ядра хостовой ОС.

Ключевые характеристики контейнера:

  • Изменяемое состояние — контейнер может изменяться (файлы, процессы).
  • Изоляция — каждый контейнер имеет изолированное пространство процессов, сети и файловой системы.
  • Эфемерность — контейнеры можно легко создавать, останавливать и удалять.
  • Запускается из образа — контейнер создается командой docker run.
# Запуск контейнера из образа
docker run -d --name myapp-container -p 8080:80 myapp:1.0

# Проверка запущенных контейнеров
docker ps

# Остановка контейнера
docker stop myapp-container

Основные различия в таблице

АспектDocker-образDocker-контейнер
СостояниеНеизменяемый (read-only)Изменяемый (read-write)
Жизненный циклСоздается один раз, используется многократноСоздается, запускается, останавливается, удаляется
ХранениеВ Docker-реестре (локально или удаленно)Запущенный процесс в памяти
Количество экземпляровОдин образМного контейнеров из одного образа
Созданиеdocker build из Dockerfiledocker run из образа
АналогияКласс в ООП / Исполняемый файлОбъект класса / Запущенный процесс

Практический пример для QA Automation

В автоматизированном тестировании это различие критически важно:

  1. Для тестовых окружений:

    • Образ — это шаблон с предустановленным браузером, Selenium WebDriver, тестовыми фреймворками.
    • Контейнер — это изолированное окружение, где запускаются конкретные тесты.
  2. Для CI/CD:

    # Пример .gitlab-ci.yml
    stages:
      - test
    
    selenium-tests:
      stage: test
      image: selenium/standalone-chrome:latest  # Используем готовый образ
      script:
        - docker run --network host test-automation:latest  # Запускаем контейнер с тестами
    
  3. Для управления зависимостями:

    • Образ фиксирует версии всех зависимостей (Python, pytest, библиотеки).
    • Контейнер гарантирует, что каждый тест запускается в идентичном окружении.

Важные нюансы

  • Контейнерный слой — при запуске контейнера поверх образа добавляется тонкий изменяемый слой (container layer), где сохраняются все изменения во время работы контейнера.
  • Удаление контейнера — при удалении контейнера этот изменяемый слой также удаляется, если только данные не сохранены в volumes.
  • Теги образовmyapp:1.0 и myapp:latest могут ссылаться на один образ, но это просто метки (теги).
# Просмотр образов на локальной машине
docker images

# Просмотр всех контейнеров (включая остановленные)
docker ps -a

# Удаление контейнера
docker rm myapp-container

# Удаление образа
docker rmi myapp:1.0

Вывод: Понимание разницы между образом и контейнером — основа эффективной работы с Docker в автоматизации тестирования. Образы обеспечивают воспроизводимость и консистентность окружений, а контейнеры — изоляцию и управление тестовыми процессами. Для QA-инженера это означает возможность создавать стабильные тестовые среды и масштабировать выполнение тестов без "эффекта это работает на моей машине".

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