Что такое Docker?

«Что такое Docker?» — вопрос из категории DevOps, который задают на 28% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

Ключевые концепции:

  • Docker Image: Неизменяемый шаблон (слоистая файловая система + метаданные), на основе которого создаются контейнеры. Например, nginx:alpine, python:3.11-slim.
  • Docker Container: Запущенный экземпляр образа. Это изолированный процесс в пользовательском пространстве хоста, разделяющий ядро ОС хоста.
  • Dockerfile: Текстовый файл с инструкциями по сборке образа.
  • Docker Registry (Docker Hub): Хранилище для образов.

Практический пример: Dockerfile для Node.js приложения

# 1. Базовый образ. Определяет ОС и среду выполнения.
FROM node:18-alpine

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

# 3. Копируем файлы зависимостей отдельно для кэширования слоя.
COPY package*.json ./

# 4. Устанавливаем зависимости.
RUN npm ci --only=production

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

# 6. Объявляем порт, который будет слушать приложение.
EXPOSE 3000

# 7. Команда для запуска контейнера.
CMD ["node", "server.js"]

Сборка и запуск:

# Собрать образ с тегом 'my-app'
docker build -t my-app .

# Запустить контейнер из образа, пробросив порт 3000 контейнера на порт 8080 хоста
docker run -p 8080:3000 --name my-app-container my-app
Преимущества перед традиционным деплоем и виртуальными машинами (ВМ): Аспект Виртуальная машина Docker-контейнер
Гостевая ОС Полная ОС поверх гипервизора Разделяет ядро хоста, содержит только приложение и зависимости
Размер ГБ МБ (образы легче на порядки)
Старт Минуты Секунды/миллисекунды
Изоляция Полная (аппаратный уровень) Процессная (на уровне ядра)
Плотность Низкая (десятки ВМ на хост) Высокая (сотни контейнеров)

Docker стандартизирует среду выполнения, решая проблему "у меня работает, а у тебя нет" и является фундаментом для современных CI/CD пайплайнов и оркестраторов, таких как Kubernetes.

Видео-ответы