Что такое контейнер?

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

Ответ

Контейнер — это стандартизированная, легковесная, изолированная единица программного обеспечения, которая упаковывает код, зависимости, библиотеки и конфигурацию в единый образ. Контейнеры работают поверх ядра операционной системы хоста, используя механизмы изоляции Linux (namespaces и cgroups), что обеспечивает их переносимость и эффективность.

Ключевые особенности:

  • Изоляция: Каждый контейнер имеет своё изолированное пространство процессов, сетевой стек и файловую систему (через namespaces).
  • Ограничение ресурсов: Cgroups (control groups) позволяют ограничивать и распределять ресурсы (CPU, память, I/O) между контейнерами.
  • Портативность: Образ контейнера содержит всё необходимое для запуска приложения и может работать одинаково на любой системе, где есть совместимый runtime (Docker, containerd, Podman).
  • Эффективность: В отличие от виртуальных машин, контейнеры не эмулируют полноценную ОС, что минимизирует накладные расходы и ускоряет запуск.

Пример Dockerfile:

# Используем минимальный базовый образ
FROM alpine:3.18
# Устанавливаем зависимости
RUN apk add --no-cache python3 py3-pip
# Копируем код приложения
COPY app.py requirements.txt /app/
WORKDIR /app
RUN pip3 install -r requirements.txt
# Определяем команду для запуска
CMD ["python3", "app.py"]

Этот Dockerfile описывает образ. Команда docker build -t my-app . создаст из него переносимый образ, который можно запустить командой docker run my-app.