Олег Букатчук

Введение в Docker

Авг
31

Docker — opensource-проект, позволяющий упаковывать, устанавливать и использовать приложения работающие в изолированной среде. Построенной с помощью пространств имён (namespaces) и групп процессов (cgroups), с одной стороны изолируя процессы друг от друга и с другой стороны не прибегая при этом к таким избыточным средствам как виртуализация или эмуляция.

За время существования проекта появился целый набор вспомогательных утилит и сервисов для удобной работы с Docker-контейнерами: Docker Compose, Docker Swarm, Docker Mashine, Docker Hub, Docker Cloud и Docker Trusted Registry. Теперь давайте обо всём по порядку.

Почему Docker это хорошо?

  • Система написана на языке Go.
  • Контейнеры Docker кроссплатформены. Один и тот же контейнер может использоваться под разными операционными системами.
  • Docker отделяет приложения от инфраструктуры. Описание инфраструктуры в терминах образов Docker помогает держать инфраструктуры в обозримом легко контролируемом состоянии.
  • Выполнение приложений в контейнерах изолирует их от внешнего мира, открывая только те ресурсы, которые явно указаны. Это сводит к минимуму неучтённое внешнее влияние.
  • Автоматическая подготовка окружения и установка приложения. Docker делает это автоматически.

Зачем нужен Docker?

  • Создание сложной гетерогенной системы, включающей большое множество взаимосвязанных подсистем/служб, и сохранение её в обозримом управляемом состоянии.
  • Создание собственной PaaS-инфраструктуры.
  • Предоставление какого-то программного обеспечения по SaaS-модели.
  • Создание изолированных инстанций для тестирования программного обеспечения/конфигураций.
  • Быстрое создание и удаление своих игровых песочниц в ходе изучения нового программного обеспечения (не нужно готовить отдельную виртуальную машину и портить свою рабочую машину, экспериментировать можно в Docker-контейнере).

Прекрасно и заманчиво, не правда ли? Теперь поговорим о вспомагательных продуктах: Docker Compose, Docker Swarm, Docker Mashine, Docker Hub, Docker Cloud и Docker Trusted Registry.

Что такое Docker Compose?

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

С помощью Docker Compose можно управлять жизненным циклом вашего приложения:

  • Запускать, останавливать и перестраивать сервисы.
  • Просматривать статус запущенных сервисов.
  • Запускать необходимую команду на сервисе.
  • Транслировать вывод логов запущенных сервисов и т.д.

Что такое Docker Swarm?

Docker Swarm служит для объединения множества Docker-контейнеров в один виртуальный хост и делает это быстро и элегантно. Docker Swarm предоставляет REST API интерфейс, совместимый с Docker API. Таким образом, все инструменты, которые работают с API Docker’a (клиент Docker’a, Compose, DockerUI, Shipyard, Jenkins и т.д.), смогут работать с Docker Swarm, не подозревая о том, что за ним стоит кластер Docker’ов, а не один физический или виртуальный сервер.

С помощью Docker Swarm можно управлять любым количеством физических или виртуальных машин на которых запущены Docker-контейнеры, как отдельно сконфигурированные, так и под управлением Docker Compose с изолированными средами исполнения процессов. В Docker Swarm реализована автоматическая регулировка нагрузки на серверы и защита от сбоев. Docker Swarm постоянно мониторит кластер и в случае отказа одного из контейнеров, Swarm проводит автоматическую ребалансировку кластера с помощью перемещения контейнеров по машинам.

Работая с Docker Swarm, администратор всегда имеет дело с сервером Swarm, а не с отдельными Docker-контейнерами, которые теперь будут именоваться нодами. На каждой ноде будет запущен агент Swarm, ответственный за принятие команд от сервера. Команды будут выполнены сразу на всех нодах, что позволяет разворачивать очень большие фермы однотипных контейнеров.

Другими словами используя Docker Swarm можно:

  • Запускать, добавлять и удалить ноды в кластере
  • Просматривать статус запущенных нод и т.д.

Что такое Docker Mashine?

Задача Docker Machine — позволить системному администратору быстро развернуть кластер из множества Docker-хостов без необходимости заботиться о добавлении репозиториев, установке Docker и его настройке, все это делается в автоматическом режиме. Разработчикам и пользователям Docker Machine также может пригодиться, так как позволяет в одну команду создать виртуальную машину с минимальным Linux-окружением и Docker внутри.

Что такое Docker Hub?

Docker Hub — это своего рода apt-get репозиторий в эко-системе Docker, только вместо пакетов здесь образы файловой системы, а вместо официальных Debian/Ubuntu-пакетов — облачное хранилище с огромной коллекцией готовых сборок Docker-контейнеров на все случаи жизни.

Что такое Docker Cloud?

У Docker Cloud есть интеграция с различными облачными провайдерами. Он бесплатен для одной ноды. Docker Cloud тесно интегрирован с GitHub всё работает в связке — делаем commit в GitHub, GitHub дёргает Docker Hub, который собирает только, что сделанный commit и после апдейта image он деплоится на бесплатную ноду.

Что такое Docker Trusted Registry?

Dockerk Trusted Registry (DTR), расширяет технологию Docker Hub Registry, которая присутствует уже более года. Docker Hub Registry – это хранилище образов приложений, которые пользователи могут скачивать и запускать. DTR является внутри-корпоративным решением Enterprise уровня и может интегрироваться с такими популярными сервисами, как Active Directory (LDAP) для проведения аутентификации пользователей.