На канале ранее выходили статьи про то, что такое виртуализация и контейнеризация. В числе прочих в статье про контейнеризацию упоминалась технология Docker. Но тогда мы поговорили о ней всколзь и, скажем так, сухим языком. В этой статье хочу исправиться и рассказать про то, что это за технология простым и понятным языком, без сильного углубления в какую-либо теорию.
🐋 Суть технологии Docker
Docker подразумевает создание таких сущностей, как контейнеры - это изолированная от вашей основной системы среда, внутри которой происходят какие-либо процессы.
Например, вы можете поместить в Docker-контейнер чат-бота в Телеграмм, который будет общаться с клиентами вашего магазина или, как это сделал я: разместить в контейнере блог, на который вы будете постить какие-либо статьи. Вполне возможно разместить три контейнера (с ботом, сайтом, блогом) и если что-то случится с одним из них, то остальные не пострадают.
Это как-раз таки проявление той самой изолированности - каждое приложение, сервис, программа внутри контейнера существует независимо от других контейнеров и системы, в которой он развернут.
🥡 Один контейнер - одно приложение
Это часто относят к недостаткам технологии Docker, но я бы назвал это особенностью. При работе с контейнерами следует исходить из правила 1 контейнер = 1 сервис. Если у вас имеется база данных, веб-сайт и чат-бот, то это будут три разных контейнера. Тем самым контейнеры могут потребовать больше системных ресурсов для своего обслуживания, особенно, если вы пытаетесь запустить что-то сложное и тяжелое.
🛠️ Меньше теории - больше практики
Дабы не разливаться мыслью по древу, просто покажу то, как был устроен сайт, на котором изначально была опубликована эта заметка.
Он был создан с использованием фреймворка Django, который использует языком Python и иные технологии для создания различного рода приложений. Чтобы хранить статьи, лайки, комментарии, пользовательские профили и пр. необходима база данных, которая будет связана с Django. Также нужен веб-сервер, который будет обрабатывать запросы от пользователей и передавать их через Django в базу данных и возвращать обратонный ответ в виде страниц и заметок. Ну и наконец, так как у меня заметки выходили по расписанию, то нужны инструменты, которые будут отслеживать запланированные посты и отправлять их в публикацию.
Таким образом, у меня было 12 контейнеров (по 6 контейнеров для основного сайта и 6 для дев-сайта, где я тестирую различные нововведения):
- web - контейнер с Django
- db - контейнер с базой данных
- nginx - контейнер с веб-сервером
- worker, beats, redis - контейнеры для отложенных публикаций
Каждый из шести контейнеров связан с другими и общается с ними по локальной сети. При помощи простых команд в консоли я могу перезапустить конкретный контейнер, остановить его, пересобрать после внесения изменений в код или настройки сайта. Самое главное: если накроется один из контейнеров, то остальные будут доступны и продолжат работать.
🖼️ От образа к контейнеру
Откуда берется содержимое каждого из описанных выше контейнеров? Оно формируется из образа - это отдельный файл, на основе которого создается контейнер. Представьте, что контейнер - это модель какого-либо судна, в таком случае образом будет выступать инструкция, где указано что и куда нужно приклеить и в какой цвет покрасить. Только в отличии от инструкции в текстовом виде, сбор контейнера на основе образа происходит гораздо быстрее и проще, бувально в пару команд.
Образы хранятся в специальных реестрах или хранилищах, откуда их может скачать любой желающий. Один из самых известных реестров - Docker Hub. Там расположены образы дистрибутивов Linux, отдельных приложений, сервисов и много чего еще. Вам нужен Debian 12 для каких-либо тестов? Используете образ, размещенный в Docker Hub и собираете на его основе контейнер. Для работы Django как основы сайта проекта я использовал готовый образ Python 3.11, куда установил нужные мне пакеты, контейнер с базой данных был собран на основе образа СУБД PostgreSQL. Образы для контейнеров создаются как разработчиками софта, так и обычными людьми, которые считают, что созданный ими образ достоин того, чтобы им пользовались другие.
📚 Неужели все настолько легко для использования?
Стоит понимать, что Docker - это сложная технология, азам которой нужно учиться на практике. Там огромное число нюансов, причем многие из них появляются со временем, так как технология не стоит на месте и продолжает развиваться. Но при этом определенные моменты в Docker просты настолько, что технологией может воспользоваться обычный пользователь, хоть сколько-нибудь умеющий думать и разбираться в инструкциях. Говоря проще, если вы не ножка от стула, то вы сможете без проблем собрать свой первый контейнер и научиться с ним работать.
🏁 Подведем итоги
Очень многое о технологии Docker я не рассказал в рамках этой статьи, так как полагаю, что для обычного пользователя данная информация является чрезмерной и излишней. Постарался, как говорится, на пальцах объяснить, что такое Docker и для чего его можно использовать. Если у вас остались вопросы, то задавайте их в комментариях, постараюсь ответить.
В последующих статьях на канале расскажу о первых шагах, которые позволят вам освоить технологию Docker и создать свой первый контейнер. Поэтому не забывайте подписываться!