Знакомы ли вам ситуации, когда ваши коллеги на работе увлеченно обсуждают доки, контейнеры и архитектуру? Мы что в порту? -подумаете вы..
Сегодня мы раскроем завесу этой тайны и научим вас понимать язык DevOps.
Друзья, перед тем как углубиться в тему Docker и контейнеризации, рекомендуем подписаться на канал Telegram "Самоучки IT (Управление проектами)" https://t.me/+NfVrLMxdKS0yNDNi . Этот канал охватывает широкий спектр тем, связанных с управлением IT-проектами, DevOps и многим другим.
Представьте, что ваш коллега-разработчик написал программу на одном из языков программирования, запустил ее в своем дистрибутиве Linux, добавил множество дополнительных программ, необходимых для запуска, и теперь вам нужно все это запускать, интегрировать с другими частями вашего общего приложения и предоставлять клиентам. Как скопировать все необходимое для работы программы, чтобы ее можно было запускать везде и она работала одинаково?
Одним из решений могут быть виртуальные машины (ВМ). Если вы не знакомы с этим термином, то вкратце это как будто бы вы создали еще один компьютер внутри вашего компьютера. В этой схеме у нас есть наш сервер, на нем установлена операционная система (ОС), а поверх нее работает гипервизор, например, Hyper-V, VMware ESX или VirtualBox, который эмулирует железо и управляет виртуальными машинами. Каждый экземпляр ВМ имеет собственную ОС, которая называется гостевой, и приложения работают уже внутри нее. Таким образом, вы можете на одном сервере запускать множество разных ОС и приложений.
Однако в современных реалиях, когда все любят разбивать одну большую программу на множество маленьких и называть это микросервисной архитектурой, такой подход может быть не очень оптимальным. Ведь каждая ВМ запускает у себя отдельную ОС, что может работать медленно и требовать много ресурсов.
Здесь нам приходит на помощь Docker. Это такой инструмент, который упаковывает код приложения, системные инструменты, среду выполнения, библиотеки, зависимости и файлы конфигурации, необходимые для его запуска, в виртуальный контейнер, который может работать на любом компьютере, где установлен Docker. Это похоже на контейнер с грузами в порту, который можно удобно перемещать и запускать на любом судне.
Docker работает похожим образом с ВМ, но есть одно ключевое отличие. С Docker мы избавляемся от гипервизора, а вместо того, чтобы виртуализировать железо, мы виртуализируем только ОС. Это значит, что нам не нужны отдельные копии ОС для каждого контейнера, потому что контейнеры используют ядро ОС того сервера, где мы работаем, при помощи приложения Docker Engine. Это позволяет нам экономить ресурсы и удобно работать с изолированными контейнерами.
При этом приложения остаются все так же изолированы от системы и других приложений. Кстати, Docker не единственная технология контейнеризации, но определенно самая популярная.
Давайте теперь поговорим о самом Docker. Здесь нужно знать о трех основных элементах: Dockerfile, образ и контейнер. Взаимодействие между ними такое: из Dockerfile собирается образ, а на основе образа запускается контейнер.
Наша начальная точка - это Dockerfile, который содержит код, являющийся набором инструкций, которые говорят Docker, как нужно создать образ и что там должно оказаться. А образ — это уже готовое к запуску приложение, в котором лежит исходный код, библиотеки, зависимости, инструменты и другие файлы, необходимые для его запуска. И уже из этого образа мы запускаем сам контейнер, экземпляр нашего приложения.
Образы приложений можно делиться для этого используются Docker-репозитории. Самый крупный - это Docker Hub, откуда можно скачать образ какого-нибудь приложения или ОС и на их основе собирать свой собственный образ.
Давайте рассмотрим это на примере. Создадим Dockerfile и напишем в нем следующее:
Это значит, что мы берем за основу существующий образ Ubuntu версии 20.04, устанавливаем веб-сервер nginx, открываем порт 80 и запускаем сервер при старте контейнера.
Сохраним этот файл и создадим из него образ при помощи команды docker build. В этот момент Docker пройдется по всем нашим инструкциям шаг за шагом и создаст для нас образ, который будет содержать все, что мы указали в Dockerfile.
После создания образа можно запустить из него контейнер, выполнив команду docker run. Теперь, если мы откроем браузер и наберем в адресной строке localhost, то увидим, что все работает.
Вот так просто, используя различные команды, мы можем создавать и запускать свои контейнеры. Однако, если нам не требуется сложная настройка образа, а нужно просто получить работающую программу, то мы можем скачать готовый образ из Docker Hub и запустить его, выполнив команду docker pull и docker run.
Конечно, в реальности все обычно сложнее и приходится решать множество нестандартных задач, например, как сохранить данные при остановке контейнера или как связать несколько контейнеров в единое приложение. Для этого используются различные инструменты и технологии, такие как Docker Compose, Kubernetes и другие.
Подводя итоги, можно сказать, что Docker - это не только модное слово, которое поможет повысить вашу зарплату, но и мощный инструмент, который объединяет в себе все, что нам нравится в IT: автоматизацию, скорость, консистентность, модульность, экономичность и классный логотип.
И если вы еще не знакомы с Docker, то пора исправить это. Ну и под конец вопрос к знатокам. Если докер такой классный, то почему он до сих пор не выдавил с рынка виртуальные машины? В каких задачах без виртуалок не обойтись?
Для получения дополнительных знаний и инсайтов в области управления IT-проектами, DevOps и смежных тем, рекомендуем подписаться на канал Telegram "Самоучки IT (Управление проектами) https://t.me/+NfVrLMxdKS0yNDNi