Docker

Docker – это программная платформа для быстрой разработки, тестирования и развертывания приложений. Docker упаковывает ПО в стандартизованные блоки, которые называются контейнерами. Каждый контейнер включает все необходимое для работы приложения: библиотеки, системные инструменты, код и среду исполнения.

Платформа Docker позволяет автоматизировать почти все монотонные и повторяющиеся задачи. Поскольку в Docker происходит виртуализация на уровне операционной системы, при запуске экземпляров контейнеров время загрузки отсутствует.

Docker позволяет «упаковать» приложение со всем его окружением и зависимостями в контейнер, который может быть развёрнут на любой Linux-системе с поддержкой контрольных групп в ядре, а также предоставляет набор команд для управления этими контейнерами. Изначально использовал возможности LXC, с 2015 года начал использовать собственную библиотеку, абстрагирующую виртуализационные возможности ядра Linux — libcontainer. С появлением Open Container Initiative начался переход от монолитной к модульной архитектуре.

Программное обеспечение функционирует в среде Linux, существуют сборки только для платформ x86-64 и ARM. Начиная с версии 1.6 (апрель 2015 года) возможно использование в операционных системах семейства Windows.

В отличие от виртуальных машин, таких как VMware, которые могут взаимодействовать с оборудованием хоста (например, адаптером Ethernet для создания большего количества виртуальных адаптеров), контейнеры Docker работают в изолированной среде поверх ОС хоста.

Для экономии пространства хранения проект использует файловую систему Aufs с поддержкой технологии каскадно-объединённого монтирования: контейнеры используют образ базовой операционной системы, а изменения записываются в отдельную область. Также поддерживается размещение контейнеров в файловой системе Btrfs с включённым режимом копирования при записи.

В состав программных средств входит демон — сервер контейнеров (запускается командой docker-d), клиентские средства, позволяющие из интерфейса командной строки управлять образами и контейнерами, а также API, позволяющий в стиле REST управлять контейнерами программно.

Демон обеспечивает полную изоляцию запускаемых на узле контейнеров на уровне файловой системы (у каждого из контейнеров собственная корневая файловая система), на уровне процессов (процессы имеют доступ только к собственной файловой системе контейнера, а ресурсы разделены средствами libcontainer), на уровне сети (каждый контейнер имеет доступ только к привязанному к нему сетевому пространству имён и соответствующим виртуальным сетевым интерфейсам).

Набор клиентских средств позволяет запускать процессы в новых контейнерах (docker run), останавливать и запускать контейнеры (docker stop и docker start), приостанавливать и возобновлять процессы в контейнерах (docker pause и docker unpause). Серия команд позволяет осуществлять мониторинг запущенных процессов (docker ps по аналогии с ps в Unix-системах, docker top по аналогии с top и другие). Новые образы возможно создавать из специального сценарного файла (docker build, файл сценария носит название Dockerfile), возможно записать все изменения, сделанные в контейнере, в новый образ (docker commit). Все команды могут работать как с docker-демоном локальной системы, так и с любым сервером Docker, доступным по сети. Кроме того, в интерфейсе командной строки встроены возможности по взаимодействию с публичным репозиторием Docker Hub, в котором размещены предварительно собранные образы приложений, например, команда docker search позволяет осуществить поиск среди размещённых в нём образов, образы можно скачивать в локальную систему (docker pull), возможно также отправить локально собранные образы в Docker Hub (docker push).

Также Docker имеет пакетный менеджер Docker Compose, позволяющий описывать и запускать многоконтейнерные приложения; конфигурационные файлы для него описываются на языке YAML. Для мониторинга Docker может быть использован Prometheus.

Преимущества Docker:
1. Портативность: Docker контейнеры могут быть запущены на любой операционной системе и платформе, устанавливающей Docker, без необходимости изменения кода или настроек контейнера.
2. Изоляция: Контейнеры Docker разделяют ресурсы с хост-системой, обеспечивая изоляцию и безопасность. Каждый контейнер работает как отдельный процесс, изолированный от других процессов на хост-системе.
3. Быстрое развертывание: Docker контейнеры могут быть созданы, развернуты и запущены в считанные секунды. Это позволяет практически мгновенно создавать и масштабировать приложения.
4. Управление ресурсами: Docker предоставляет возможность контролировать ресурсы, которые используют контейнеры. Это позволяет легко управлять доступными ресурсами и избежать проблем с производительностью.
5. Легкость масштабирования: Docker контейнеры могут быть масштабированы вертикально (увеличение ресурсов для одного контейнера) и горизонтально (увеличение количества контейнеров), обеспечивая гибкость в масштабировании приложений.
Недостатки Docker:
1. Сложность настройки: Docker требует настройки и наличия знаний о его функциональности, чтобы использовать его наиболее эффективно. Новичкам может быть сложно справиться с инструментами и архитектурой Docker.
2. Чувствительность к хост-системе: Docker контейнеры работают на хост-системе, и если есть проблемы с хост-системой, это может повлиять на работу контейнеров.
3. Небольшая производительность некоторых приложений: В некоторых случаях производительность приложений в контейнерах Docker может быть ниже по сравнению с их запуском на физических или виртуальных машинах. Это обусловлено некоторыми накладными расходами на виртуализацию Docker.
4. Управление версиями: Управление версиями Docker обладает своими сложностями, особенно при наличии множества контейнеров и образов. Неправильное управление версиями может привести к конфликтам и проблемам совместимости.
5. Чувствительность к безопасности: В связи с тем, что Docker контейнеры разделяют ресурсы с хост-системой, возможны проблемы безопасности. Неправильная настройка контейнеров или уязвимости хост-системы могут привести к компрометации контейнеров.

Обсуждение закрыто.