Гайды
Docker: контейнеризация приложений
Образ и контейнер, Dockerfile, сборка и запуск, .dockerignore, кэш слоёв и базовая безопасность.
~10 мин чтения
Docker: контейнеризация приложений
Docker упаковывает приложение и зависимости в образ (immutable слои), запускаемый как контейнер на общем ядре ОС (Linux namespaces/cgroups). Этот гайд — основы для разработчика; Compose — Docker Compose, multi-stage — многостадийные образы. Сеть и тома — отдельный гайд; справка Docker — networking и volumes.
1. Образ и контейнер
- Image — шаблон (слои FS + метаданные).
- Container — запущенный экземпляр с изолированным FS/сетью/PID (в пределах модели Docker).
2. Dockerfile ключевые инструкции
| Инструкция | Назначение |
|---|---|
FROM | Базовый образ |
WORKDIR | Рабочий каталог |
COPY / ADD | Файлы в образ |
RUN | Выполнить при сборке |
ENV | Переменные окружения |
EXPOSE | Документация порта (не открывает само) |
USER | Не root в проде |
CMD / ENTRYPOINT | Команда по умолчанию при запуске |
3. Сборка и запуск
docker build -t myapp:1.0 .
docker run --rm -p 8000:8000 -e DEBUG=0 myapp:1.0
-p host:container, -e, -v для монтирования томов.
4. .dockerignore
Исключите .git, __pycache__, node_modules, .venv — ускорение сборки и меньше утечек в слои.
5. Кэш слоёв
Чаще меняющиеся файлы копируйте после установки зависимостей:
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
6. Безопасность
- Сканирование образов (Trivy, Grype).
- Минимальные базы (distroless, alpine с оговорками по libc).
- Секреты через runtime (
--secret, orchestrator secrets), неARGв финальном слое.
7. Healthcheck и ресурсы
HEALTHCHECK --interval=30s --timeout=3s CMD curl -f http://127.0.0.1:8000/health || exit 1
В docker run / Compose задавайте --memory / cpus для предсказуемости на dev-машине; в k8s — resources в манифесте.
8. Чек-лист
- Версия тега образа не только
latest. - Healthcheck в Dockerfile или оркестраторе.
- Логи в stdout/stderr.
- Платформа (
--platform) при кросс-сборке. -
docker compose configв CI для валидации YAML.
Дальше: Compose · Multi-stage · тег Docker