Docker. Начало.
Содержание
Docker. Одно слово, а какое. Сколько полезных вещей можно легко осуществить в вашей жизни с помощью одного лишь докера. И все эти вещи касаются разработки.
В этой статье хочу разобрать основы работы с докером, разобраться с такими основными понятиями как docker container, docker image и прочая docker-ерунда. Показать какие преимущества дает нам использования docker и почему его стоит использовать.
Давайте будем постепенно приходить к этому всему и начнем издалека. Серьезно издалека.
Docker. Предистория.
Давным давно в далеком королевстве жил-был кастомер. Жил он прекрасно, пока не решил запустить свой проект. Девять лет и девять ночей программисты не покладая рук писали код и создавали баги, которые тут же были исправлены. В итоге упорного труда всей команды проект был готов. Он был буквально вылизан и идеален. Ничто не могло затмить свет от этого продукта. Но проклятье релиза нависло над этим проектом. Сколько раз не пытались программисты зарелизить – все было без толку. Три проблемы появлялось после решения одной. Три бага появлялось после фикса одного. Три разработчика покидало команду после каждого дня
Три года спустя все было исправлено и все заработало. Три дня и три ночи программисты отмечали это событие. Успех набирал обороты, его нельзя было остановить. На последнюю ночь кастомер сказал что хочет запустить такое же приложение в другой стране. Оно было очень востребовано. Тут радость программистов сменилась тоской, грустью, безисходностью и раздражённостью. Никто не хотел повторять опыт последних трех лет… Никто.
Нужно было что-то. Нечто оригинальное. Никто не знал что. Это что-то должно было решать текущую проблему. Любой проект с легкостью должен быть развернут в любом месте. Он должен находится везде в одинаковом окружении: версии всех ресурсов стека должны быть идентичными. Необходима была уверенность в том что проект, работая на одном сервере, будет так же отрабатывать на всех остальных. Порой эта идея казалась слишком сложной что бы быть правдой. Были некоторые решения, которые решали эту проблему. А настоящее решение пришло с докером.
Docker. Копнем глубже.
Согласно документации, докер – платформа для разработчиков для создания, запуска и копирования приложений на основе контейнеров. Докер помогает нам легко деплоить приложения и размножать его.
Ключевое понятие в докере – это контейнеры. Давайте проведем параллель. Это поможет нам легче вникнуть в суть докера.
Давайте представим что у нас есть коробки. 📦 Несколько коробок. Коробок с инструментами. И каждая из них хранит что-то свое внутри, отличное от других. Свой набор инструментов. Ваше приложение состоит многих различных компонентов, которые требуют определенных инструментов. Вот эти инструменты и хранятся в контейнерах. Использование этих коробок делает приложение, в итоге, независимым от места, где они сложены – операционной системы. Docker – это операционная система для контейнеров. Он разбивает ядро ОС на все контейнеры, которые работают как отдельные процессы.
Может вы перечитали данный абзац не один раз, а ясности оказалось мало. Давайте более детально перейдем к рассмотрению этой магии. В процессе нам прийдется дать определения тем или иным ключевым понятиям. Давайте для начала разберемся с базовыми понятиями: docker image (образ), docker container (контейнер).
Docker image. Образ. Это базовый шаблон контейнера. Схема, по которой он создается. Например ubuntu, php и nginx.
Docker container. Контейнер создается из образа (макет/план/схема). Это исполняемый экземпляр этого образа. Грубо говоря, готовая машина, построенная по этому образу. С ним легко можно производить такие операции: создать и удалить, остановить.
Имея docker image мы можем запускать столько контейнеров, сколько посчитаем нужным.
Подход, в котором используются докер контейнеры для деплоя называется контейнеризацией. Другими словами, приложение запускается в изолированных контейнерах.
Docker. Преимущества.
Давайте немного загляни в магический глубокий внутренний мир контейнера и посмотрим что там происходит. В контейнер входит операционная система, файлы и метаданные. Образ говорит нам что, как, когда и где запустить в нашем контейнере и остальные конфигурационные данные.
Докер популярен по нескольким причинам:
- Гибкость. Даже очень вычурное и сложное приложение может быть контейнеризировано.
- Портативность. Может быть создано локально, в облаке и запущено где угодно
- Безопасность. Контейнеры используют строгие ограничения и изоляцию к процессам без какой-то конфигурации со стороны пользователя.
- Слабая связность. Контейнеры самодостаточны и инкапсулируемы. Это позволяет менять/расширять одни, не задевая работу других.
- Легковесность.
- Расширяемость.
Возможно сейчас вам очень сложно охватить весь мир докера, но далее будет понятней и понятней с каждой строчкой. Не нужно переживать и грызть ногти от недопонимания. Это нужно делать, если после прочтения всей информации о докере будет ничего не ясно.
Установка докера.
Думаю, не стоит описывать процесс установки на вашу машину, так как с этим не должно возникнуть сложностей. Для этого зайдите на официальный сайт докера, найдите вкладку get docker и следуйте инструкциям. Если, все же, не получится установить – можем разобрать возникшие проблемы в комментариях ниже.
После установки и запуска вы можете проверить что все прошло успешно. Для этого запустите команду
docker --version
В итоге вы должны будете увидеть что-то похожее на это
Docker version 19.03.5, build 633a0ea
Если ваша консоль горит красным – скорее всего что-то пошло не так. Попробуйте снова. Нет? Еще раз. Пока не увидите версию докера.
Мне пришлось дать часть теории в этой статье что бы была возможность двигаться дальше. Не переживайте если не все стало ясно, в дальнейших статьях мы будем более детально и интересно, на примерах работать с докером.
В следующей статье мы поработаем с образом и контейнером. Попробуем создать и запустить их. Возможно сделаем что-то больше.
Great content! Super high-quality! Keep it up! 🙂
Thanks 🙂