Что такое Docker

Blog

Docker — это программное обеспечение для контейнеризации приложений. Сегодня мы поговорим о том, что такое контейнеризация и Docker, а также об их преимуществах.

Контейнеризация

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

В 60-х годах компьютеры не могли решать сразу несколько задач — только одну. Это приводило к большим очередям к такому редкому устройству. Решением этой проблемы стало распределение вычислительных мощностей между разными изолированными друг от друга процессами. Так началась история виртуализации. 

Виртуализация — это предоставление вычислительных мощностей изолированным процессам в рамках одного физического устройства.

Основное развитие виртуализации пришлось на эпоху интернета. Представьте, вы — предприниматель и хотите иметь сайт своей компании. Для этого нужен сервер, подключенный ко всемирной паутине. Например, сейчас для этого достаточно зайти на сайт cloud.timeweb.com и выбрать подходящий под ваши нужды сервер. Однако раньше, в самом начале развития интернета, таких удобных сервисов не было. Поэтому компаниям приходилось самостоятельно приобретать серверы и обслуживать их. Это неудобно и дорого. Такая боль вылилась в появление компаний-провайдеров, берущих на себя все серверные тяготы. Они закупали оборудование, размещали их в своих помещениях и сдавали серверы в аренду. 

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

Но и этого было недостаточно. С развитием интернета количество приложений, необходимых для работы сайта, увеличивалось. У каждого из них имелись свои зависимости, и в одной виртуальной машине им стало «тесновато». Одним из решений этой дилеммы стало размещение их в собственных виртуальных машинах. Получалась такая виртуальная матрешка. Однако полноценная виртуальная машина также избыточна для одной программы: ей не нужен весь её функционал. При этом виртуальная машина потребляет много ресурсов, часть которых идет в «никуда». Решением этой проблемы стала контейнеризация. Вместо того, чтобы запускать для каждого приложения свою виртуальную машину, разработчики придумали запускать их изолированно друг от друга в одной операционной системе. Получался такой контейнер: приложение, его зависимости и библиотеки.

Контейнер — изолированная среда с приложением, его зависимостями и библиотеками.

Docker

Что такое программа? Это какой-то код, который необходимо выполнить на центральном процессоре. При запуске приложения в контейнере запускается докер-процесс, внутри которого запускается само приложение. Запущенный контейнер для хост-системы выглядит как обычный процесс, а для программы в контейнере всё выглядит так, будто оно уникальное. Из-за изолированности единственный способ обмениваться данными между контейнерами — это сеть. Как будто программа в контейнере пытается связаться с другим физическим компьютером. Docker решает вопросы взаимодействия контейнеров. 

Хранение данных

Изолированность от операционной система хоста задает резонный вопрос: как хранить данные? Существует два пути: docker volume и bind mount.

Docker volume — это хранилище, которое создает сам докер. Оно может быть расположено где угодно: в файловой системе основной ОС или на каком-нибудь сервере.

Bind mount — это хранилище, которое пользователь сам создает на хост-машине, и при работе оно монтируется в контейнеры.

Структура Docker

В структуре Docker можно выделить 7 основных компонентов:

1. Docker-host

Основной компьютер, на котором запущен докер.

2. Docker-daemon

«Движок» докера, отвечающий за контейнеры.

3. Docker-client

Программа или интерфейс для управления всем процессом. 

4. Docker image

Так называемый образ контейнера. Он похож на дистрибутив какой-нибудь игры. Чтобы начать играть, её необходимо сначала установить, как и образ.

5. Dockerfile

Текстовый документ, описывающий, как нужно развернуть или установить образ контейнера (Docker image).

6. Docker container

Слова излишни. Это контейнер.

7. Docker registry

Репозиторий для образов — место, куда разработчики загружают свои образы. Существуют как частные, так и публичные. Самый популярный публичный репозиторий — Docker Hub. На него по умолчанию настроен Docker. В нем можно найти самые популярные программы и не только.

Преимущества Docker

Безопасность

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

Совместимость

Образ контейнера можно запустить на любом устройстве с Docker-ом.

Автоматизация

Docker берет на себя всю работу, связанную с запуском приложений и их настройкой. Автоматизация позволяет экономить время и снизить влияние человеческого риска.

Общие репозитории

Пользователям Docker доступны репозитории с тысячами образов, которые можно использовать в своей работе.

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

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

Использование Docker

Перейдем от слов к практике. Первое, что нам необходимо сделать — установить докер.

Установка

Установка Docker начинается с посещения официального сайта ПО docker.com. Переходим в раздел «Get Started» и выбираем соответствующую вашей ОС версию докера. В нашем случае это Windows. Инструкцию для установки докера на другие операционные системы можно найти здесь. По окончании установки потребуется перезагрузка компьютера.

Для работы Docker потребуется гипервизор. Гипервизор — это специальное ПО, необходимое для параллельной работы нескольких операционных систем. Docker предложит вам включить Hyper-V в Windows или загрузить WSL2. Мы выберем последний вариант, поскольку не во все версии Windows включен Hyper-V (например, в домашней версии его нет). 

Docker сам установит WSL2, но вам потребуется самостоятельно загрузить обновления для ядра Linux. Переходим на сайт Microsoft, загружаем и устанавливаем последний пакет обновлений. После перезагрузки Docker Desktop нас встретит готовый к работе клиент Docker-а.

Image1

Запуск скрипта Python

Выведем в консоль фразу «Hello, World». Для этого воспользуемся следующим скриптом Python: 

#!/usr/bin/python3
print("Hello World")

Поскольку мы запускаем скрипт не напрямую, нам нужен шебанг. В нашем скрипте это первая строка. Если вкратце, то шебанг необходим для того, чтобы ядро Linux знало, как запускать скрипт. Назовем наш скрипт классически: main.py.

Теперь перейдем к командной строке. Чтобы запустить наш скрипт, потребуется следующая команда:

docker run -v D:\script_dir:/dir python:3 /dir/main.py

Разберем её элементы:

  • docker run — запуск контейнера;
  • -v — команда монтирования каталога (bind mount);
  • D:\script_dir — монтируемый каталог с нашим скриптом;
  • /dir — место, куда мы монтируем каталог со скриптом;
  • python:3 — образ;
  • /dir/main.py — наш скрипт, в данном случае исполняемый файл.

Что происходит при введении этой команды? Docker ищет образ python 3 сначала на хосте, а потом в репозитории и развертывает его. Затем он монтирует туда каталог с нашим скриптом, чтобы было что запускать. После этого он запускает наш скрипт.

Заключение

В этой статье мы разобрали, что такое Docker, как он работает и попробовали запустить свой первый скрипт. Docker и контейнеризация — это не панацея, но это очень полезный инструмент при разработке, который не стоит обходить стороной.

Telegram
VK
Скопировать ссылку

Зарегистрируйтесь и начните пользоваться
сервисами Timeweb Cloud прямо сейчас

15 лет опыта
Сосредоточьтесь на своей работе: об остальном позаботимся мы
165 000 клиентов
Нам доверяют частные лица и компании, от небольших фирм до корпораций
Поддержка 24/7
100+ специалистов поддержки, готовых помочь в чате, тикете и по телефону