Добавить в корзинуПозвонить
Найти в Дзене
IT - это просто

Кто такой Docker? Контейнеризация простыми словами

В прошлый раз мы говорили о виртуализации — технологии, которая позволяет разделить один мощный компьютер на несколько «компьютеров внутри компьютера». Тогда Автор сравнил это с тем, как Илья, Алиса и Арина получают каждый свой собственный игровой стол. Здравствуй, дорогой читатель! Это снова Автор. И сегодня мы поговорим о контейнеризации. Её часто путают с виртуализацией, но на самом деле это совершенно другой подход. И главное отличие — в том, что здесь всё происходит на одном общем столе. В этой статье Автор не будет говорить про песочницы в телефонах или игровых приставках — это отдельная тема. Речь пойдёт о том, как работают современные интернет-сервисы и почему они не падают, когда на сайт заходят миллионы людей. Люди придумали изолировать программы друг от друга очень давно. Сначала, в 70-х годах, появилась простая команда, которая заставляла программу видеть только свою маленькую папку и ничего вокруг. Это был первый «контейнер» — ещё очень примитивный. Потом, в начале 2000-х,
Оглавление

В прошлый раз мы говорили о виртуализации — технологии, которая позволяет разделить один мощный компьютер на несколько «компьютеров внутри компьютера». Тогда Автор сравнил это с тем, как Илья, Алиса и Арина получают каждый свой собственный игровой стол.

Здравствуй, дорогой читатель! Это снова Автор.

Три стола из прошлой серии и… пустой стол, который ждёт новых правил.
Три стола из прошлой серии и… пустой стол, который ждёт новых правил.

И сегодня мы поговорим о контейнеризации. Её часто путают с виртуализацией, но на самом деле это совершенно другой подход. И главное отличие — в том, что здесь всё происходит на одном общем столе.

В этой статье Автор не будет говорить про песочницы в телефонах или игровых приставках — это отдельная тема. Речь пойдёт о том, как работают современные интернет-сервисы и почему они не падают, когда на сайт заходят миллионы людей.

Как это начиналось

Люди придумали изолировать программы друг от друга очень давно.

Сначала, в 70-х годах, появилась простая команда, которая заставляла программу видеть только свою маленькую папку и ничего вокруг. Это был первый «контейнер» — ещё очень примитивный.

Первый шаг: прозрачный купол, который не даёт игрушке выходить за границы.
Первый шаг: прозрачный купол, который не даёт игрушке выходить за границы.

Потом, в начале 2000-х, разработчики научились отгораживать программы так, чтобы у каждой были свои настройки сети и свои файлы, к примеру «тюрьмы» FreeBSD. Это уже напоминало современные контейнеры, но пользоваться этим могли только специалисты на определённых компьютерах.

«Тюрьмы» FreeBSD — каждая клетка со своими игрушками, но все стоят на общем столе.
«Тюрьмы» FreeBSD — каждая клетка со своими игрушками, но все стоят на общем столе.

А настоящий переворот случился в 2013 году. Появилась компания Docker. Она не изобрела ничего нового, но сделала главное: упаковала всё сложное в удобный «чемодан» и написала простые инструкции. Теперь любой разработчик мог упаковать своё приложение в такой чемодан и быть уверенным, что оно поедет куда угодно.

Docker упаковал всё в удобные контейнеры — лови, запускай где хочешь!
Docker упаковал всё в удобные контейнеры — лови, запускай где хочешь!

Как это работает?

Давайте вспомним прошлую аналогию про игровые столы.

При виртуализации каждый ребёнок думал, что получал свой отдельный стол. У Ильи — большой, у Алисы — поменьше, у Арины — свой. Каждый стол стоял якобы отдельно, и каждый ребенок видел свои ножки, свою столешницу, свои ящики для игрушек. Никто из них не понимал, что это на самом деле один общий стол, который поделили между ними.

Теперь представьте другую картину.

Папа принёс в комнату все так же один большой и прочный стол. Это — основа, на которой всё держится. На этом столе лежат общие правила: нельзя толкаться, нельзя залезать на соседскую территорию. Но дети знают, что это один общий стол. На столе лежат коробки и каждый ребенок играет внутри своей персональной.

Один стол, три коробки. Каждый занят своим, но правила у всех общие.
Один стол, три коробки. Каждый занят своим, но правила у всех общие.
  • Илья решает построить космический корабль. Он берёт синюю пластиковую коробку, ставит её на общий стол и складывает внутрь только то, что нужно для корабля: конструктор, клей, инструкцию.
  • Алиса хочет рисовать. Она берёт розовую коробку и кладёт туда краски, кисточки и альбом.
  • Арина пока просто наблюдает. Ей дали маленькую жёлтую коробку с кубиками.

Все три коробки стоят на одном и том же столе. Пользуются одними и теми же правилами. Но все еще краски Алисы не попадают на чертежи Ильи, а детали конструктора не смешиваются с кубиками Арины.

Это и есть контейнеры. Каждая коробка — это контейнер. Внутри — только то, что нужно для одной игры (для одного приложения). А стол — это общая основа (операционная система), которая управляет всем.

Чем контейнеры отличаются от виртуальных машин

Виртуальная машина — как тащить целый стол. Контейнер — лёгкая коробка.
Виртуальная машина — как тащить целый стол. Контейнер — лёгкая коробка.

1. Размер и скорость

Если бы мы делали виртуальные машины, нам пришлось бы в комнате из одного сделать три полноценных стола. Пока их переберут, пока поставят — пройдут минуты. А коробки ставятся на стол за секунды. Они весят мало, их легко переносить.

2. Независимость от «железа»

Представьте, что Илья собрал свою синюю коробку дома, на кухонном столе. Потом он пришёл с ней к бабушке — и поставил на её стол. Внутри всё осталось точно таким же. С виртуальными машинами так не всегда получается: они «привязаны» к тому, из каких деталей сделан стол.

3. Изоляция (сильная и не очень)

Виртуальные столы (виртуальные машины) стоят отдельно. Если Арина опрокинет свой стол, остальные не пострадают. Это очень надёжно.

А коробки стоят на общем столе. Если кто-то сломает сам стол — упадут все коробки. Поэтому контейнеры чуть менее надёжны с точки зрения безопасности. Но для большинства задач этого достаточно, а за скорость и удобство можно немного заплатить.

Зачем это нужно?

Почему весь мир перешёл на контейнеры? Автор видит четыре главные причины.

Каждый сервис — в своей коробке. Чиним одну, остальные продолжают работать.
Каждый сервис — в своей коробке. Чиним одну, остальные продолжают работать.

1. Микросервисы

Современные приложения (например, интернет-магазин) состоят из десятков маленьких помощников: один ищет товары, другой считает корзину, третий отправляет письма. Удобно каждого помощника упаковать в свою коробку. Если корзина перестала работать — чиним только её, а магазин продолжает работать.

Если каждую часть класть в свою виртуальную машину, то это дольше настраивать, сложнее обслуживать и нужно больше ресурсов.

2. Больше не работает «на моём компьютере»

Разработчик собрал коробку на своём ноутбуке. Тестировщик открыл ту же коробку на своём компьютере. А потом эта коробка поехала на сервер в дата-центр. Везде она выглядит одинаково. Проблема «у меня работает, а у тебя нет» исчезает.

3. Экономия ресурсов

На одном мощном компьютере можно запустить сотни контейнеров. Виртуальных машин на нём поместилось бы в десять раз меньше. Это позволяет использовать железо на 100% и не тратить лишние деньги.

4. Быстрая доставка новых функций

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

Итог

Виртуализация и контейнеризация не соперники. Автор считает их хорошими друзьями, которые дополняют друг друга.

Виртуализация даёт крепкую изоляцию — как отдельные столы. Контейнеризация даёт скорость и лёгкость — как коробки на общем столе.

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

Столы (виртуалки) для надёжности, коробки (контейнеры) внутри — для скорости.
Столы (виртуалки) для надёжности, коробки (контейнеры) внутри — для скорости.

Автор надеется, что теперь разница стала понятна. Подписывайтесь, чтобы не пропустить новые истории о сложных технологиях, объяснённых простыми словами.

UPD

Для самых любопытных — Автор коротко объяснит несколько слов, которые можно встретить, если начать читать про контейнеры дальше.

  • Образ — это та самая упакованная коробка. В ней лежит приложение и всё, что ему нужно.
  • Оркестрация — это «менеджер по коробкам». Если у вас 500 контейнеров, руками не разобраться. Оркестратор сам решает, куда какую коробку поставить, и следит, чтобы они не падали.
  • Реестр (registry) — это склад, где хранятся готовые образы. Оттуда их можно скачать и поставить на свой компьютер.
  • Docker — самая известная программа, которая умеет создавать и запускать контейнеры. Благодаря ей контейнеры стали доступны каждому.

А про «cgroups», «namespaces» и другие внутренние механизмы Автор обязательно расскажет в следующих выпусках для тех, кто захочет заглянуть внутрь коробки.