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-тренды, делятся полезными инструкциями и даже приглашают к себе работать.💥