Что такое Docker и для чего он используется?

«Что такое Docker и для чего он используется?» — вопрос из категории CI/CD и DevOps, который задают на 22% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Docker — это платформа для разработки, доставки и запуска приложений в контейнерах. Контейнер — это легковесная, исполняемая единица программного обеспечения, которая инкапсулирует код, зависимости, системные инструменты и настройки, гарантируя одинаковое выполнение в любой среде.

Ключевые преимущества для разработки и тестирования:

  • Консистентность окружений: "Работает на моей машине" больше не проблема. Приложение в контейнере будет одинаково работать на Windows, macOS, Linux и сервере.
  • Изоляция: Приложение и его зависимости изолированы от хостовой ОС и других контейнеров.
  • Легковесность: Контейнеры используют ядро хостовой ОС, что делает их намного быстрее и меньше виртуальных машин.
  • Повторяемость и автоматизация: Контейнеры создаются из описаний (Dockerfile), что позволяет автоматизировать сборку и развертывание в CI/CD.

Базовые компоненты:

  • Dockerfile — текстовый файл с инструкциями по сборке образа.
  • Image (Образ) — шаблон только для чтения, из которого создаются контейнеры.
  • Container (Контейнер) — запущенный экземпляр образа.

Пример простого Dockerfile для Python-приложения:

# Используем официальный базовый образ Python
FROM python:3.11-alpine

# Устанавливаем рабочую директорию внутри контейнера
WORKDIR /app

# Копируем файл зависимостей и устанавливаем их
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# Копируем весь исходный код приложения
COPY . .

# Команда для запуска приложения при старте контейнера
CMD ["python", "app.py"]

Основные команды:

# Собрать образ из Dockerfile в текущей директории
docker build -t my-app:1.0 .

# Запустить контейнер из образа, пробросив порт 4000 хоста на порт 80 контейнера
docker run -p 4000:80 my-app:1.0

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

# Остановить контейнер
docker stop <container_id>

В тестировании Docker используется для быстрого развертывания тестовых сред, изолированного запуска автотестов и компонентного тестирования микросервисов.