Меньше технологий, больше здравого смысла; Меньше жаргона, больше логики.

Строить. Бегать. Судно. Повторение!

Начнем с Почему Docker?

Если вы когда-либо создавали, участвовали в создании, управляли или инвестировали в приложение, инструмент или продукт, которые являются несложными или более сложными с точки зрения выбора языка программирования, пакетов, сторонних библиотек, ОС и среды разработки, ТЫ ЗНАЕШЬ, О ЧЁМ Я РАССКАЖУ!

Представьте себе работу в большой команде инженеров-программистов, разработчиков облачных вычислений и специалистов по данным. Проблемы, на решение которых вы потратите большую часть своего продуктивного времени, будут вызваны «несогласованностью совместной работы над программным обеспечением» в команде.
Для справки: каждый популярный и интенсивно используемый инструмент обновляется не реже одного раза в 3–6 месяцев, а для каждого продукта, даже базового, регулярно требуется не менее 10–20 инструментов/пакетов, каждый со своей версией. обновлено. Теперь только подумайте о возможных комбинациях версий!

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

В тот момент, когда мы начали агрегировать нашу работу (в основном код) и помещать все это вместе в репозиторий продуктов, мы столкнулись с серьезными проблемами с точки зрения задержек из-за несоответствия версий пакетов, ошибок, проблем с зависимостями, неустановленных библиотек и различных сред программирования.

Это привело к потребности (это было требованием) в инструменте, который обеспечил бы простое копирование общей среды, пригодной для использования для разработки всеми членами команды. Это также должно способствовать простой и быстрой установке, выполнению этой комбинированной среды на нескольких машинах при окончательном развертывании в облаке и переносимости.

Добро пожаловать: Docker!

Давайте ответим: что такое Docker?

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

Ой, извини! Я обещал БЕЗ ЖАРГОНА! Позвольте мне упростить -

Docker позволяет вам взять рабочий фрагмент кода с локального/персонального компьютера и обернуть/преобразовать его в файл ( Docker Image ), которым можно поделиться с другими пользователями кода. Другие пользователи кода могут использовать этот файл и докер для создания точно такой же среды ( Docker Container ), где все работает без проблем, на своих машинах, независимо от того, какая ОС, версия пакета/библиотеки у них была ранее. установлен.

Вот и все ? Нет, это еще не все, держись!

Давайте разберем ключевые технические термины и углубимся —

  • Файл Docker
  • Образ Docker
  • Докер-контейнер
  • Центр Docker

Докерфайл —

Файл, содержащий набор инструкций по сборке (например, установка определенной версии пакета), выполнение которых создает образ Docker. Он обеспечивает пошаговую установку всех требований для точного воспроизведения среды, в которой код был создан и без проблем работал.

Образ Docker —

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

Докер-контейнер —

Это стандартная единица, развернутая (запущенная) с помощью образа Docker определенного приложения. Контейнер — это в основном работающая/развернутая версия образа Docker, созданная с использованием Dockerfile, функционирующая независимо и инкапсулированная со всеми требованиями. Этот контейнер может работать в облаке или на локальных компьютерах, которые изначально могли не соответствовать требованиям для запуска применение. Самое главное, что большее количество этих контейнеров можно реплицировать и запускать в зависимости от требований бизнеса, и это очень быстро!

Докер Хаб —

Docker Hub — это реестр (библиотека «контейнерных образов»), обычное место, где разработчики могут делиться своими контейнерами, проектами с открытым исходным кодом с сообществом. Этот репозиторий содержит все версии всех библиотек, пакетов и инструментов, которые вам понадобятся для создания приложений. Именно отсюда Docker извлекает необходимые установочные файлы каждый раз, когда пользователь создает контейнер с использованием существующего образа Docker. Он регулярно обновляется новыми выпускаемыми версиями, хранит старые версии и ведет записи. По сути, это набор контейнеров.

Точно так же, как GitHub — это коллекция репозиториев кода, где мы делимся своим кодом, DockerHub — это репозиторий контейнеров, где мы делимся своими контейнерами

Что отличает Docker от инструментов на основе виртуальной машины от Oracle (VirtualBox) и VMWare Player?

Именно здесь Docker решил насущную проблему и произвел революцию в жизни DevOps, инженерных и продуктовых групп в 2013 году. Хотя и виртуальные машины (ВМ), и Docker обеспечивают виртуализацию, Docker превосходит виртуальные машины во многих отношениях, чтобы понять лучше, давайте визуализировать, как виртуальные машины и Docker функционируют и виртуализируются.

Ваша инфраструктура может быть вашим локальным персональным компьютером, в помещении или в облаке, каждый из которых имеет собственное оборудование, используемое для обработки данных и запуска приложений. Чтобы настроить несколько виртуальных машин в вашей инфраструктуре, наиболее значительными накладными расходами являются установка гостевой ОС (персональная операционная система, которая, очевидно, представляет собой большой файл) для каждой созданной виртуальной машины. Виртуальные машины используют изоляцию процессов на аппаратном уровне. Это добавляет к тому, что виртуальные машины слишком тяжелые и масштабируются только линейно, чем больше вы хотите с точки зрения вывода, тем больше ресурсов необходимо добавлять. Дополнительная неэффективность добавляется из-за того, что виртуальным машинам нужны постоянно выделенные ресурсы, которые могут быть недоиспользованы, если виртуальная машина не используется в течение некоторого времени. Учитывая стоимость облачных экземпляров с точки зрения использования в час, мы хотели бы, чтобы ресурсы распределялись динамически в зависимости от спроса.

С другой стороны, Docker использует изоляцию процессов на уровне ОС, он легкий, масштабируемый и быстрый.

  • Легкий вес — они используют основную операционную систему и не требуют собственной ОС.
  • Масштабируемость. Несколько контейнеров Docker могут работать на одном компьютере с использованием одной и той же операционной системы, а ресурсы будут совместно использоваться и управляться Docker Engine.
  • Быстро и портативно. Поскольку докерам не нужно устанавливать собственную ОС, загрузка контейнера докеров происходит довольно быстро и занимает несколько секунд, в то время как для виртуальной машины требуется несколько минут. Масштабируемость высокопроизводительных систем повышается за счет высокой скорости загрузки.

Но это еще не все, у Docker есть свои недостатки, когда мы рассматриваем безопасность наших приложений —

  1. Поскольку виртуальные машины не используют общую ОС, они надежно изолированы и защищены по сравнению с контейнерами.
  2. Доступ к одной виртуальной машине не влияет на другие виртуальные машины, тогда как доступ к одному контейнеру может дать доступ ко всем из них.

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

Серия «Почему, что, как» — это полный пул контента MLOps/DevOps, который я создаю, чтобы поделиться своим опытом создания продукта ИИ с нуля. Следите за новостями и хорошего дня! Ваше здоровье!

Серия «Почему, что, как» :Докер — Часть 2: Скоро….