📘 Docker
1. Общие сведения
Наименование:
Docker
Описание:
Docker — это платформа с открытым исходным кодом, предназначенная для разработки, доставки и запуска приложений в контейнерах. Контейнеры позволяют упаковать приложение вместе со всей необходимой средой выполнения, обеспечивая стабильность и переносимость между различными системами.
Тип системы:
Платформа виртуализации / Инструмент контейнеризации
Класс: DevOps, CI/CD, Containerization
Разработчик:
Solomon Hykes (основатель), компания Docker Inc.
Год выпуска:
2013 год
Лицензия:
Open Source (Community Edition) + Enterprise Edition (платная)
Сайт: https://www.docker.com
2. Основные компоненты Docker
| Компонент | Описание |
|---|---|
| Docker Engine | Ядро Docker, отвечающее за создание и запуск контейнеров |
| Docker CLI | Интерфейс командной строки для управления Docker |
| Docker Daemon (dockerd) | Фоновый процесс, управляющий образами, контейнерами, томами и сетями |
| Docker Image | Шаблон (read-only) для создания контейнеров |
| Docker Container | Запущенный экземпляр образа |
| Dockerfile | Текстовый файл с инструкциями для сборки образа |
| Docker Compose | Инструмент для определения и запуска многоконтейнерных приложений |
| Docker Hub | Облачный реестр публичных и приватных образов |
3. Основные понятия
| Понятие | Описание |
|---|---|
| Контейнеризация | Виртуализация на уровне операционной системы, позволяющая запускать приложения в изолированных пространствах (контейнерах) |
| Контейнер vs Виртуальная машина | В отличие от VM, контейнер использует ядро хост-системы и не требует отдельной ОС |
| Immutable Infrastructure | Подход, при котором контейнеры создаются заново при каждом обновлении, а не изменяются динамически |
| Orchestration | Управление множеством контейнеров (например, через Kubernetes или Docker Swarm) |
4. Пример использования
Пример Dockerfile:
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "app.py"]
Пример docker-compose.yml:
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/app
Основные команды:
docker build -t my-app .
docker run -p 5000:5000 my-app
docker ps
docker-compose up
5. Преимущества использования Docker
✅ Изоляция окружения: каждое приложение работает в своём контейнере
✅ Единообразие сред: один и тот же контейнер работает локально, на тестовом и боевом сервере
✅ Упрощение деплоя: легко упаковать и отправить приложение в production
✅ Масштабируемость: можно быстро запустить несколько экземпляров сервиса
✅ Быстрый старт/останов: контейнеры стартуют быстрее виртуальных машин
✅ Поддержка микросервисных архитектур: идеален для работы с распределёнными системами
✅ Интеграция с CI/CD: легко внедряется в pipeline автоматизации
6. Использование в проектах
| Этап | Возможности |
|---|---|
| Разработка | Локальное тестирование приложений в условиях, близких к боевой |
| Тестирование | Быстрая проверка приложений в разных версиях зависимостей |
| Деплой | Автоматический запуск приложений после сборки |
| CI/CD | Использование контейнеров для тестирования и развёртывания |
| Продуктовые среды | Масштабируемый запуск приложений в продакшене (с оркестраторами) |
| Обучение | Быстрое разворачивание окружений для обучения или демонстраций |
7. Альтернативы Docker
| Инструмент | Особенности |
|---|---|
| Podman | Совместим с Docker CLI, но без демона и root-привилегий |
| LXC / LXD | Более низкоуровневая контейнеризация, ближе к виртуальным машинам |
| containerd | Низкоуровневый контейнерный движок, используется Docker под капотом |
| Kubernetes (K8s) | Оркестратор контейнеров для масштабных решений |
| Buildah | Для сборки OCI-совместимых образов без Dockerfile |
8. Интеграции
| Интеграция | Описание |
|---|---|
| Kubernetes | Управление контейнерами в кластере |
| Jenkins / GitLab CI / GitHub Actions | Интеграция в pipeline CI/CD |
| Docker Hub / GitLab Container Registry / AWS ECR | Хранение и распространение образов |
| Terraform / Ansible | Автоматизация развёртывания инфраструктуры с Docker |
| Portainer / Rancher | Веб-интерфейсы для управления Docker |