Найти тему
Timeweb Cloud

Docker: обзор контейнеризации

Оглавление

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

📜 Читайте также: Защита контейнеризации: обеспечиваем безопасность Docker и Kubernetes

Немного истории

Чтобы понять, как пришли к созданию докера, обратимся к истории. Потребность в изоляции процессов от операционной системы появилась достаточно давно. И первые попытки решить проблему разделения ресурсов были предприняты в 1970 году. Они не увенчались успехом. Но через 20 лет произошел прогресс в развитии данной технологии благодаря разработке продукта FreeBSD Jail. Мы не будем детализировать это, однако у них получилось изолировать процессы, которые запускались внутри одной операционной системы и взаимодействовали с ней только на уровне потребления системных ресурсов.

После этого в мире разработки появился Linux VServer и OpenVZ. Последний так и не добился успеха по причине того, что для работы OpenVZ была необходимость в определенной версии ядра системы. Постепенно на рынок выходили новые платформы, и в 2013 компания Docker выпустила продукт контейнеризации приложений под этим же названием.

Все про Докер

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

Ниже мы рассмотрим особенности и характерные черты платформы, о которых лучше узнать до начала работы с Докер.

  • Требуется минимум системных ресурсов, поскольку вес контейнеров измеряется несколькими мегабайтами. В образ включается приложение и минимальная среда для его запуска. Контейнеры используют ядро хоста, изолируя программу на уровне процесса.
  • Независимость контейнеров друг от друга. В случае, если один контейнер перестанет работать, само приложение продолжит работать. Это обусловлено принципом, что один контейнер - это один процесс.
  • С контейнером легко взаимодействовать. При необходимости он легко и быстро останавливается, перезапускается и также быстро удаляется. Но насчет последнего учтите что при удалении контейнера уничтожается вся информация. Чтобы ее не потерять, нужно создавать резервные копии.
  • Безопасность контейнеров. На этот вопрос нужно смотреть с двух сторон. Первая - контейнеры изолированы друг от друга, тем самым процессы не пересекаются, и любой код запускается без вреда для операционной системы. Вторая сторона - сетевая безопасность, поскольку для работы контейнеров задействованы ресурсы операционной системы. Рекомендуем принять меры по обеспечению сетевой безопасности.
  • Внесение изменений в отдельные компоненты не затрагивает систему в целом. Можно легко переходить с монолитной архитектуры на микросервисы, что положительно сказывается на скорости разработки функционала приложений и сервисов.

Почему стоит использовать Docker

Данную технологию используют в разработке как независимые специалисты, так и крупные IT-компании. Положительные моменты отмечают и те, и другие. Рассмотрим их более подробно:

  • Запуск контейнеров в любой среде. Это означает, что вы можете выбрать обычную машину или отдать предпочтение облаку.
  • Используя шаблоны для создания контейнеров, можно создать бесконечное число образов.
  • В образах зашит нужный функционал, который задействуется для запуска приложений и облегчает их перенос между средами разработки. Это гарантирует, что приложение будет работать как в среде разработке, так и у пользователей.
  • Экономия временных ресурсов и ускорение процесса развертывания приложений.
  • Можно использовать любой язык программирования.
  • Обновление образов осуществляется без остановки работы приложения.
  • Доступно масштабирование проекта путем добавления новых контейнеров.
  • Использование функций администрирования упрощает перенос контейнеров между хостами, запуск неограниченного числа контейнеров одновременно, обновление образов и множество других действий, которые связаны с работой контейнеров.

Элементы Докера

В этом блоке вы узнаете как устроена платформа и с какими файлами/утилитами придется иметь дело.

1. Текстовый файл с последовательной инструкцией по созданию контейнера:

Dockerfile

2. Действия с контейнером (запуск, создание, удаление):

служба Daemon

3. Управление демоном:

утилита Client

4. Образ, с помощью которого можно развернуть множество экземпляров контейнера:

Image

5. Уже развернутое приложение:

Container

6. Чтобы собирать, исполнять и тестировать контейнеры на ОС Windows и macOS, используйте приложение:

Docker Desktop

7. Для отслеживания версий образов, а также для создания приватных хранилищ предназначен локальный репозиторий:

Registry

8. Для интеграции с GitHub и BitBucket существует публичный репозиторий:

Docker Hub

9. Чтобы настроить хранение данных используйте том:

Docker volumes

Понятие образа в Докер

Если вернуться в начало, то можно заметить, как мы несколько раз упоминали образ. Это неслучайно, поскольку образ (Image) это ключевой элемент в данной технологии. В образ зашиты все зависимости и важные процессы, которые помогают запускать и обеспечивать работу приложения. Их можно создавать самостоятельно или использовать готовые, если предстоит решение типовых задач. Скачать готовые образы можно с Docker Hub.

Сам образ состоит из слоев, которые объединены между собой и представляют результат всех промежуточных изменений. Именно слои помогают максимально эффективно использовать файловую систему. Данные слои доступны исключительно для чтения, а также для удаления. Если удалить какой-либо слой, то вы вернетесь к прошлым версиям образа. Если сравнить образ с контейнером, то у второго есть внешний слой, куда можно записать данные. Но при удалении контейнера он удаляется целиком, и никакой информации не остается.

Также в образ упакован Manifest. Это файл с множеством данных: ссылки на слои, их размеры, хеш, а также данные о платформе, на которой должны запустить контейнер.

Как создать образ

Выше мы говорили про текстовый файл - Dockerfile. Можно создать образ с его помощью или в интерактивном режиме.

Рассмотрим два способа.

Первый. Создание образа в интерактивном режиме

Запустите контейнерную оболочку

введите инструкция docker run

Второй способ

1. Разместите текстовый файл в каталоге (директории), указав путь. Выполните команду:

mkdir -p

2. Затем перейдите в ту директорию и создайте файл (устройство Dockerfile подробно описано в технической документации Docker).

3. Запустите сборку инструкции:

docker build -t name/assembly:v1

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

4. Если сборка прошла успешна, на экране появится соответсвующее сообщение:

Successfully built

5. Для просмотра образов введите:

docker images

6. Чтобы создавать контейнеры следуйте инструкции:

docker run -d -p

7. Просмотр контейнеров:

docker ps -a

8. Запуск контейнеров:

docker start

9. Остановка контейнеров:

docker stop

10. Команда для удаления неиспользуемых файлов:

.dockerignore

Чтобы успешно управлять сложными проектами, предлагаем познакомиться с несколькими сервисами, которые были разработаны специально для этих целей.

Дополнительные сервисы

  • Пакетный менеджер Docker Compose был разработан создателями платформы контейнеризации. Он позволяет произвести централизованный запуск группы сервисов. Преимущество данного сервиса заключается в использовании минимального числа инструкций при создании и уничтожении среды. Рекомендуем использовать этот пакетный менеджер в работе со сложными проектами.

Документировать и конфигурировать группу сервисов можно при помощи файла YAML. Для развертывания сервисов, создания контейнеров воспользуйтесь инструкцией docker‑compose up.

  • Yandex Container Registry - этот сервис от Яндекса. Сокращенное название - YCR. Возможности сервиса YCR: автоматическая репликация данных, переход на архитектуру микросервисов, возможна интеграция в облачной среде, создание контейнеров для семейств ОС Windows и Linux, возможен запуск на виртуальной инфраструктуре от Яндекса. Для управления можно использовать консоль или командную строку. Помимо этого, сервис совместим с Kubernetes. Сейчас мы поговорим про оркестраторы.

Решения Оркестрации

Чем больше число контейнеров, тем сложнее становится управление ими. С этой проблемой столкнулось большинство разработчиков. А затем последовали функциональные решения, о которых мы рассказали ниже.

  • Оркестратор Docker Swarm. Как можно догадаться, это решение предложила команда Docker. Возможности этого оркестратора позволяют закрыть базовые потребности разработчиков, поскольку позволяют максимально быстро создать кластер и организованное контейнерное пространство, которое состоит из множества единиц. Однако, эту утилиту кластеризации не рекомендуют использовать в больших проектах.
  • Если Docker Swarm вам не подходит, его можно заменить опенсонсорной платформой Kubernetes. Он реализует те же функции, включая централизованную группировку контейнеров, балансировку нагрузки и активацию тысяч приложений. Предназначен для работы с операционными системами семейства Linux. Темная сторона этой платформы - долгая и сложная настройка программного обеспечения.

Заключение

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

Кстати, в официальном канале Timeweb Cloud собрали комьюнити из специалистов, которые говорят про IT-тренды, делятся полезными инструкциями и даже приглашают к себе работать.💥