Ответ
Контейнер — это стандартизированная, легковесная, изолированная единица программного обеспечения, которая упаковывает код, зависимости, библиотеки и конфигурацию в единый образ. Контейнеры работают поверх ядра операционной системы хоста, используя механизмы изоляции 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.