Основные концепции Docker
Что такое технология контейнеризации
Контейнеры используют общее ядро хоста, что делает их легковесными, изолированными и эффективными — в отличие от виртуальных машин, которым требуется полноценная операционная система. На следующей схеме показана базовая архитектура контейнеров Docker:
- Верхний слой состоит из нескольких контейнеров (App A-F), каждый контейнер независимо запускает приложение.
- Средний слой — это Docker, который отвечает за управление этими контейнерами.
- Нижний слой — это операционная система хоста (Host OS) и инфраструктура, обеспечивающие аппаратную и системную поддержку контейнеров.

1. Болевые точки традиционного развертывания приложений
При традиционном развертывании приложений мы часто сталкиваемся со следующими проблемами:
- Несогласованность сред: приложения нормально работают в среде разработки, но сталкиваются с проблемами в среде тестирования или эксплуатации
- Сложность управления зависимостями: разным приложениям требуются разные версии сред выполнения, библиотечных файлов и т. д.
- Низкая утилизация ресурсов: традиционные виртуальные машины требуют полноценной операционной системы, потребляя большое количество ресурсов.
- Сложное развёртывание: Требует ручной настройки среды и установки зависимостей, что чревато ошибками.
2. Решения с использованием технологии контейнеризации
Технология контейнеризации решает эти проблемы следующими способами:
- Стандартизация среды: Упакуйте приложение вместе с его зависимостями, чтобы обеспечить согласованную работу в любой среде
- Легковесность: Контейнеры совместно используют ядро операционной системы хоста, что делает их легче виртуальных машин.
- Быстрое развёртывание: Контейнеры могут запускаться за секунды, значительно повышая эффективность развёртывания.
- Переносимость: Соберите один раз — запускайте где угодно
3. Основные концепции контейнеризации
Контейнеризация следует философии «неизменяемой инфраструктуры»:
- Приложения и среды упаковываются в неизменяемые образы.
- Используйте один и тот же образ для каждого развёртывания
- Конфигурация внедряется через переменные окружения или файлы конфигурации.
- Исправляйте проблемы, пересобирая образ, а не изменяя работающие контейнеры
Основные концепции Docker
1. Образ
определение: Образ — это шаблон, доступный только для чтения, который содержит всё необходимое для запуска приложения: код, среду выполнения, файлы библиотек, переменные среды и файлы конфигурации.
Особенности:
- Слоистое хранилище: Образ состоит из нескольких слоёв, каждый из которых представляет изменение.
- Только для чтения: Сам образ доступен только для чтения, и его нельзя изменять напрямую.
- Повторно используемый: Один и тот же образ можно использовать для создания нескольких контейнеров
- Управление версиями: Управление версиями выполняется с помощью тегов.
Аналогия: Образ похож на установщик или шаблон; он определяет всё необходимое для запуска приложения, но не может запускаться напрямую сам по себе.
2. Контейнер
определение: Контейнер — это запущенный экземпляр образа, легковесная переносимая среда выполнения.
Особенности:
- Изоляция: Каждый контейнер имеет собственную файловую систему, сеть и пространство процессов.
- Временные: Контейнеры можно создавать, запускать, останавливать и удалять.
- Записываемый слой: Контейнер добавляет записываемый слой поверх образа.
- На уровне процессов: Обычно внутри контейнера выполняется один основной процесс
Аналогия: Если образ — это класс, то контейнер — это экземпляр объекта. Один образ может создать несколько контейнеров, так же как один класс может создать несколько объектов.
3. Репозиторий
определение: Репозиторий — это место для хранения и распространения образов, и он может содержать несколько версий образа.
Категория:
- Публичный репозиторий: Например, Docker Hub, который может использовать любой желающий.
- Приватный репозиторий: Создаётся внутри предприятия для хранения приватных образов.
- Официальный репозиторий: Репозитории образов, поддерживаемые поставщиком программного обеспечения
Реестр против репозитория:
- Реестр: Серверы реестров, например Docker Hub
- Репозиторий: Конкретные репозитории образов, например nginx, mysql.
Различия между Docker и виртуальными машинами
1. Сравнение архитектуры
| Особенности | Виртуальной машины | Контейнер Docker |
|---|---|---|
| Уровень изоляции | Аппаратная виртуализация | Виртуализация на уровне операционной системы |
| Операционная система | Каждая виртуальная машина требует полной ОС | Использует общее ядро хост-ОС |
| Использование ресурсов | Тяжеловесный, потребляет больше ресурсов | Легковесный, низкое потребление ресурсов |
| Время запуска | Измеряется минутами | Измеряется секундами |
| Накладные расходы на производительность | Относительно большие | Производительность, близкая к нативной |
| Размер образа | Уровень ГБ | Уровень МБ |
2. Архитектура контейнеров и виртуальных машин

3. Сравнение сценариев использования
Сценарии применения VM:
- Требуется полностью изолированная среда
- Запуск приложений разных операционных систем
- Требуется изоляция безопасности на аппаратном уровне
Сценарии, подходящие для контейнеров Docker:
- Архитектура микросервисов
- Конвейер CI/CD
- Быстрое развертывание и масштабирование приложений
- Стандартизация среды разработки
Преимущества Docker и сценарии применения.
Основные преимущества
1. Согласованность среды
- Решение проблем: проблема «работает на моей машине»
- Подход к реализации: приложение и среда упаковываются вместе
- Ценность: снижает количество ошибок, связанных со средой, и проблем при развертывании
2. Легковесность и эффективность
- Использование ресурсов: потребляет меньше ресурсов, чем виртуальные машины
- Скорость запуска: время запуска — секунды
- Плотность: Одна машина может запускать больше экземпляров приложений
3. Переносимость
- Кроссплатформенность: Поддержка Linux, Windows и macOS
- Облачная нативность: Миграция между различными облачными платформами
- Гибридная среда: Разрабатывайте локально, развёртывайте в облаке
4. Контроль версий и откат
- Версия образа: Каждой версии соответствует свой образ
- Быстрый откат: Быстро откатиться к предыдущей версии при возникновении проблем
- A/B-тестирование: Одновременный запуск разных версий для сравнения
5. Масштабируемость
- Горизонтальное масштабирование: Быстро создавать больше экземпляров контейнеров
- Эластичное масштабирование: Автоматически регулирует количество контейнеров в зависимости от нагрузки
- Микросервисы: разделение сервисов и независимое развертывание
Типичные сценарии применения
1. Архитектура микросервисов
- Декомпозиция сервисов: каждый микросервис независимо контейнеризуется
- Независимое развертывание: сервисы можно независимо обновлять и масштабировать
- Свобода технологического стека: разные сервисы могут использовать разные технологии
2. CI/CD конвейер
- Среда сборки: стандартизированная среда сборки
- Изоляция тестов: каждый тест выполняется в независимом контейнере
- Согласованность развертывания: один и тот же образ развертывается в разных средах
3. Стандартизация среды разработки
- Быстрая настройка: новые участники быстро получают среду разработки
- Синхронизация версий: команда использует одну и ту же среду разработки
- Управление зависимостями: избегает конфликтов локальной среды
4. Модернизация приложений
- Устаревшая система: контейнеризация традиционных приложений
- Миграция в облако: помогает переносить приложения на облачные платформы
- Гибридное облако: переносимость между различными облачными средами
Компоненты архитектуры Docker
Общая схема архитектуры

Клиент Docker
Особенности:
- Основные способы взаимодействия пользователей с Docker.
- Получает пользовательские команды и отправляет их в Docker Daemon.
- Может взаимодействовать с удалённым Docker Daemon.
Основные команды:
docker run- Запустить контейнерdocker build- Собрать образdocker pull- Загрузить образdocker ps- Просмотреть состояние контейнера
Демон Docker
Особенности:
- Основной служебный процесс Docker
- Управляет образами, контейнерами, сетями и томами хранилища
- Прослушивает и обрабатывает запросы к Docker API.
Основные обязанности:
- Управление образами (сборка, хранение, распространение)
- Управление жизненным циклом контейнеров
- Управление сетями
- Управление томами данных
- Взаимодействие с Registry
Docker Engine
Composition:
- Docker Client + Docker Daemon + REST API
- Это основной компонент Docker
Рабочий процесс:
- Клиент отправляет команды демону
- Демон разбирает и выполняет команды
- Взаимодействует с Registry (при необходимости).
- Управляет локальными образами и контейнерами
- Возвращает результаты клиенту
Docker Registry
Функция:
- Хранит и распространяет образы Docker
- Обеспечивает управление версиями образов
- Поддерживает публичные и частные реестры
Возможности Docker Hub:
- Официальный публичный реестр
- Содержит большое количество предварительно собранных образов
- Поддерживает функцию автоматической сборки
- Бесплатные и платные сервисы
История развития Docker
Ключевые вехи
- 2013: выпуск Docker с открытым исходным кодом
- 2014: Выпущен Docker 1.0, доступный для промышленного использования.
- 2016: Выпущен Docker Swarm со встроенными возможностями оркестрации.
- 2017: Docker разделён на CE (Community Edition) и EE (Enterprise Edition).
- 2019: Выпущен Docker Desktop, улучшающий опыт разработчика.
Развитие экосистемы
- Оркестрация контейнеров: Kubernetes становится стандартом де-факто.
- Среда выполнения контейнеров: containerd, CRI-O и другие альтернативы
- Формат образов: Стандартная спецификация OCI
- Инструменты безопасности: Инструменты сканирования и мониторинга безопасности контейнеров