Что такое «Докер» и зачем он нужен

Что такое «Докер» и зачем он нужен

Это как полуфабрикаты из супермаркета, только с программами.

Допустим, мы хотим запустить интернет-магазин на готовой системе управления, а если торговля пойдёт — запустить ещё несколько подобных магазинов. В магазине нам нужен движок, интерпретатор PHP, система работы с БД PHPMyAdmin и FTP-сервер для работы с файлами. 

Можно настроить все эти сервисы вручную: 

  1. Установить PHP и настроить его для наших задач.
  2. Установить MySQL и PHPMyAdmin.
  3. Установить движок магазина.
  4. Связать движок с базой, чтобы в ней хранились все записи о товарах.
  5. Установить тему для движка, чтобы магазин симпатично выглядел.
  6. Дописать скрипт, который подключит онлайн-кассу к нашему магазину.
  7. Установить и настроить FTP-сервер для доступа к файлам.

Что такое «Докер» и зачем он нужен
Все системы жёстко связаны и зависят от общих настроек сервера

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

Ручная установка всего на сервер — это как приготовить пиццу дома полностью самому: замесить тесто, купить и нарезать овощи и колбасу и так далее. В результате мы получим вкусное блюдо, но потратим на приготовление много времени.

Docker – автоматизация рутинной работы

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

По такой технологии работает Docker — программа, которая позволяет запускать подобные скрипты и собирать разный софт в одно целое. Принцип действия Докера такой:

  1. Есть набор различных программ, которые нужно установить, настроить и запустить.
  2. Для этого набора программ пишется скрипт, в котором написано, какую программу в какой последовательности нужно ставить и как настраивать. Задача Докера — выполнить эти инструкции и запустить программы как нужно. 
  3. Для каждой программы Докер создаёт виртуальную машину, в которой работает эта программа. Если в скрипте будет 5 программ, Докер сделает 5 виртуальных машин и объединит их в одну виртуальную сеть.
  4. Эта виртуальная сеть со стороны выглядит как единое целое и называется докер-контейнером. 

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

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

Пример скрипта

Вот пример из реальной жизни: для тестирования новых тем вордпресса его нужно много раз ставить, скачивать и устанавливать тему, а затем смотреть, что нужно поправить или добавить. Чтобы не делать всё с нуля, программист пишет скрипт — docker-compose.yml, в котором уже всё предусмотрено:

Что такое «Докер» и зачем он нужен

В этом скрипте написано, что у нас в контейнере используются два докер-файла: wordpress и mysql. Строка image отвечает за то, откуда докер возьмёт образы докер-файлов для установки. Их можно брать откуда угодно — с локальной машины, официального репозитория или из любого другого места в интернете. Как только докер доходит до такой строчки, он делает так:

  1. Находит нужный докер-файл.
  2. Смотрит, какая операционная система в нём прописана.
  3. Запускает внутри себя виртуальный образ этой системы.
  4. Устанавливает в эту виртуальную систему нужный софт, который прописан в докер-файле.
  5. Смотрит, что написано дальше в скрипте, и меняет настройки виртуальной системы или софта внутри неё.

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

Чтобы получить доступ к вордпрессу, в скрипте есть такая строчка: ports: - 8888:80. Она означает, что все запросы на локальный порт 80 будут перенаправлены в эту виртуальную сеть в наш вордпресс. Если мы в адресной строке браузера введём http://localhost:80, то сразу увидим интерфейс установки вордпресса.

На картинке это можно представить так:

Что такое «Докер» и зачем он нужен
Все программы работают в своих виртуальных системах и не зависят друг от друга, а связаны только настройками скрипта

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

Что такое докер-файл

Докер-файл — это тоже скрипт, но немного с другой задачей. Задача докер-файла такая:

  1. Сказать, какая операционная система будет виртуально запускаться при запуске.
  2. Установить и настроить какую-то программу в этой операционной системе.

Например, один докер-файл может отвечать за вордпресс, и тогда в нём будут прописаны все команды для простой установки движка. Другой докер-файл может отвечать за работу базы данных MySQL, и тогда в нём будет написано как её установить и какие ресурсы выделить.

Что такое «Докер» и зачем он нужен
Пример докер-файла, который отвечает за запуск виртуального вордпресса

👉 Докер-файл говорит, какую выбрать операционную систему и как в ней установить нужный софт.  Скрипт docker-compose.yml говорит, как между собой подружить несколько докер-файлов, чтобы они работали как единое целое.

Что такое «Докер» и зачем он нужен

Как запускать

Если у нас есть скрипт и нужные докер-файлы, то тогда запустить вордпресс на сервере — это задача на три минуты (команды для линукса):

  1. Установить докер на сервере: sudo apt install -y docker-ce.
  2. Закачать туда нужные скрипты и файлы.
  3. Запустить скрипт docker-compose.yml: docker compose up -d.

После этого на нашем сервере будет работать свой Докер, который запустит виртуальный контейнер с нашей сборкой. Для всего интернета это будет выглядеть так, как будто мы на самом деле развернули это на сервере, но на самом деле это всё работает внутри виртуальной машины.

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

А для чего всё это?

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

Основная задача этой технологии — возможность масштабирования и запуска десятков и сотен контейнеров одновременно, чтобы справиться с нагрузкой на сайт или сервис. Например, можно запустить одновременно несколько контейнеров с базой данных, если запросов к базе станет слишком много.

Текст и картинки:

Михаил Полянин

Редактура:

Максим Ильяхов

Художник:

Даня Берковский

Корректор:

Ирина Михеева

Вёрстка:

Мария Дронова

Соцсети:

Олег Вешкурцев

Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.
Начать карьеру в ИТ
Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию
Еще по теме
10 главных конструкций языка Swift
10 главных конструкций языка Swift

Быстрый гайд по языку.

easy
Если у вас ребёнок: об информатике
easy
Myspace потеряла архивы за 12 лет. Как не потерять свои
Myspace потеряла архивы за 12 лет. Как не потерять свои

Почему так сложно сберечь важные данные и как с этим быть вообще.

easy
Делаем неубиваемый сайт: статика и динамика
Делаем неубиваемый сайт: статика и динамика

Немного об устройстве сайтов.

easy
Что такое Angular
Что такое Angular

И зачем он фронтенд-разработчику.

medium
Все знают о мужчинах в IT. А вот и женщины

Феминисткам всё равно не понравится эта статья, а вы прочитайте

easy
Зачем нужны менеджеры
Зачем нужны менеджеры

Самое понятное объяснение роли менеджера.

easy
Зачем нужны базы данных
Зачем нужны базы данных

И какие они бывают.

easy
Нужен ли вам новый макбук?
Нужен ли вам новый макбук?

Разбираемся с экспертом

easy
За что не любят программистов

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

easy
Зачем нужна командная строка в современных компьютерах

Разбираемся на Маках и Винде.

medium
Как подготовить резюме для крупной компании?

Инструкция новичкам от разработчика из Яндекс.Практикума.

easy
Что такое перегрузка операторов
Что такое перегрузка операторов

Для тех, кто пытался, но не понял.

hard
easy