Разработка современных приложений сильно отличается от программирования в прошлом. Раньше большинство инструментов и технологий не использовались при создании разнообразных виртуальных проектов. Сейчас разработчики нередко задействуют в процессе своей работы так называемые контейнеры. Так называются своеобразные системные образы, позволяющие запускать программный код в заранее сформированной и предсказуемой среде.
В качестве основного стандарта для формирования, запуска, а также обслуживания контейнеров выступает платформа Docker. Далее с ней предстоит познакомиться поближе. Необходимо выяснить, что это программное обеспечение собой представляет, какие особенности предусматривает. Также предстоит ознакомиться с азами работы с Docker, сервисами для работы с контейнерами и устройством Docker-образа. Эта информация пригодится как начинающим разработчикам, так и уже более опытным программистам.
История появления и развития
Docker – проект, который был начат в 2008 году. Он появился в качестве собственной внутренней разработки компании dotCloud во главе с Соломоном Хайксом. Целью данного проекта стало формирование публичной PaaS-платформы, которая поддерживала бы различные языки программирования. Вместе с Хайксом в первоначальной разработке Докеров значительный вклад внесли инженеры dotCloud Андреа Лудзарди, а также Франсуа-Ксавье Бурле.
К марту 2013 года Докер был опубликован под лицензией Apache 2.0, а в октябре компания dotCloud была переименована в Docker. Это связано с тем, что основной деятельностью организации стала работа над приложением для контейнеров.
В октябре 2013 года состоялся релиз Havana тиражируемой IaaS-платформы OpenStack которая стала поддерживать Докер (в качестве драйвера для OpenStack Nova). С ноября этого же года рассматриваемое приложение стало частично поддерживаться Linux (в сборке Red Hat Enterprise). Его полная версия появилась в 20-ой версии Fedora. В декабре развертка Docker-контейнеров стала возможна в среде Google Compute Engine.
С 2014 года производятся работы, связанные с внедрением Докера в среду управления фреймворка распределенных приложений Hadoop. А с 2017-го года выпускается редакция изучаемого продукта для компаний. Это – платная версия Docker, которая обойдется в сумму до 2000 долларов. Стоимость дистрибутива зависит от доступных в приложении функций.
На данный момент контейнер функционирует на системах Linux, в которых поддерживается изоляция именного пространства, а также crgroups, но это не мешает устанавливать инструмент на других ОС. Для этого придется воспользоваться специализированным программным обеспечением вроде Kinematic или Docker Machine.
Контейнеры – это…
Чтобы понять, для чего нужен Docker, требуется знать его определение. А еще – разобраться с термином «контейнер».
Контейнеры – это некий способ стандартизации развертки приложения и его отделения от общей инфраструктуры. Так можно охарактеризовать изолирование программного обеспечения для безопасного функционирования и тестирования. Экземпляр приложения запустится в изолированной среде, которая никак не отражается на функционировании основной операционной системе.
Разработчики за счет контейнеров могут не задумываться над:
- окружением, в котором будет работать программное обеспечение;
- наличием необходимого спектра настроек и параметров;
- зависимостями.
Достаточно просто создать приложение, упаковать все зависимости и настройки в единый образ и запустить его. Получившийся элемент может быть успешно запущен на других системах. Беспокоиться за работоспособность исходного приложения не придется.
Docker – это…
Размышляя над тем, что такое докер-контейнер, можно столкнуться с несколькими определениями термина:
- Докер – это программное обеспечение для автоматизации развертки и управления программами в средах с поддержкой контейнеризации. Можно назвать эту технологию контейнеризатором приложений.
- Docker – платформа и технология, используемая для контейнеризации. С ее помощью получится создавать контейнеры, а затем управлять ими для развертывания и доставки исходного кода (программы) на сервер.
- Docker – платформа, используемая для разработки, доставки и запуска контейнеров программного обеспечения.
Все это – правильные определения. С помощью Докера можно создавать контейнеры, автоматизировать их развертку и запуск, а также управлять жизненным циклом. При помощи рассматриваемой технологии получится запустить огромное количество контейнеров в пределах одной и той же хост-машины.
Контейнеризация напоминает виртуализацию, но отличается от нее. Виртуализация будет отвечать за запуск полноценного хоста на гипервизоре со своим собственным виртуальным оборудованием, а также операционной системой. Также допускается запуск одной ОС внутри другой. При контейнеризации процессы запускаются из ядра основной операционной системы, виртуализация оборудования здесь отсутствует. Это значит, что проект, который был контейнеризирован, работает только в той же системе, что и основная. Контейнеры избегают виртуализации оборудования, за счет чего осуществляется меньшее потребление ими ресурсов хост-машины.
Ключевые особенности контейнеров
Изучаемая технология предусматривает ряд ключевых особенностей. Знать о них необходимо всем, кто планирует заниматься контейнеризацией. Это связано с тем, что существуют разнообразные приложения для создания контейнеров, но многие разработчики предпочитают Docker. Но и контейнеризация предусматривает определенные нюансы. Она не всегда целесообразна, поэтому рекомендуется запомнить следующие особенности контейнеров:
- Относительно небольшой жизненный цикл. Любо контейнер может быть остановлен, уничтожен, перезапущен – все по желанию пользователя или по мере необходимости. Данные, содержащиеся в контейнере, тоже пропадут. Это повлекло за собой формирование одного важного правила проектирования программ – не хранить в контейнерах важную информацию. Соответствующий подход называется Stateless.
- Объем контейнеров измеряется в мегабайтах, потому что в них упаковывают лишь те процессы и зависимости, которые нужны для реализации программы. Это позволяет значительно экономить дисковое пространство.
- Один контейнер – это один запущенный процесс. Если отключить отдельный такой элемент для отладки или обновления, приложение все равно будет исправно функционировать.
- За счет контейнеризации удается автоматизировать развертку приложений на разных хост-устройствах.
- Контейнеризация – это операция, обеспечивающая надежную изоляцию процессов и повышающая уровень безопасности систем. У программ, работающих внутри «изолированной среды», нет доступа к основной ОС. Оказывать на нее влияние такое программное обеспечение не сможет.
Чтобы понять, как работать с Docker, требуется помнить не только об особенностях контейнеров, но о преимуществах/недостатках рассматриваемой технологии.
Плюсы и минусы Докера
Docker – инструмент, который приносит разработчикам и организациям множество «плюсов». К его основным преимущества можно отнести:
- Адаптивность и гибкость. За счет Docker получится с легкостью запустить контейнер в облаке и на любом локальном устройстве. Допускается создание базовых контейнерных шаблонов с целью их дальнейшего бесконечного использования. Бесшовная переносимость и простая развертка – одни из главных преимуществ технологии.
- Снижение количества ошибок и несовпадений окружений. Docker содержит в себе все необходимое для запуска программного обеспечения. Благодаря соответствующей особенности перенос приложения с одной среды в другую не доставит хлопот. Устраняется проблема, при которой у разработчиков все работает «как надо», а на обычном «боевом» сервере – нет.
- Скорость развертывания.
- Рост универсальности. Docker дает возможность использования любых языков разработки, а также стек технологий на сервере. Все это помогает избавиться от несовместимости библиотек и применяемых концепций.
- Поддержку и сообщество. У Docker поддерживается множество контейнеров с открытым исходным кодом. В любой момент пользователь может скачать нужный ему образ. А для решения возникающих проблем/вопросов предлагается обратиться к большому сообществу разработчиков, использующих изучаемую технологию.
- Непрерывную работу.
- Простое администрирование. При помощи Docker намного проще перенести контейнеры с хоста на хост, а также обновить их группы, запустить сразу несколько образов или осуществить откат до более старых версий.
- Безопасность. Докеры предлагают частичную изоляцию контейнеров друг от друга на уровне процессов и операционной системы. Это значит, что запуск контейнеров в большом количестве на одной и той же машине не несет никаких рисков.
- Экономическую эффективность. Контейнеры мало весят и являются производительными, а Docker дает возможность эффективно управлять имеющимися ресурсами. Данная особенность положительно сказывается на экономике компании, сокращая затраты.
Docker – это еще и современные подходы к выполнению своих задач. Технология предусматривает отказ от монолитной архитектуры в пользу микросервисной. Это положительно сказывается на гибкости развития продуктов, добавлении новых функций.
Основные компоненты
Что за технология и программа Docker, понятно. В ней выделяется ряд основных элементов. Среди ключевых компонентов:
- Клиент. Это сам инструмент. В него поступают команды.
- Демон – фоновый процесс управления контейнеризацией. Он принимает команды от клиента и реализовывает их. А еще – следит за контейнерами и знает их состояние.
- Хост. Так называется сервер, на котором развернут Docker. На нем в фоне будет функционировать демон, а также именно тут поднимаются контейнеры.
- Реестр. Представлен хранилищем образов. Из них демон организовывает контейнеризацию.
Также стоит запомнить следующие составляющие перечисленных ранее «блоков»:
- DockerFile – текстовый документ с инструкциями по созданию образов Docker. Файл формируется по принципу «одна строка – одна команда».
- Docker Daemon – фоновая служба на стороне хоста, отвечающая за создание, запуск и уничтожение контейнеров.
- Docker Image – образ. Представляет собой неизменяемый файл. Из него можно бесконечно разворачивать контейнеры.
- Client. Утилита командной строки в Docker, используемая для управления демоном.
- Container. Так называется запущенное приложение, развернутое из образа.
- Registry. Docker-служба, выполняющая роль репозитория (хранилища). Дает возможность отслеживать версии образов, а также создавать приватные репозитории.
- Docker Hub – публичный репозиторий с высоким рейтингом. Используется в Docker по умолчанию. С его помощью удается обеспечить интеграцию с GitHub и BitBucket.
- Docker Desktop. Приложение, предназначенное для Windows и macOS. Дает возможность локально собирать, тестировать и выполнять контейнеры.
- Docker Volumes. Тома, используемые для постоянного хранения данных. По умолчанию папки хранилищ в Docker создаются на хост-устройстве, но предусматривается возможность подключения удаленных хранилищ. За счет томов получается добиться лучшей настройки хранения информации.
Уже понятно, зачем требуется Docker и что он собой представляет. Теперь можно устанавливать соответствующую программу и начинать работать с ней.
Инициализация
Графический интерфейс для установки рассматриваемого программного интерфейса в Windows и macOS поддерживается, но он почти не используется. В основном разработчики стараются пользоваться консолью. Далее будет представлен процесс инициализации Docker на примере Ubuntu.
Для установки Докера потребуется:
- Синхронизировать пакетную базу apt и установить необходимые зависимости: .
- Импортировать GPG-ключ для репозитория: curl -fsSL
https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg.
- Добавить новый репозиторий в список apt^ echo \
"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null//
- Использовать две команды для установки Докера:
По умолчанию доступ к Docker Daemon поддерживается только для root-пользователей. Для того, чтобы с соответствующим элементом смогли работать остальные клиенты, их требуется добавить в специальную группу. Из состояния обычного пользователя надо выполнить команду:
sudo usermod -aG docker $USER
После этого потребуется перезайти в профиль. Так внесенные изменения вступят в силу.
Запуск контейнера
Теперь можно посмотреть, как работать в Docker. Начать стоит с контейнерного запуска. Сначала требуется выполнить команду:
docker run ubuntu echo 'hello from ubuntu'
Здесь Docker run используется для создания и запуска образа из контейнера. В примере «изолированным хранилищем» выступает образ Ubuntu. Далее выполняется команда echo. Из-за того, что была произведена чистая установка Докера без скачивания образов, система сначала отыщет соответствующий образ в публичном репозитории Docker Hub, загрузит и только потом сформирует контейнер.
Как только команда пройдет этап обработки, в терминале появится строчка «hello from Ubuntu». После этого контейнер сразу остановится. Можно воспользоваться командой:
docker run -it ubuntu
Она запустит контейнер в интерактивной форме: запустится оболочка (bash), а разработчик сможет внутри соответствующего «изолированного хранилища» выполнять разнообразные операции. Выход осуществляется через команду exit.
Создание образа
Создать образ в Docker можно через DockerFile или через интерактивную форму. При первом варианте предстоит указать в DockerFile необходимые команды, исключить в .dockerignore все документы, не используемые в сборке. После этого предстоит создать образ через команду docker image build, присвоив ему имя и тег.
Второй случай более простой. Здесь разработчику предстоит самостоятельно изменять среду окружения во время запуска контейнера. После открытия Docker в сессии терминала необходимо запустить контейнерную оболочку (bash) при помощи команды docker run имя_образа: тег. Имя тега допустимо не указывать тогда, когда используется текущая версия образа.
Сервисы для работы с контейнерами
Контейнеризация – процесс, который дает возможность организовывать сложные архитектуры в приложениях. Чем сложнее проект, тем труднее им управлять. Существует ряд сервисов, помогающих упростить работу с Docker. Далее будут представлены самые популярные приложения для этого.
Yandex Container Registry
Сервис для распространения и хранения Docker-образов. Он автоматически реплицирует всю информацию, а также упрощает переход на микросервисную архитектуру и интеграцию с облачными сервисами. Поддерживает управление при помощи консоли, командной строки (CLI) и командной строки Docker на основе Docker Registry HTTP API V2, работу через API.
Docker Compose
Для чего нужен Docker, ясно. В его состав входит инструмент Docker Compose. Он дает возможность централизованного запуска большого количества сервисов. Документирование и конфигурирование сервисов программы осуществляется через текстовый YAML-файл. Команда docker-compose up отвечает за развертывание сервисов приложений и создание из образа новых контейнеров, а также сетей, тонов и всех настроек, написанных в Docker Compose.
Теперь понятно, для чего нужен Docker. Лучше эту технологию помогут узнать дистанционные компьютерные курсы. Обучение организовано в режиме онлайн и сопряжено с богатым практическим опытом. По завершении курса пользователь получит электронный сертификат установленного образца.
Интересует DevOps? Добро пожаловать на курс в Otus!