Docker
Введение
Docker – открытая платформа для контейнеризации приложений, позволяющая упаковывать приложение с его зависимостями в стандартизованный контейнер, который одинаково работает в любой среде: на ноутбуке разработчика, тестовом сервере и production-инфраструктуре. Созданная компанией dotCloud (впоследствии переименованной в Docker Inc.) и представленная публично в марте 2013 года, Docker радикально упростила контейнеризацию и сделала её доступной для широкого круга разработчиков.
Docker не изобрёл контейнеры – технология восходит к Unix chroot (1979), FreeBSD Jail, OpenVZ, LXC. Но Docker предложил удобный CLI, декларативный формат Dockerfile, общедоступный реестр образов Docker Hub и строгую изоляцию приложений, что обеспечило массовое распространение.
История и контекст
В марте 2013 года на конференции PyCon Соломон Хайкс представил Docker как внутренний инструмент компании dotCloud. Изначально Docker использовал LXC (Linux Containers), но начиная с версии 0.9 перешёл на собственную библиотеку libcontainer (Go). В 2015 году Docker инициировал создание Open Container Initiative (OCI) для стандартизации форматов контейнерных образов и runtime.
К 2016 году Docker получил широчайшее распространение. Однако в «войне оркестраторов» Docker Swarm проиграл Kubernetes. В 2019 году Mirantis приобрела Docker Enterprise. Сегодня Docker Desktop (для разработчиков) и Docker Hub (реестр образов) остаются ключевыми инструментами экосистемы, хотя container runtime в production всё чаще – containerd или CRI-O напрямую.
Как это работает
Основные компоненты Docker:
- Docker Engine – daemon-процесс, управляющий контейнерами на хосте.
- Docker CLI – командная строка для управления образами и контейнерами.
- Dockerfile – текстовый файл с инструкциями сборки образа (FROM, RUN, COPY, CMD).
- Docker Image – неизменяемый многослойный образ файловой системы с приложением и зависимостями.
- Docker Container – запущенный экземпляр образа с изолированным процессом.
- Docker Registry – хранилище образов (Docker Hub, GitLab Registry, Harbor).
Механизм изоляции: namespaces (изоляция PID, сети, файловой системы, пользователей) и cgroups (ограничение ресурсов CPU, RAM). Слоистая файловая система (union filesystem) позволяет слоям образа разделяться между контейнерами, экономя место.
Где применяется
- Разработка – унификация окружения, устранение проблем «у меня работает».
- CI/CD – контейнеры обеспечивают воспроизводимые среды сборки в GitHub Actions, GitLab CI, Jenkins.
- Микросервисы – каждый сервис в отдельном контейнере с независимым жизненным циклом.
- ML и Data Science – упаковка моделей, Jupyter-окружений и пайплайнов данных.
- Локальное тестирование сервисов – docker-compose для запуска многоконтейнерных приложений локально.
Преимущества и ограничения
Преимущества: стандартизированный формат упаковки приложений; воспроизводимость среды; огромный реестр готовых образов на Docker Hub; простая интеграция с CI/CD; легковесность по сравнению с VM.
Ограничения: менее строгая изоляция, чем у VM; контейнеры Linux не запускаются нативно на Windows; для production-оркестрации требуется Kubernetes или Swarm; управление хранилищем для stateful-приложений усложнено.
Связь с другими понятиями
Docker является основным инструментом контейнеризации, а Kubernetes – инструментом оркестрации Docker-контейнеров в кластерах. Docker Compose – инструмент для локального запуска многоконтейнерных приложений, описанных в YAML. В экосистеме MLOps Docker-образы стандартизируют среды обучения и инференса ML-моделей. CI/CD-платформы используют Docker для создания воспроизводимых сред сборки и тестирования.