Найти тему

Что такое Docker и зачем он нужен?

Оглавление

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

🐋 Суть технологии Docker

Docker подразумевает создание таких сущностей, как контейнеры - это изолированная от вашей основной системы среда, внутри которой происходят какие-либо процессы.

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

Это как-раз таки проявление той самой изолированности - каждое приложение, сервис, программа внутри контейнера существует независимо от других контейнеров и системы, в которой он развернут.

Схема, показывающая как контейнеры Docker взаимодействуют с системой и инфраструктурой
Схема, показывающая как контейнеры Docker взаимодействуют с системой и инфраструктурой

🥡 Один контейнер - одно приложение

Это часто относят к недостаткам технологии Docker, но я бы назвал это особенностью. При работе с контейнерами следует исходить из правила 1 контейнер = 1 сервис. Если у вас имеется база данных, веб-сайт и чат-бот, то это будут три разных контейнера. Тем самым контейнеры могут потребовать больше системных ресурсов для своего обслуживания, особенно, если вы пытаетесь запустить что-то сложное и тяжелое.

🛠️ Меньше теории - больше практики

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

Так выглядел сайт linuxzone.ru
Так выглядел сайт linuxzone.ru

Он был создан с использованием фреймворка Django, который использует языком Python и иные технологии для создания различного рода приложений. Чтобы хранить статьи, лайки, комментарии, пользовательские профили и пр. необходима база данных, которая будет связана с Django. Также нужен веб-сервер, который будет обрабатывать запросы от пользователей и передавать их через Django в базу данных и возвращать обратонный ответ в виде страниц и заметок. Ну и наконец, так как у меня заметки выходили по расписанию, то нужны инструменты, которые будут отслеживать запланированные посты и отправлять их в публикацию.

Столько контейнеров было у меня в разработке в момент разделения сред на DEV и PROD
Столько контейнеров было у меня в разработке в момент разделения сред на DEV и PROD

Таким образом, у меня было 12 контейнеров (по 6 контейнеров для основного сайта и 6 для дев-сайта, где я тестирую различные нововведения):

  1. web - контейнер с Django
  2. db - контейнер с базой данных
  3. nginx - контейнер с веб-сервером
  4. worker, beats, redis - контейнеры для отложенных публикаций

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

🖼️ От образа к контейнеру

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

Скриншот сервиса Docker Hub
Скриншот сервиса Docker Hub

Образы хранятся в специальных реестрах или хранилищах, откуда их может скачать любой желающий. Один из самых известных реестров - Docker Hub. Там расположены образы дистрибутивов Linux, отдельных приложений, сервисов и много чего еще. Вам нужен Debian 12 для каких-либо тестов? Используете образ, размещенный в Docker Hub и собираете на его основе контейнер. Для работы Django как основы сайта проекта я использовал готовый образ Python 3.11, куда установил нужные мне пакеты, контейнер с базой данных был собран на основе образа СУБД PostgreSQL. Образы для контейнеров создаются как разработчиками софта, так и обычными людьми, которые считают, что созданный ими образ достоин того, чтобы им пользовались другие.

📚 Неужели все настолько легко для использования?

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

🏁 Подведем итоги

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

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