Docker – достаточно мощный инструмент, который пригодится каждому разработчику. Особенно это касается тех, кто часто «общается» с Линуксом. Специальное программное обеспечение, активно задействованное при работе с разнообразными приложениями.
Несмотря на полезность Докеров, не всем понятно, что представляет собой соответствующий объект. В данной статье будет раскрыта упомянутая тема. А еще каждый сможет разобраться в том, каким образом можно в считанные месяцы «с нуля» начать разбиваться в контейнерах Docker.
Даем определение
Docker – это специальное программное обеспечение для той или иной операционной системы. Некий набор инструментов для разработчика, задействованный для автоматизации развертки и управления приложения. Основное предназначение Докера – контейнеризация.
Его можно использовать при:
- доставке программного обеспечения;
- разработке приложений;
- запуске web-программ.
За все операции отвечает специальная среда. Она имеет поддержку контейнеризации. За счет контейнеров та или иная утилита начинает стабильно работать, а также с легкостью переносится из одной операционной системы в другую.
Немного о создании
Рассматриваемый «контейнер» изначально увидел свет в 2008 году, но его первые наработки появились в 90-х годах. Тогда контент не пользовался огромным спросом. Тестирование и разработка велась в «замкнутом пространстве». Доступ к подобным «контейнерам» имели только избранные программеры.
К 2013 году Docker получит статус «общего» контента. У его появился открытый исходный код. Работал контейнер под лицензией Apache версии 2.0. В основном проект предназначался для Linux. Лишь через 4 года он стал пользоваться спросом на других ОС.
Принцип функционирования
Контейнеры Docker нужно правильно и грамотно использовать. Соответствующий софт позволяет безопасно работать, «упаковывать» приложения и даже переносить их из системы в систему.
Основным предназначением Докера служит контейнеризация ПО. В его основе лежит своеобразная визуализация, позволяющая производить упаковку приложений по специальным изолированным средам. Каждая имеет название контейнера или «блока».
Докеры используют в зависимости от нужд разработчика. Можно встретить их в:
- облачных сервисах;
- центрах обработки информации;
- компьютерах и ноутбуках;
- прочих аппаратных устройствах.
Для того, чтобы приложение нормально работало, у каждого контейнера «в арсенале» будут собственные настройки и элементы. Это дает определенные преимущества. А именно – удается запустить несколько контейнеров на одном хосте.
Плюсы и минусы инструмента
Каждый разработчик перед тем, как работать с тем или иным инструментом, должен рассмотреть его сильные и слабые стороны. Docker необходимо тщательно изучить, иначе добиться успеха не получится. Несмотря на свою нынешнюю популярность, соответствующий контент имеет как плюсы, так и минусы.
Преимущества
Начать лучше с преимуществ. Среди них выделяют:
- Открытый исходный код. Разработчики делятся друг с другом собственными разработками на специализированных площадках.
- Низкий уровень потребления ресурсов. Изолированные пространства не предусматривают виртуализацию всей ОС. Они задействуют исключительно ядро хоста, после чего изолируют нужное приложение на уровне процессов.
- Скорость развертывания. Она достаточно быстрая. Можно использовать базовый образ Docker для дальнейшей работы.
- Простое скрытие процессов. Контейнеризация – то, что позволяет использовать всевозможные средства и способы обработки информации. Фоновые процессы легко скрываются от «посторонних глаз».
- Поддержка работы с небезопасными кодами. Технологии изолирования позволяют запускать совершенно разные машинные коды. За целостность приложений переживать не нужно. Связано это с тем, что за счет Докер контейнера осуществляется изоляция утилиты.
- Простое масштабирование. Проекты могут расширяться только за счет того, что пользователь решил устанавливать новые контейнеры.
- Простой и удобный запуск. Docker Run предоставляет возможность активации любой утилиты внутри изолированного пространства в пределах одного и того же хоста.
Не нужно забывать о том, что рассматриваемый инструментарий поддерживает оптимизацию файловой системы. Образ состоит из слоев, которые отвечают за оптимальное и эффективное использование ОС и ее файловых компонентов.
Недостатки
Управлять образами и контейнерами при определенной сноровке достаточно легко. Хотя кажется, что соответствующий софт не имеет недостатков, это вовсе не так.
Разработчики указывают на то, что Докер требует грамотного обращения. А еще – наличия элементарных навыков программирования, ведь внутри контейнера находится именно код. И его предстоит корректировать под собственные нужды.
В остальном минусов у подобного инструментария нет. Это – отличное решение, которое, в отличие от виртуальных машин, не требует особых ресурсов от используемого устройства.
Терминология – что нужно знать
Изучение любой утилиты осуществляется с учетом рассмотрения его составляющих. Docker контейнеры работают по определенным принципам, задействовав в процессе самые разные элементы.
Особое значение новичкам необходимо уделить внимание следующим терминам и понятиям:
- Демон. Сервер контейнерного типа, который включен в состав программных средств Docker. Является неким «центром управления» объектами – хранилищами, контейнерами, сетями, образами.
- Клиент. Пользовательский интерфейс, при помощи которого юзер может взаимодействовать с Daemon. Поддерживает работу одновременно с несколькими демонами.
- Образ – своеобразный файл, который содержит конфигурацию, зависимости, а также сведения, необходимые для обеспечения инициализации и развертки containers.
- DockerFile – документ, который программерам приходится часто использовать. Содержит правила и принципы сборки образа. Первая строка отвечает за так называемый базовый Image. Остальные команды ответственны за копирование файлов и инициализацию контента для создания среды разработки.
- Контейнер – исполняемый пакет рассматриваемого программного обеспечения. Работает без проблем на разных устройствах. Его можно назвать автономным. Содержит в себе все, что может потребоваться при работе с приложениями. Обработка кода возможна, когда присутствует исходный код, среда обработки, системные инструменты и библиотеки с настройками.
- Тома – процедуры эмуляции файловых систем. Носят название Volume. Создаются автоматически совместно с Docker контейнерами.
- Docker Hub – репозиторий, своеобразное хранилище электронных материалов. Задействуется для хранения образов с разным программным обеспечением.
- Реестры – созданные когда-то и зарегистрированные серверы. Нужны для хранения Docker Images.
- Host – виртуальная машина (среда), которая используется для запуска контейнеров с программным обеспечением.
- Сети – компоненты, применяемые для организации большого количества сетевых интерфейсов в программах контейнерного типа.
Существуют различные Docker-registry. Вот несколько примеров:
- Докер Центр – реестр подгрузки образов. Отвечает в полной мере за обеспечение и размещение соответствующих элементов с интеграцией GitHub и BitBucket.
- Azure. Изолированные области, задействованные при работе с Images и их элементами в директории Azure.
- DTR (доверенные реестры) – службы Докер-реестров. После выполнения оных происходит установка софта на локальных компьютерах и в корпорационных сетках.
Дополнительно рекомендуется рассмотреть иные важные аспекты, связанные с контейнированием. Этот процесс осуществляется в специальной среде. И она имеет собственное название.
Docker Engine
Существуют самые разные компоненты Докера. Основополагающую роль здесь играет ядро механизма контейнера. Он имеет название Docker Engine.
Это – движок, отвечающий за функционирование и обеспечение связей с Докер-объектами. Сюда принято относить образы, реестры и сами контейнеры.
Engine включает в себя более двух элементов:
- Сервер. Отвечает за установку демона (фоновой программы). Он используется для того, чтобы создать образ, а также управлять и корректировать его. Сюда же можно отнести модификацию томов и самих контейнеров.
- Клиент. Предусматривает возможность совершения разнообразных действий с серверами. Пример – создавать и вносить изменения в софт. Для реализации поставленной задачи применяются специальные команды. Их разработчик вводит через пользовательский интерфейс.
- Rest API. Предоставляет дополнительно набор функций для взаимодействия связки клиент-сервер. Это – уникальный программный механизм.
Если пользователь намерен освоить принципы создания образа Докера, а также хочет стать настоящим профессионалом в выбранном направлении, с движком придется работать тесно и упорно.
О работе «утилиты»
Для того, чтобы пользователь мог свободно использовать контейнер в своей работе, ему предстоит изучить основы написания программных кодов, а также информатики и даже математики. А еще – по каким принципам и схемам среди доступных можно использовать Докер контейнеры.
Работа рассматриваемого инструмента основывается на принципе архитектуры «клиент-сервер». Она предусматривает взаимодействие клиентов с хостами. Первый время от времени отправляет запросы на получение данных, второй – дает на них ответы, а также производит дальнейшую отправку.
Схема
На картинке ниже представлена наглядная схема работы рассматриваемого механизма. Она основывается на отдельных элементарных шагах.
Стоит запомнить следующий принцип работы контейнеров Docker:
- Через клиентский интерфейс человек отдает те или иные команды Daemon. Соответствующий элемент заранее находится в развернутом состоянии непосредственно на хосте.
- Демон активируется, реагируя на пользовательские манипуляции. Запускаются процессы, которые соответствуют посланным командам. Они осуществляются относительно образов. В качестве манипулятора выступает Daemon. В качестве основы берется DockerFile. Там хранятся все необходимые инструкции, принципы и правила.
- После того, как отправлены все команды, образ в контейнере начинает работать.
В качестве наглядного примера можно рассмотреть запуск Image при помощи команды Docker Run или процесс удаления контейнера. Для второй операции используют «запрос» Kill.
Как работает образ
Процессы контейнирования требуют хорошей проработки. Не достаточно просто запускать в контейнерах команды, чтобы «все нормально работало». Поэтому приходится учитывать, каким макаром работает каждый элемент механизма.
Образы, которые сделаете в процессе задействования Docker – это готовые шаблоны с пометкой «только для чтения». В них имеются инструкции для формирования хранилищ. Включают в себя слои, которые при помощи Докера собираются в один образ через вспомогательные файловые системы. Такой вариант избавляет от нерационального распределения и использования имеющейся дисковой памяти.
Параметры образа содержатся в DockerFile. Чтобы в режиме работы можно было использовать несколько Images, необходимо привлекать к операциям реестры и Docker-registry. Они предоставляют «список» готовых образов с внешних репозиториев, а также несут ответ за дальнейшее хранение в хостовых реестрах.
Внимание: для модификации Images достаточно корректировать исключительно необходимые файлы, а не весь объект. Такой результат получается за счет наличия слоев у образов. На сервер будут загружаться только те «документы», в которые разработчик вносил необходимые ему изменения.
О работе контейнеров
Стоит обратить внимание на то, что в рабочей сфере Докер рассматривается как объект, функционирующий комплексно. Каждый его элемент достоит отдельной «главы» при изучении. Docker Container базируется на основе Images. Запуск осуществляется напрямую из ядра Ubuntu (или другого Линукса). Такой прием – средство оптимизации использования аппаратных ресурсов.
Процесс функционирования изолированных областей Docker выглядит следующим макаром:
- Происходит определение контейнеров Docker.
- Каждое изолированное пространство получает поле имен. Оно будет уникальным.
- Имена – это то, что отвечает за предоставление доступа к контейнерам.
- Ограничения на процессы внутри изолированного пространства устанавливаются при помощи «значения» namespace.
При работе с движками задействуются контрольные группы – crgoups. Приложение получает ограничения по ресурсным наборам. Контрольные группы организовывают обмен аппаратными возможностями с контейнерами, на которые дополнительно устанавливаются разнообразные ограничительные «меры».
Движок объединяет пространство имен, контрольные группы, а также файловые системы. В результате получается формат container. Разработчики подумывают над внедрением новых форматов. Они будут реализовываться через интегрирование BSD или Solaris.
Процессы после запуска
Многие интересуются, что будет происходить после того, как изолированное пространство окажется запущенным. Алгоритм окажется следующим:
- Пользователь запускает Докер образ.
- Движок начинает поиск соответствующего объекта. Если он имеет локальное предназначение, происходит создание нового изолированного пространства. Иначе Image подгружается из Хаба.
- Система создает контейнер из полученного образа.
- Файловой системе присваивается определенная разметка.
- Осуществляется добавление слоев записи и создание сетевого интерфейса.
- Происходит присваивание (с предварительным поиском) такого элемента, как IP адрес.
- Заданный процесс проходит стадию обработки.
- Активируется захват «ввод-вывод» утилиты.
Докер контейнеры и его составляющие могут корректироваться. Для этого используются специальные команды. Но это только один из возможных вариантов развития событий. Управление Docker производится и через специальные элементы.
Вторую часть статьи читайте здесь.
<!DOCTYPE html>
<html dir="ltr" lang="ru-RU">
<head>
<meta charset="UTF-8" />
<meta http-equiv="x-ua-compatible" content="ie=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="profile" href="http://gmpg.org/xfn/11" />
<title>Знакомство с Docker от А до Я: что, зачем и почему OTUS</title>
<!-- All in One SEO 4.5.2.1 - aioseo.com -->
<meta name="description" content="Docker – достаточно мощный инструмент, который пригодится каждому разработчику. Особенно это касается тех, кто часто «общается» с Линуксом. Специальное программное обеспечение, активно задействованное при работе с разнообразными приложениями. Несмотря на полезность Докеров, не всем понятно, что представляет собой соответствующий объект. В данной статье будет раскрыта упомянутая тема. А еще каждый сможет разобраться в том, каким" />
<meta name="robots" content="max-image-preview:large" />
<link rel="canonical" href="https://otus.ru/journal/znakomstvo-s-docker-ot-a-do-ya-chto-zachem-i-pochemu/" />
<meta name="generator" content="All in One SEO (AIOSEO) 4.5.2.1" />
<script type="application/ld+json" class="aioseo-schema">
{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/otus.ru\/journal\/znakomstvo-s-docker-ot-a-do-ya-chto-zachem-i-pochemu\/#article","name":"\u0417\u043d\u0430\u043a\u043e\u043c\u0441\u0442\u0432\u043e \u0441 Docker \u043e\u0442 \u0410 \u0434\u043e \u042f: \u0447\u0442\u043e, \u0437\u0430\u0447\u0435\u043c \u0438 \u043f\u043e\u0447\u0435\u043c\u0443 OTUS","headline":"\u0417\u043d\u0430\u043a\u043e\u043c\u0441\u0442\u0432\u043e \u0441 Docker \u043e\u0442 \u0410 \u0434\u043e \u042f: \u0447\u0442\u043e, \u0437\u0430\u0447\u0435\u043c \u0438 \u043f\u043e\u0447\u0435\u043c\u0443","author":{"@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author"},"publisher":{"@id":"https:\/\/otus.ru\/journal\/#organization"},"image":{"@type":"ImageObject","url":"https:\/\/otus.ru\/journal\/wp-content\/uploads\/2021\/10\/oj-1080x720-12.png","width":1080,"height":720},"datePublished":"2021-10-19T17:52:54+00:00","dateModified":"2021-10-19T17:58:30+00:00","inLanguage":"ru-RU","mainEntityOfPage":{"@id":"https:\/\/otus.ru\/journal\/znakomstvo-s-docker-ot-a-do-ya-chto-zachem-i-pochemu\/#webpage"},"isPartOf":{"@id":"https:\/\/otus.ru\/journal\/znakomstvo-s-docker-ot-a-do-ya-chto-zachem-i-pochemu\/#webpage"},"articleSection":"\u041f\u043e\u043b\u0435\u0437\u043d\u043e\u0435, devops, Docker"},{"@type":"BreadcrumbList","@id":"https:\/\/otus.ru\/journal\/znakomstvo-s-docker-ot-a-do-ya-chto-zachem-i-pochemu\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/otus.ru\/journal\/#listItem","position":1,"name":"\u0413\u043b\u0430\u0432\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430","item":"https:\/\/otus.ru\/journal\/","nextItem":"https:\/\/otus.ru\/journal\/znakomstvo-s-docker-ot-a-do-ya-chto-zachem-i-pochemu\/#listItem"},{"@type":"ListItem","@id":"https:\/\/otus.ru\/journal\/znakomstvo-s-docker-ot-a-do-ya-chto-zachem-i-pochemu\/#listItem","position":2,"name":"\u0417\u043d\u0430\u043a\u043e\u043c\u0441\u0442\u0432\u043e \u0441 Docker \u043e\u0442 \u0410 \u0434\u043e \u042f: \u0447\u0442\u043e, \u0437\u0430\u0447\u0435\u043c \u0438 \u043f\u043e\u0447\u0435\u043c\u0443","previousItem":"https:\/\/otus.ru\/journal\/#listItem"}]},{"@type":"Organization","@id":"https:\/\/otus.ru\/journal\/#organization","name":"\u041e\u0442\u0443\u0441 \u043e\u043d\u043b\u0430\u0439\u043d-\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435","url":"https:\/\/otus.ru\/journal\/","sameAs":["https:\/\/www.youtube.com\/channel\/UCetgtvy93o3i3CvyGXKFU3g"],"contactPoint":{"@type":"ContactPoint","telephone":"+74999389202","contactType":"Customer Support"}},{"@type":"Person","@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author","url":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/","name":"A. Pavlenko","image":{"@type":"ImageObject","@id":"https:\/\/otus.ru\/journal\/znakomstvo-s-docker-ot-a-do-ya-chto-zachem-i-pochemu\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/d4c499a104d7c2522fa41f89e6819499?s=96&d=mm&r=g","width":96,"height":96,"caption":"A. Pavlenko"}},{"@type":"WebPage","@id":"https:\/\/otus.ru\/journal\/znakomstvo-s-docker-ot-a-do-ya-chto-zachem-i-pochemu\/#webpage","url":"https:\/\/otus.ru\/journal\/znakomstvo-s-docker-ot-a-do-ya-chto-zachem-i-pochemu\/","name":"\u0417\u043d\u0430\u043a\u043e\u043c\u0441\u0442\u0432\u043e \u0441 Docker \u043e\u0442 \u0410 \u0434\u043e \u042f: \u0447\u0442\u043e, \u0437\u0430\u0447\u0435\u043c \u0438 \u043f\u043e\u0447\u0435\u043c\u0443 OTUS","description":"Docker \u2013 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043c\u043e\u0449\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0443. \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u044d\u0442\u043e \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u0447\u0430\u0441\u0442\u043e \u00ab\u043e\u0431\u0449\u0430\u0435\u0442\u0441\u044f\u00bb \u0441 \u041b\u0438\u043d\u0443\u043a\u0441\u043e\u043c. \u0421\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0435 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u0435, \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0440\u0430\u0437\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c\u0438. \u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0441\u0442\u044c \u0414\u043e\u043a\u0435\u0440\u043e\u0432, \u043d\u0435 \u0432\u0441\u0435\u043c \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442. \u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u0430 \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u0430\u044f \u0442\u0435\u043c\u0430. \u0410 \u0435\u0449\u0435 \u043a\u0430\u0436\u0434\u044b\u0439 \u0441\u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0432 \u0442\u043e\u043c, \u043a\u0430\u043a\u0438\u043c","inLanguage":"ru-RU","isPartOf":{"@id":"https:\/\/otus.ru\/journal\/#website"},"breadcrumb":{"@id":"https:\/\/otus.ru\/journal\/znakomstvo-s-docker-ot-a-do-ya-chto-zachem-i-pochemu\/#breadcrumblist"},"author":{"@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author"},"creator":{"@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author"},"image":{"@type":"ImageObject","url":"https:\/\/otus.ru\/journal\/wp-content\/uploads\/2021\/10\/oj-1080x720-12.png","@id":"https:\/\/otus.ru\/journal\/znakomstvo-s-docker-ot-a-do-ya-chto-zachem-i-pochemu\/#mainImage","width":1080,"height":720},"primaryImageOfPage":{"@id":"https:\/\/otus.ru\/journal\/znakomstvo-s-docker-ot-a-do-ya-chto-zachem-i-pochemu\/#mainImage"},"datePublished":"2021-10-19T17:52:54+00:00","dateModified":"2021-10-19T17:58:30+00:00"},{"@type":"WebSite","@id":"https:\/\/otus.ru\/journal\/#website","url":"https:\/\/otus.ru\/journal\/","name":"OTUS JOURNAL","description":"Blog about IT","inLanguage":"ru-RU","publisher":{"@id":"https:\/\/otus.ru\/journal\/#organization"}}]}
</script>
<!-- All in One SEO -->
<link rel='dns-prefetch' href='//otus.ru' />
<link rel='dns-prefetch' href='//fonts.googleapis.com' />
<link rel='stylesheet' id='wp-block-library-css' href='https://otus.ru/journal/wp-includes/css/dist/block-library/style.min.css?ver=6.4.7' type='text/css' media='all' />
<style id='classic-theme-styles-inline-css' type='text/css'>
/*! This file is auto-generated */
.wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none}
</style>
<style id='global-styles-inline-css' type='text/css'>
body{--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgba(252,185,0,1) 0%,rgba(255,105,0,1) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgba(255,105,0,1) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgba(255, 255, 255, 1), 6px 6px rgba(0, 0, 0, 1);--wp--preset--shadow--crisp: 6px 6px 0px rgba(0, 0, 0, 1);}:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flow > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}body .is-layout-flow > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}body .is-layout-flow > .aligncenter{margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}body .is-layout-constrained > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}body .is-layout-constrained > .aligncenter{margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > :where(:not(.alignleft):not(.alignright):not(.alignfull)){max-width: var(--wp--style--global--content-size);margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > .alignwide{max-width: var(--wp--style--global--wide-size);}body .is-layout-flex{display: flex;}body .is-layout-flex{flex-wrap: wrap;align-items: center;}body .is-layout-flex > *{margin: 0;}body .is-layout-grid{display: grid;}body .is-layout-grid > *{margin: 0;}:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}
.wp-block-navigation a:where(:not(.wp-element-button)){color: inherit;}
:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}
:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}
.wp-block-pullquote{font-size: 1.5em;line-height: 1.6;}
</style>
<link rel='stylesheet' id='wbcr-comments-plus-url-span-css' href='https://otus.ru/journal/wp-content/plugins/clearfy/components/comments-plus/assets/css/url-span.css?ver=2.2.0' type='text/css' media='all' />
<link rel='stylesheet' id='wpel-style-css' href='https://otus.ru/journal/wp-content/plugins/wp-external-links/public/css/wpel.css?ver=2.59' type='text/css' media='all' />
<link rel='stylesheet' id='ez-toc-css' href='https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/assets/css/screen.min.css?ver=2.0.61' type='text/css' media='all' />
<style id='ez-toc-inline-css' type='text/css'>
div#ez-toc-container .ez-toc-title {font-size: 120%;}div#ez-toc-container .ez-toc-title {font-weight: 500;}div#ez-toc-container ul li {font-size: 95%;}div#ez-toc-container nav ul ul li {font-size: 90%;}
.ez-toc-container-direction {direction: ltr;}.ez-toc-counter ul{counter-reset: item ;}.ez-toc-counter nav ul li a::before {content: counters(item, ".", decimal) ". ";display: inline-block;counter-increment: item;flex-grow: 0;flex-shrink: 0;margin-right: .2em; float: left; }.ez-toc-widget-direction {direction: ltr;}.ez-toc-widget-container ul{counter-reset: item ;}.ez-toc-widget-container nav ul li a::before {content: counters(item, ".", decimal) ". ";display: inline-block;counter-increment: item;flex-grow: 0;flex-shrink: 0;margin-right: .2em; float: left; }
</style>
<link rel='stylesheet' id='contentberg-fonts-css' href='https://fonts.googleapis.com/css?family=Roboto%3A400%2C500%2C700%7CPT+Serif%3A400%2C400i%2C600%7CIBM+Plex+Serif%3A500' type='text/css' media='all' />
<link rel='stylesheet' id='contentberg-core-css' href='https://otus.ru/journal/wp-content/themes/contentberg/style.css?ver=1.8.3' type='text/css' media='all' />
<link rel='stylesheet' id='contentberg-lightbox-css' href='https://otus.ru/journal/wp-content/themes/contentberg/css/lightbox.css?ver=1.8.3' type='text/css' media='all' />
<link rel='stylesheet' id='font-awesome-css' href='https://otus.ru/journal/wp-content/themes/contentberg/css/fontawesome/css/font-awesome.min.css?ver=1.8.3' type='text/css' media='all' />
<script type="text/javascript" id="breeze-prefetch-js-extra">
/* <![CDATA[ */
var breeze_prefetch = {"local_url":"https:\/\/otus.ru\/journal","ignore_remote_prefetch":"1","ignore_list":["\/wp-admin\/"]};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/breeze/assets/js/js-front-end/breeze-prefetch-links.min.js" id="breeze-prefetch-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/jquery/jquery.min.js" id="jquery-core-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/jquery/jquery-migrate.min.js" id="jquery-migrate-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/lazysizes.js" id="lazysizes-js"></script>
<link rel="https://api.w.org/" href="https://otus.ru/journal/wp-json/" /><link rel="alternate" type="application/json" href="https://otus.ru/journal/wp-json/wp/v2/posts/2180" /><link rel='shortlink' href='https://otus.ru/journal/?p=2180' />
<link rel="alternate" type="application/json+oembed" href="https://otus.ru/journal/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fotus.ru%2Fjournal%2Fznakomstvo-s-docker-ot-a-do-ya-chto-zachem-i-pochemu%2F" />
<link rel="alternate" type="text/xml+oembed" href="https://otus.ru/journal/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fotus.ru%2Fjournal%2Fznakomstvo-s-docker-ot-a-do-ya-chto-zachem-i-pochemu%2F&format=xml" />
<script>var Sphere_Plugin = {"ajaxurl":"https:\/\/otus.ru\/journal\/wp-admin\/admin-ajax.php"};</script><link rel="icon" href="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-32x32.png" sizes="32x32" />
<link rel="icon" href="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-192x192.png" sizes="192x192" />
<link rel="apple-touch-icon" href="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-180x180.png" />
<meta name="msapplication-TileImage" content="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-270x270.png" />
<style type="text/css" id="wp-custom-css">
#menu-item-10406 .wpel-icon {
display: none;
}
#menu-item-10407 .wpel-icon {
display: none;
}
.otus-login-site a .wpel-icon {
display: none;
}
.menu-menju-navykov-container a .wpel-icon {
display: none;
}
.otus-login-site a
{
background: #ffd709;
border-radius: 12px;
color: #0f0f10;
font-size: 14px;
font-weight: 700;
line-height: 20px;
display: block;
text-align: center;
padding: 8px 25px;
}
.main-footer.dark {
background: linear-gradient(90deg, #a64fc5, #4f54e6);
border-color: transparent;
}
.main-footer.bold .copyright {
color: #fff;
}
.main-footer.bold .to-top i {
color: #fff;
}
.main-footer.bold .back-to-top {
color: #fff;
}
.nav__scroll {
overflow-x: auto;
-webkit-overflow-scrolling: touch;
}
.scrollable-menu .menu {
display: flex;
}
.nav__scroll
{
background: linear-gradient(90deg, #a64fc5, #4f54e6);
}
.scrollable-menu .menu .menu-item {
flex: 0 0 auto;
padding: 15px 15px;
}
.scrollable-menu .menu .menu-item a {
color: #fff;
}
.nav__scroll::-webkit-scrollbar{background-color:#fff;height:5px;}
.nav__scroll::-webkit-scrollbar-thumb{background-color:#dcdcdc;}
.nav__scroll::-webkit-scrollbar-track{-webkit-border-radius:0;border-radius:0;background-color:#fff;}/
body {
min-width: 320px;
}
.banner-click img {
margin: 0 auto;
display: block;
}
.banner-click {
cursor: pointer;
}
.banner-footer-area {
margin-bottom: 20px;
}
.banner-left-area {
margin-top: 40px;
} </style>
<!--Start VDZ Yandex Metrika Plugin-->
<!-- Yandex.Metrika counter --><script type="text/javascript" >(function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})(window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");ym(34531570, "init", {clickmap:true, trackLinks:true, accurateTrackBounce:true, webvisor:true, trackHash:true, ecommerce:"dataLayer"});</script>
<noscript><div><img src="https://mc.yandex.ru/watch/34531570" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
<!-- /Yandex.Metrika counter --><!--START ADD EVENTS FROM CF7--><script type='text/javascript'>document.addEventListener( 'wpcf7submit', function( event ) {
//event.detail.contactFormId;
if(ym){
//console.log(event.detail);
ym(34531570, 'reachGoal', 'VDZ_SEND_CONTACT_FORM_7');
ym(34531570, 'params', {
page_url: window.location.href,
status: event.detail.status,
locale: event.detail.contactFormLocale,
form_id: event.detail.contactFormId,
});
}
}, false );
</script><!--END ADD EVENTS FROM CF7-->
<!--End VDZ Yandex Metrika Plugin-->
</head>
<body class="post-template-default single single-post postid-2180 single-format-standard right-sidebar lazy-normal has-lb">
<div class="main-wrap">
<header id="main-head" class="main-head head-nav-below has-search-modal simple simple-boxed">
<div class="inner inner-head" data-sticky-bar="0">
<div class="wrap cf wrap-head">
<div class="left-contain">
<span class="mobile-nav"><i class="fa fa-bars"></i></span>
<div class="title">
<a href="https://otus.ru/journal/" title="OTUS JOURNAL" rel="home" data-wpel-link="internal">
<span class="text-logo"><img src="/journal/wp-content/themes/contentberg/img/logo_site.svg" alt="OTUS JOURNAL"></span>
</a>
</div>
</div>
<div class="navigation-wrap inline">
<nav class="navigation inline simple light" data-sticky-bar="0">
<div class="menu-rubriki-container"><ul id="menu-rubriki" class="menu"><li id="menu-item-109" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-cat-1 menu-item-109"><a href="https://otus.ru/journal/category/pro-it/" data-wpel-link="internal"><span>Про IT</span></a></li>
<li id="menu-item-113" class="menu-item menu-item-type-taxonomy menu-item-object-category current-post-ancestor current-menu-parent current-post-parent menu-cat-4 menu-item-113"><a href="https://otus.ru/journal/category/polza/" data-wpel-link="internal"><span>Полезное</span></a></li>
<li id="menu-item-114" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-cat-3 menu-item-114"><a href="https://otus.ru/journal/category/lifestyle/" data-wpel-link="internal"><span>Лайфстайл</span></a></li>
<li id="menu-item-10406" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10406"><a href="https://otus.ru/catalog/courses" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right"><span>Обучение</span><span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10407" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10407"><a href="https://otus.ru/about" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right"><span>Информация</span><span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
</ul></div> </nav>
</div>
<div class="actions">
<div class="otus-login-site">
<a href="https://otus.ru/login/" target="_blank" data-wpel-link="external" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Войти<span class="wpel-icon wpel-image wpel-icon-6"></span></a>
</div>
<a href="#" title="Search" class="search-link"><i class="fa fa-search"></i></a>
</div>
</div>
</div>
</header> <!-- .main-head -->
<div class="nav nav_disable nav_colored nav_transparent course-categories__nav nav__scroll ">
<div class="container wrap">
<div class="links inline simple light scrollable-menu">
<div class="menu-menju-navykov-container"><ul id="menu-menju-navykov" class="menu"><li id="menu-item-10413" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10413"><a href="https://otus.ru/categories/programming/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Программирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10414" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10414"><a href="https://otus.ru/categories/architecture/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Архитектура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10415" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10415"><a href="https://otus.ru/categories/operations/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Инфраструктура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10416" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10416"><a href="https://otus.ru/categories/information-security-courses/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Безопасность<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10417" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10417"><a href="https://otus.ru/categories/data-science/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Data Science<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10418" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10418"><a href="https://otus.ru/categories/gamedev/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">GameDev<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10419" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10419"><a href="https://otus.ru/categories/marketing-business/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Управление<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10420" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10420"><a href="https://otus.ru/categories/analytics/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Аналитика и анализ<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10421" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10421"><a href="https://otus.ru/categories/testing/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Тестирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
</ul></div> </div>
</div>
</div>
<div class="main wrap">
<div class="ts-row cf">
<div class="col-8 main-content cf">
<article id="post-2180" class="the-post post-2180 post type-post status-publish format-standard has-post-thumbnail category-polza tag-devops tag-docker">
<header class="post-header the-post-header cf">
<div class="post-meta the-post-meta">
<span class="post-cat">
<a href="https://otus.ru/journal/category/polza/" class="category" data-wpel-link="internal">Полезное</a>
</span>
<h1 class="post-title">
Знакомство с Docker от А до Я: что, зачем и почему
</h1>
<a href="https://otus.ru/journal/znakomstvo-s-docker-ot-a-do-ya-chto-zachem-i-pochemu/" class="date-link" data-wpel-link="internal"><time class="post-date">19 октября, 2021</time></a>
</div>
<div class="featured">
<a href="https://otus.ru/journal/wp-content/uploads/2021/10/oj-1080x720-12.png" class="image-link" data-wpel-link="internal"><img width="770" height="515" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20770%20515%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="attachment-contentberg-main size-contentberg-main lazyload wp-post-image" alt="Знакомство с Docker от А до Я: что, зачем и почему" title="Знакомство с Docker от А до Я: что, зачем и почему" decoding="async" fetchpriority="high" data-srcset="https://otus.ru/journal/wp-content/uploads/2021/10/oj-1080x720-12-770x515.png 770w, https://otus.ru/journal/wp-content/uploads/2021/10/oj-1080x720-12-300x200.png 300w, https://otus.ru/journal/wp-content/uploads/2021/10/oj-1080x720-12-1024x683.png 1024w, https://otus.ru/journal/wp-content/uploads/2021/10/oj-1080x720-12-150x100.png 150w, https://otus.ru/journal/wp-content/uploads/2021/10/oj-1080x720-12-270x180.png 270w" data-src="https://otus.ru/journal/wp-content/uploads/2021/10/oj-1080x720-12-770x515.png" data-sizes="(max-width: 770px) 100vw, 770px" /> </a>
</div>
</header><!-- .post-header -->
<div class="post-content description cf entry-content content-normal">
<div id="ez-toc-container" class="ez-toc-v2_0_61 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction">
<div class="ez-toc-title-container">
<p class="ez-toc-title " >Содержание</p>
<span class="ez-toc-title-toggle"><a href="#" class="ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle" aria-label="Toggle Table of Content"><span class="ez-toc-js-icon-con"><span class=""><span class="eztoc-hide" style="display:none;">Toggle</span><span class="ez-toc-icon-toggle-span"><svg style="fill: #999;color:#999" xmlns="http://www.w3.org/2000/svg" class="list-377408" width="20px" height="20px" viewBox="0 0 24 24" fill="none"><path d="M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z" fill="currentColor"></path></svg><svg style="fill: #999;color:#999" class="arrow-unsorted-368013" xmlns="http://www.w3.org/2000/svg" width="10px" height="10px" viewBox="0 0 24 24" version="1.2" baseProfile="tiny"><path d="M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z"/></svg></span></span></span></a></span></div>
<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-1" href="#%D0%94%D0%B0%D0%B5%D0%BC_%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5" title="Даем определение">Даем определение</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-2" href="#%D0%9D%D0%B5%D0%BC%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE_%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B8" title="Немного о создании">Немного о создании</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-3" href="#%D0%9F%D1%80%D0%B8%D0%BD%D1%86%D0%B8%D0%BF_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%BE%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F" title="Принцип функционирования">Принцип функционирования</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-4" href="#%D0%9F%D0%BB%D1%8E%D1%81%D1%8B_%D0%B8_%D0%BC%D0%B8%D0%BD%D1%83%D1%81%D1%8B_%D0%B8%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%B0" title="Плюсы и минусы инструмента">Плюсы и минусы инструмента</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-5" href="#%D0%9F%D1%80%D0%B5%D0%B8%D0%BC%D1%83%D1%89%D0%B5%D1%81%D1%82%D0%B2%D0%B0" title="Преимущества">Преимущества</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-6" href="#%D0%9D%D0%B5%D0%B4%D0%BE%D1%81%D1%82%D0%B0%D1%82%D0%BA%D0%B8" title="Недостатки">Недостатки</a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-7" href="#%D0%A2%D0%B5%D1%80%D0%BC%D0%B8%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%8F_%E2%80%93_%D1%87%D1%82%D0%BE_%D0%BD%D1%83%D0%B6%D0%BD%D0%BE_%D0%B7%D0%BD%D0%B0%D1%82%D1%8C" title="Терминология – что нужно знать">Терминология – что нужно знать</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-8" href="#Docker_Engine" title="Docker Engine">Docker Engine</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-9" href="#%D0%9E_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B5_%C2%AB%D1%83%D1%82%D0%B8%D0%BB%D0%B8%D1%82%D1%8B%C2%BB" title="О работе «утилиты»">О работе «утилиты»</a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class="ez-toc-link ez-toc-heading-10" href="#%D0%A1%D1%85%D0%B5%D0%BC%D0%B0" title="Схема">Схема</a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-11" href="#%D0%9A%D0%B0%D0%BA_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%D0%B5%D1%82_%D0%BE%D0%B1%D1%80%D0%B0%D0%B7" title="Как работает образ">Как работает образ</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-12" href="#%D0%9E_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B5_%D0%BA%D0%BE%D0%BD%D1%82%D0%B5%D0%B9%D0%BD%D0%B5%D1%80%D0%BE%D0%B2" title="О работе контейнеров">О работе контейнеров</a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class="ez-toc-link ez-toc-heading-13" href="#%D0%9F%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81%D1%8B_%D0%BF%D0%BE%D1%81%D0%BB%D0%B5_%D0%B7%D0%B0%D0%BF%D1%83%D1%81%D0%BA%D0%B0" title="Процессы после запуска">Процессы после запуска</a></li></ul></li></ul></li></ul></nav></div>
<p>Docker – достаточно мощный инструмент, который пригодится каждому разработчику. Особенно это касается тех, кто часто «общается» с Линуксом. Специальное программное обеспечение, активно задействованное при работе с разнообразными приложениями.</p>
<p>Несмотря на полезность Докеров, не всем понятно, что представляет собой соответствующий объект. В данной статье будет раскрыта упомянутая тема. А еще каждый сможет разобраться в том, каким образом можно в считанные месяцы «с нуля» начать разбиваться в контейнерах Docker.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%94%D0%B0%D0%B5%D0%BC_%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5"></span>Даем определение<span class="ez-toc-section-end"></span></h2>
<p>Docker – это специальное программное обеспечение для той или иной операционной системы. Некий набор инструментов для разработчика, задействованный для автоматизации развертки и управления приложения. Основное предназначение Докера – контейнеризация.</p>
<p>Его можно использовать при:</p>
<ul><li>доставке программного обеспечения;</li><li>разработке приложений;</li><li>запуске web-программ.</li></ul>
<p>За все операции отвечает специальная среда. Она имеет поддержку контейнеризации. За счет контейнеров та или иная утилита начинает стабильно работать, а также с легкостью переносится из одной операционной системы в другую.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9D%D0%B5%D0%BC%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BE_%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B8"></span>Немного о создании<span class="ez-toc-section-end"></span></h2>
<p>Рассматриваемый «контейнер» изначально увидел свет в 2008 году, но его первые наработки появились в 90-х годах. Тогда контент не пользовался огромным спросом. Тестирование и разработка велась в «замкнутом пространстве». Доступ к подобным «контейнерам» имели только избранные программеры.</p>
<p>К 2013 году Docker получит статус «общего» контента. У его появился открытый исходный код. Работал контейнер под лицензией Apache версии 2.0. В основном проект предназначался для Linux. Лишь через 4 года он стал пользоваться спросом на других ОС.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9F%D1%80%D0%B8%D0%BD%D1%86%D0%B8%D0%BF_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%BE%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F"></span>Принцип функционирования<span class="ez-toc-section-end"></span></h2>
<p>Контейнеры Docker нужно правильно и грамотно использовать. Соответствующий софт позволяет безопасно работать, «упаковывать» приложения и даже переносить их из системы в систему.</p>
<p>Основным предназначением Докера служит контейнеризация ПО. В его основе лежит своеобразная визуализация, позволяющая производить упаковку приложений по специальным изолированным средам. Каждая имеет название контейнера или «блока».</p>
<p>Докеры используют в зависимости от нужд разработчика. Можно встретить их в:</p>
<ul><li>облачных сервисах;</li><li>центрах обработки информации;</li><li>компьютерах и ноутбуках;</li><li>прочих аппаратных устройствах.</li></ul>
<p>Для того, чтобы приложение нормально работало, у каждого контейнера «в арсенале» будут собственные настройки и элементы. Это дает определенные преимущества. А именно – удается запустить несколько контейнеров на одном хосте.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9F%D0%BB%D1%8E%D1%81%D1%8B_%D0%B8_%D0%BC%D0%B8%D0%BD%D1%83%D1%81%D1%8B_%D0%B8%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%B0"></span>Плюсы и минусы инструмента<span class="ez-toc-section-end"></span></h2>
<p>Каждый разработчик перед тем, как работать с тем или иным инструментом, должен рассмотреть его сильные и слабые стороны. Docker необходимо тщательно изучить, иначе добиться успеха не получится. Несмотря на свою нынешнюю популярность, соответствующий контент имеет как плюсы, так и минусы.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9F%D1%80%D0%B5%D0%B8%D0%BC%D1%83%D1%89%D0%B5%D1%81%D1%82%D0%B2%D0%B0"></span>Преимущества<span class="ez-toc-section-end"></span></h3>
<p>Начать лучше с преимуществ. Среди них выделяют:</p>
<ol type="1"><li>Открытый исходный код. Разработчики делятся друг с другом собственными разработками на специализированных площадках.</li><li>Низкий уровень потребления ресурсов. Изолированные пространства не предусматривают виртуализацию всей ОС. Они задействуют исключительно ядро хоста, после чего изолируют нужное приложение на уровне процессов.</li><li>Скорость развертывания. Она достаточно быстрая. Можно использовать базовый образ Docker для дальнейшей работы.</li><li>Простое скрытие процессов. Контейнеризация – то, что позволяет использовать всевозможные средства и способы обработки информации. Фоновые процессы легко скрываются от «посторонних глаз».</li><li>Поддержка работы с небезопасными кодами. Технологии изолирования позволяют запускать совершенно разные машинные коды. За целостность приложений переживать не нужно. Связано это с тем, что за счет Докер контейнера осуществляется изоляция утилиты.</li><li>Простое масштабирование. Проекты могут расширяться только за счет того, что пользователь решил устанавливать новые контейнеры.</li><li>Простой и удобный запуск. Docker Run предоставляет возможность активации любой утилиты внутри изолированного пространства в пределах одного и того же хоста.</li></ol>
<p>Не нужно забывать о том, что рассматриваемый инструментарий поддерживает оптимизацию файловой системы. Образ состоит из слоев, которые отвечают за оптимальное и эффективное использование ОС и ее файловых компонентов.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9D%D0%B5%D0%B4%D0%BE%D1%81%D1%82%D0%B0%D1%82%D0%BA%D0%B8"></span>Недостатки<span class="ez-toc-section-end"></span></h3>
<p>Управлять образами и контейнерами при определенной сноровке достаточно легко. Хотя кажется, что соответствующий софт не имеет недостатков, это вовсе не так.</p>
<p>Разработчики указывают на то, что Докер требует грамотного обращения. А еще – наличия элементарных навыков программирования, ведь внутри контейнера находится именно код. И его предстоит корректировать под собственные нужды.</p>
<p>В остальном минусов у подобного инструментария нет. Это – отличное решение, которое, в отличие от виртуальных машин, не требует особых ресурсов от используемого устройства.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A2%D0%B5%D1%80%D0%BC%D0%B8%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%8F_%E2%80%93_%D1%87%D1%82%D0%BE_%D0%BD%D1%83%D0%B6%D0%BD%D0%BE_%D0%B7%D0%BD%D0%B0%D1%82%D1%8C"></span>Терминология – что нужно знать<span class="ez-toc-section-end"></span></h2>
<p>Изучение любой утилиты осуществляется с учетом рассмотрения его составляющих. Docker контейнеры работают по определенным принципам, задействовав в процессе самые разные элементы.</p>
<p>Особое значение новичкам необходимо уделить внимание следующим терминам и понятиям:</p>
<ol type="1"><li>Демон. Сервер контейнерного типа, который включен в состав программных средств Docker. Является неким «центром управления» объектами – хранилищами, контейнерами, сетями, образами.</li><li>Клиент. Пользовательский интерфейс, при помощи которого юзер может взаимодействовать с Daemon. Поддерживает работу одновременно с несколькими демонами.</li><li>Образ – своеобразный файл, который содержит конфигурацию, зависимости, а также сведения, необходимые для обеспечения инициализации и развертки containers.</li><li>DockerFile – документ, который программерам приходится часто использовать. Содержит правила и принципы сборки образа. Первая строка отвечает за так называемый базовый Image. Остальные команды ответственны за копирование файлов и инициализацию контента для создания среды разработки.</li><li>Контейнер – исполняемый пакет рассматриваемого программного обеспечения. Работает без проблем на разных устройствах. Его можно назвать автономным. Содержит в себе все, что может потребоваться при работе с приложениями. Обработка кода возможна, когда присутствует исходный код, среда обработки, системные инструменты и библиотеки с настройками.</li><li>Тома – процедуры эмуляции файловых систем. Носят название Volume. Создаются автоматически совместно с Docker контейнерами.</li><li>Docker Hub – репозиторий, своеобразное хранилище электронных материалов. Задействуется для хранения образов с разным программным обеспечением.</li><li>Реестры – созданные когда-то и зарегистрированные серверы. Нужны для хранения Docker Images.</li><li>Host – виртуальная машина (среда), которая используется для запуска контейнеров с программным обеспечением.</li><li>Сети – компоненты, применяемые для организации большого количества сетевых интерфейсов в программах контейнерного типа.</li></ol>
<p>Существуют различные Docker-registry. Вот несколько примеров:</p>
<ol type="1"><li>Докер Центр – реестр подгрузки образов. Отвечает в полной мере за обеспечение и размещение соответствующих элементов с интеграцией GitHub и BitBucket.</li><li>Azure. Изолированные области, задействованные при работе с Images и их элементами в директории Azure.</li><li>DTR (доверенные реестры) – службы Докер-реестров. После выполнения оных происходит установка софта на локальных компьютерах и в корпорационных сетках.</li></ol>
<p>Дополнительно рекомендуется рассмотреть иные важные аспекты, связанные с контейнированием. Этот процесс осуществляется в специальной среде. И она имеет собственное название.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="Docker_Engine"></span>Docker Engine<span class="ez-toc-section-end"></span></h2>
<p>Существуют самые разные компоненты Докера. Основополагающую роль здесь играет ядро механизма контейнера. Он имеет название Docker Engine.</p>
<p>Это – движок, отвечающий за функционирование и обеспечение связей с Докер-объектами. Сюда принято относить образы, реестры и сами контейнеры.</p>
<p>Engine включает в себя более двух элементов:</p>
<ol type="1"><li>Сервер. Отвечает за установку демона (фоновой программы). Он используется для того, чтобы создать образ, а также управлять и корректировать его. Сюда же можно отнести модификацию томов и самих контейнеров.</li><li>Клиент. Предусматривает возможность совершения разнообразных действий с серверами. Пример – создавать и вносить изменения в софт. Для реализации поставленной задачи применяются специальные команды. Их разработчик вводит через пользовательский интерфейс.</li><li>Rest API. Предоставляет дополнительно набор функций для взаимодействия связки клиент-сервер. Это – уникальный программный механизм.</li></ol>
<p>Если пользователь намерен освоить принципы создания образа Докера, а также хочет стать настоящим профессионалом в выбранном направлении, с движком придется работать тесно и упорно.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9E_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B5_%C2%AB%D1%83%D1%82%D0%B8%D0%BB%D0%B8%D1%82%D1%8B%C2%BB"></span>О работе «утилиты»<span class="ez-toc-section-end"></span></h3>
<p>Для того, чтобы пользователь мог свободно использовать контейнер в своей работе, ему предстоит изучить основы написания программных кодов, а также информатики и даже математики. А еще – по каким принципам и схемам среди доступных можно использовать Докер контейнеры.</p>
<p>Работа рассматриваемого инструмента основывается на принципе архитектуры «клиент-сервер». Она предусматривает взаимодействие клиентов с хостами. Первый время от времени отправляет запросы на получение данных, второй – дает на них ответы, а также производит дальнейшую отправку.</p>
<h4 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A1%D1%85%D0%B5%D0%BC%D0%B0"></span>Схема<span class="ez-toc-section-end"></span></h4>
<p>На картинке ниже представлена наглядная схема работы рассматриваемого механизма. Она основывается на отдельных элементарных шагах.</p>
<figure class="wp-block-image size-large"><img decoding="async" width="876" height="551" src="https://otus.ru/journal/wp-content/uploads/2021/10/1.jpg" alt="Знакомство с Docker от А до Я: что, зачем и почему" class="wp-image-2181" srcset="https://otus.ru/journal/wp-content/uploads/2021/10/1.jpg 876w, https://otus.ru/journal/wp-content/uploads/2021/10/1-300x189.jpg 300w, https://otus.ru/journal/wp-content/uploads/2021/10/1-150x94.jpg 150w, https://otus.ru/journal/wp-content/uploads/2021/10/1-768x483.jpg 768w" sizes="(max-width: 876px) 100vw, 876px" /></figure>
<p>Стоит запомнить следующий принцип работы контейнеров Docker:</p>
<ol type="1"><li>Через клиентский интерфейс человек отдает те или иные команды Daemon. Соответствующий элемент заранее находится в развернутом состоянии непосредственно на хосте.</li><li>Демон активируется, реагируя на пользовательские манипуляции. Запускаются процессы, которые соответствуют посланным командам. Они осуществляются относительно образов. В качестве манипулятора выступает Daemon. В качестве основы берется DockerFile. Там хранятся все необходимые инструкции, принципы и правила.</li><li>После того, как отправлены все команды, образ в контейнере начинает работать.</li></ol>
<p>В качестве наглядного примера можно рассмотреть запуск Image при помощи команды Docker Run или процесс удаления контейнера. Для второй операции используют «запрос» Kill.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9A%D0%B0%D0%BA_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%D0%B5%D1%82_%D0%BE%D0%B1%D1%80%D0%B0%D0%B7"></span>Как работает образ<span class="ez-toc-section-end"></span></h3>
<p>Процессы контейнирования требуют хорошей проработки. Не достаточно просто запускать в контейнерах команды, чтобы «все нормально работало». Поэтому приходится учитывать, каким макаром работает каждый элемент механизма.</p>
<p>Образы, которые сделаете в процессе задействования Docker – это готовые шаблоны с пометкой «только для чтения». В них имеются инструкции для формирования хранилищ. Включают в себя слои, которые при помощи Докера собираются в один образ через вспомогательные файловые системы. Такой вариант избавляет от нерационального распределения и использования имеющейся дисковой памяти.</p>
<p>Параметры образа содержатся в DockerFile. Чтобы в режиме работы можно было использовать несколько Images, необходимо привлекать к операциям реестры и Docker-registry. Они предоставляют «список» готовых образов с внешних репозиториев, а также несут ответ за дальнейшее хранение в хостовых реестрах.</p>
<p>Внимание: для модификации Images достаточно корректировать исключительно необходимые файлы, а не весь объект. Такой результат получается за счет наличия слоев у образов. На сервер будут загружаться только те «документы», в которые разработчик вносил необходимые ему изменения.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9E_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B5_%D0%BA%D0%BE%D0%BD%D1%82%D0%B5%D0%B9%D0%BD%D0%B5%D1%80%D0%BE%D0%B2"></span>О работе контейнеров<span class="ez-toc-section-end"></span></h3>
<p>Стоит обратить внимание на то, что в рабочей сфере Докер рассматривается как объект, функционирующий комплексно. Каждый его элемент достоит отдельной «главы» при изучении. Docker Container базируется на основе Images. Запуск осуществляется напрямую из ядра Ubuntu (или другого Линукса). Такой прием – средство оптимизации использования аппаратных ресурсов.</p>
<p>Процесс функционирования изолированных областей Docker выглядит следующим макаром:</p>
<ol type="1"><li>Происходит определение контейнеров Docker.</li><li>Каждое изолированное пространство получает поле имен. Оно будет уникальным.</li><li>Имена – это то, что отвечает за предоставление доступа к контейнерам.</li><li>Ограничения на процессы внутри изолированного пространства устанавливаются при помощи «значения» namespace.</li></ol>
<p>При работе с движками задействуются контрольные группы – crgoups. Приложение получает ограничения по ресурсным наборам. Контрольные группы организовывают обмен аппаратными возможностями с контейнерами, на которые дополнительно устанавливаются разнообразные ограничительные «меры».</p>
<p>Движок объединяет пространство имен, контрольные группы, а также файловые системы. В результате получается формат container. Разработчики подумывают над внедрением новых форматов. Они будут реализовываться через интегрирование BSD или Solaris.</p>
<h4 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9F%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81%D1%8B_%D0%BF%D0%BE%D1%81%D0%BB%D0%B5_%D0%B7%D0%B0%D0%BF%D1%83%D1%81%D0%BA%D0%B0"></span>Процессы после запуска<span class="ez-toc-section-end"></span></h4>
<p>Многие интересуются, что будет происходить после того, как изолированное пространство окажется запущенным. Алгоритм окажется следующим:</p>
<ol type="1"><li>Пользователь запускает Докер образ.</li><li>Движок начинает поиск соответствующего объекта. Если он имеет локальное предназначение, происходит создание нового изолированного пространства. Иначе Image подгружается из Хаба.</li><li>Система создает контейнер из полученного образа.</li><li>Файловой системе присваивается определенная разметка.</li><li>Осуществляется добавление слоев записи и создание сетевого интерфейса.</li><li>Происходит присваивание (с предварительным поиском) такого элемента, как IP адрес.</li><li>Заданный процесс проходит стадию обработки.</li><li>Активируется захват «ввод-вывод» утилиты.</li></ol>
<p>Докер контейнеры и его составляющие могут корректироваться. Для этого используются специальные команды. Но это только один из возможных вариантов развития событий. Управление Docker производится и через специальные элементы.</p>
<p>Вторую часть статьи читайте <a href="https://otus.ru/journal/znakomstvo-s-docker-ot-a-do-ya-chto-zachem-i-pochemu-chast-2/" data-wpel-link="internal">здесь</a>. </p>
<figure class="wp-block-image size-large"><a href="https://otus.ru/lessons/devops-praktiki-i-instrumenty/?utm_source=oj&utm_medium=affilate&utm_campaign=devops" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer"><img decoding="async" width="970" height="90" src="https://otus.ru/journal/wp-content/uploads/2021/10/DevOps_970x90-2.png" alt="Знакомство с Docker от А до Я: что, зачем и почему" class="wp-image-2182" srcset="https://otus.ru/journal/wp-content/uploads/2021/10/DevOps_970x90-2.png 970w, https://otus.ru/journal/wp-content/uploads/2021/10/DevOps_970x90-2-300x28.png 300w, https://otus.ru/journal/wp-content/uploads/2021/10/DevOps_970x90-2-150x14.png 150w, https://otus.ru/journal/wp-content/uploads/2021/10/DevOps_970x90-2-768x71.png 768w" sizes="(max-width: 970px) 100vw, 970px" /></a></figure>
<p></p>
</div><!-- .post-content -->
<div class="the-post-foot cf">
<div class="tag-share cf">
<div class="post-tags"><a href="https://otus.ru/journal/tag/devops/" rel="tag" data-wpel-link="internal">devops</a><a href="https://otus.ru/journal/tag/docker/" rel="tag" data-wpel-link="internal">Docker</a></div>
<div class="post-share">
<div class="post-share-icons cf">
<span class="counters">
</span>
<a href="https://www.facebook.com/sharer.php?u=https%3A%2F%2Fotus.ru%2Fjournal%2Fznakomstvo-s-docker-ot-a-do-ya-chto-zachem-i-pochemu%2F" class="link facebook wpel-icon-right" target="_blank" title="Share on Facebook" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-facebook"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
<a href="https://twitter.com/intent/tweet?url=https%3A%2F%2Fotus.ru%2Fjournal%2Fznakomstvo-s-docker-ot-a-do-ya-chto-zachem-i-pochemu%2F&text=%D0%97%D0%BD%D0%B0%D0%BA%D0%BE%D0%BC%D1%81%D1%82%D0%B2%D0%BE%20%D1%81%20Docker%20%D0%BE%D1%82%20%D0%90%20%D0%B4%D0%BE%20%D0%AF%3A%20%D1%87%D1%82%D0%BE%2C%20%D0%B7%D0%B0%D1%87%D0%B5%D0%BC%20%D0%B8%20%D0%BF%D0%BE%D1%87%D0%B5%D0%BC%D1%83" class="link twitter wpel-icon-right" target="_blank" title="Share on Twitter" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-twitter"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
<a href="https://www.linkedin.com/shareArticle?mini=true&url=https%3A%2F%2Fotus.ru%2Fjournal%2Fznakomstvo-s-docker-ot-a-do-ya-chto-zachem-i-pochemu%2F" class="link linkedin wpel-icon-right" target="_blank" title="LinkedIn" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-linkedin"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
<a href="https://pinterest.com/pin/create/button/?url=https%3A%2F%2Fotus.ru%2Fjournal%2Fznakomstvo-s-docker-ot-a-do-ya-chto-zachem-i-pochemu%2F&media=https%3A%2F%2Fotus.ru%2Fjournal%2Fwp-content%2Fuploads%2F2021%2F10%2Foj-1080x720-12.png&description=%D0%97%D0%BD%D0%B0%D0%BA%D0%BE%D0%BC%D1%81%D1%82%D0%B2%D0%BE%20%D1%81%20Docker%20%D0%BE%D1%82%20%D0%90%20%D0%B4%D0%BE%20%D0%AF%3A%20%D1%87%D1%82%D0%BE%2C%20%D0%B7%D0%B0%D1%87%D0%B5%D0%BC%20%D0%B8%20%D0%BF%D0%BE%D1%87%D0%B5%D0%BC%D1%83" class="link pinterest wpel-icon-right" target="_blank" title="Pinterest" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-pinterest-p"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
</div>
</div>
</div>
</div>
<div class="post-nav">
<div class="post previous cf">
<a href="https://otus.ru/journal/karera-v-devops-opisanie-zarplata-osobennosti/" title="Prev Post" class="nav-icon" data-wpel-link="internal">
<i class="fa fa-angle-left"></i>
</a>
<span class="content">
<a href="https://otus.ru/journal/karera-v-devops-opisanie-zarplata-osobennosti/" class="image-link" rel="previous" data-wpel-link="internal">
<img width="150" height="100" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20150%20100%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="attachment-thumbnail size-thumbnail lazyload wp-post-image" alt="Карьера в DevOps: описание, зарплата, особенности" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2021/10/oj-1080x720-11-150x100.png 150w, https://otus.ru/journal/wp-content/uploads/2021/10/oj-1080x720-11-300x200.png 300w, https://otus.ru/journal/wp-content/uploads/2021/10/oj-1080x720-11-1024x683.png 1024w, https://otus.ru/journal/wp-content/uploads/2021/10/oj-1080x720-11-768x512.png 768w, https://otus.ru/journal/wp-content/uploads/2021/10/oj-1080x720-11-270x180.png 270w, https://otus.ru/journal/wp-content/uploads/2021/10/oj-1080x720-11-770x515.png 770w, https://otus.ru/journal/wp-content/uploads/2021/10/oj-1080x720-11-370x245.png 370w, https://otus.ru/journal/wp-content/uploads/2021/10/oj-1080x720-11.png 1080w" data-src="https://otus.ru/journal/wp-content/uploads/2021/10/oj-1080x720-11-150x100.png" data-sizes="(max-width: 150px) 100vw, 150px" title="Карьера в DevOps: описание, зарплата, особенности" /> </a>
<div class="post-meta">
<span class="label">Prev Post</span>
<div class="post-meta post-meta-b">
<h2 class="post-title">
<a href="https://otus.ru/journal/karera-v-devops-opisanie-zarplata-osobennosti/" data-wpel-link="internal">Карьера в DevOps: описание, зарплата, особенности</a>
</h2>
<div class="below">
<a href="https://otus.ru/journal/karera-v-devops-opisanie-zarplata-osobennosti/" class="meta-item date-link" data-wpel-link="internal"><time class="post-date" datetime="2021-10-19T17:12:54+00:00">19 октября, 2021</time></a>
<span class="meta-sep"></span>
<span class="meta-item read-time">8 Mins Read</span>
</div>
</div> </div>
</span>
</div>
<div class="post next cf">
<a href="https://otus.ru/journal/znakomstvo-s-docker-ot-a-do-ya-chto-zachem-i-pochemu-chast-2/" title="Next Post" class="nav-icon" data-wpel-link="internal">
<i class="fa fa-angle-right"></i>
</a>
<span class="content">
<a href="https://otus.ru/journal/znakomstvo-s-docker-ot-a-do-ya-chto-zachem-i-pochemu-chast-2/" class="image-link" rel="next" data-wpel-link="internal">
<img width="150" height="100" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20150%20100%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="attachment-thumbnail size-thumbnail lazyload wp-post-image" alt="Знакомство с Docker от А до Я: что, зачем и почему. Часть 2" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2021/10/oj-1080x720-13-150x100.png 150w, https://otus.ru/journal/wp-content/uploads/2021/10/oj-1080x720-13-300x200.png 300w, https://otus.ru/journal/wp-content/uploads/2021/10/oj-1080x720-13-1024x683.png 1024w, https://otus.ru/journal/wp-content/uploads/2021/10/oj-1080x720-13-768x512.png 768w, https://otus.ru/journal/wp-content/uploads/2021/10/oj-1080x720-13-270x180.png 270w, https://otus.ru/journal/wp-content/uploads/2021/10/oj-1080x720-13-770x515.png 770w, https://otus.ru/journal/wp-content/uploads/2021/10/oj-1080x720-13-370x245.png 370w, https://otus.ru/journal/wp-content/uploads/2021/10/oj-1080x720-13.png 1080w" data-src="https://otus.ru/journal/wp-content/uploads/2021/10/oj-1080x720-13-150x100.png" data-sizes="(max-width: 150px) 100vw, 150px" title="Знакомство с Docker от А до Я: что, зачем и почему. Часть 2" /> </a>
<div class="post-meta">
<span class="label">Next Post</span>
<div class="post-meta post-meta-b">
<h2 class="post-title">
<a href="https://otus.ru/journal/znakomstvo-s-docker-ot-a-do-ya-chto-zachem-i-pochemu-chast-2/" data-wpel-link="internal">Знакомство с Docker от А до Я: что, зачем и почему. Часть 2</a>
</h2>
<div class="below">
<a href="https://otus.ru/journal/znakomstvo-s-docker-ot-a-do-ya-chto-zachem-i-pochemu-chast-2/" class="meta-item date-link" data-wpel-link="internal"><time class="post-date" datetime="2021-10-19T17:57:56+00:00">19 октября, 2021</time></a>
<span class="meta-sep"></span>
<span class="meta-item read-time">6 Mins Read</span>
</div>
</div> </div>
</span>
</div>
</div>
<section class="related-posts grid-3">
<h4 class="section-head"><span class="title">Читать ещё</span></h4>
<div class="ts-row posts cf">
<article class="post col-4">
<a href="https://otus.ru/journal/uroven-gotovnosti-cto-k-2026/" title="Уровень готовности CTO к 2026" class="image-link" data-wpel-link="internal">
<img width="270" height="180" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20270%20180%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="image lazyload wp-post-image" alt="Уровень готовности CTO к 2026" title="Уровень готовности CTO к 2026" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-270x180.jpg 270w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-770x515.jpg 770w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-370x245.jpg 370w" data-src="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-270x180.jpg" data-sizes="(max-width: 270px) 100vw, 270px" /> </a>
<div class="content">
<h3 class="post-title"><a href="https://otus.ru/journal/uroven-gotovnosti-cto-k-2026/" class="post-link" data-wpel-link="internal">Уровень готовности CTO к 2026</a></h3>
<div class="post-meta">
<time class="post-date" datetime="2025-11-16T19:50:59+00:00">16 ноября, 2025</time>
</div>
</div>
</article >
<article class="post col-4">
<a href="https://otus.ru/journal/novye-uroki-noyabrya-tolko-top-temy-po-programmirovaniju/" title="Новые уроки ноября: только топ-темы по программированию" class="image-link" data-wpel-link="internal">
<img width="270" height="180" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20270%20180%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="image lazyload wp-post-image" alt="Новые уроки ноября: только топ-темы по программированию" title="Новые уроки ноября: только топ-темы по программированию" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-270x180.jpg 270w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-770x515.jpg 770w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-370x245.jpg 370w" data-src="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-270x180.jpg" data-sizes="(max-width: 270px) 100vw, 270px" /> </a>
<div class="content">
<h3 class="post-title"><a href="https://otus.ru/journal/novye-uroki-noyabrya-tolko-top-temy-po-programmirovaniju/" class="post-link" data-wpel-link="internal">Новые уроки ноября: только топ-темы по программированию</a></h3>
<div class="post-meta">
<time class="post-date" datetime="2025-11-09T23:24:11+00:00">9 ноября, 2025</time>
</div>
</div>
</article >
<article class="post col-4">
<a href="https://otus.ru/journal/schjot-idjot-na-chasy/" title="Счёт идёт на часы" class="image-link" data-wpel-link="internal">
<img width="270" height="180" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20270%20180%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="image lazyload wp-post-image" alt="Счёт идёт на часы" title="Счёт идёт на часы" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-270x180.png 270w, https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-770x515.png 770w, https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-370x245.png 370w" data-src="https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-270x180.png" data-sizes="(max-width: 270px) 100vw, 270px" /> </a>
<div class="content">
<h3 class="post-title"><a href="https://otus.ru/journal/schjot-idjot-na-chasy/" class="post-link" data-wpel-link="internal">Счёт идёт на часы</a></h3>
<div class="post-meta">
<time class="post-date" datetime="2025-10-30T15:04:59+00:00">30 октября, 2025</time>
</div>
</div>
</article >
</div>
</section>
</article> <!-- .the-post -->
</div>
<aside class="col-4 sidebar">
<div class="inner">
<ul>
<li id="search-2" class="widget widget_search"><h5 class="widget-title"><span>Поиск по блогу</span></h5>
<form method="get" class="search-form" action="https://otus.ru/journal/">
<label>
<span class="screen-reader-text">Search for:</span>
<input type="search" class="search-field" placeholder="Введите запрос и нажмите Enter" value="" name="s" title="Search for:" />
</label>
<button type="submit" class="search-submit"><i class="fa fa-search"></i></button>
</form>
</li>
<li id="tag_cloud-5" class="widget widget_tag_cloud"><h5 class="widget-title"><span>Метки</span></h5><div class="tagcloud"><a href="https://otus.ru/journal/tag/android-2/" class="tag-cloud-link tag-link-74 tag-link-position-1" style="font-size: 12.472222222222pt;" aria-label="Android (34 элемента)" data-wpel-link="internal">Android</a>
<a href="https://otus.ru/journal/tag/c-3/" class="tag-cloud-link tag-link-91 tag-link-position-2" style="font-size: 10.916666666667pt;" aria-label="C (23 элемента)" data-wpel-link="internal">C</a>
<a href="https://otus.ru/journal/tag/c-2/" class="tag-cloud-link tag-link-81 tag-link-position-3" style="font-size: 12.666666666667pt;" aria-label="C# (35 элементов)" data-wpel-link="internal">C#</a>
<a href="https://otus.ru/journal/tag/c/" class="tag-cloud-link tag-link-20 tag-link-position-4" style="font-size: 12.472222222222pt;" aria-label="c++ (34 элемента)" data-wpel-link="internal">c++</a>
<a href="https://otus.ru/journal/tag/computer-science/" class="tag-cloud-link tag-link-209 tag-link-position-5" style="font-size: 15.972222222222pt;" aria-label="computer science (78 элементов)" data-wpel-link="internal">computer science</a>
<a href="https://otus.ru/journal/tag/css/" class="tag-cloud-link tag-link-288 tag-link-position-6" style="font-size: 8.6805555555556pt;" aria-label="CSS (13 элементов)" data-wpel-link="internal">CSS</a>
<a href="https://otus.ru/journal/tag/data-science/" class="tag-cloud-link tag-link-151 tag-link-position-7" style="font-size: 8pt;" aria-label="Data Science (11 элементов)" data-wpel-link="internal">Data Science</a>
<a href="https://otus.ru/journal/tag/devops/" class="tag-cloud-link tag-link-98 tag-link-position-8" style="font-size: 10.138888888889pt;" aria-label="devops (19 элементов)" data-wpel-link="internal">devops</a>
<a href="https://otus.ru/journal/tag/docker/" class="tag-cloud-link tag-link-143 tag-link-position-9" style="font-size: 8.2916666666667pt;" aria-label="Docker (12 элементов)" data-wpel-link="internal">Docker</a>
<a href="https://otus.ru/journal/tag/gamedev/" class="tag-cloud-link tag-link-25 tag-link-position-10" style="font-size: 11.694444444444pt;" aria-label="gamedev (28 элементов)" data-wpel-link="internal">gamedev</a>
<a href="https://otus.ru/journal/tag/hr/" class="tag-cloud-link tag-link-103 tag-link-position-11" style="font-size: 8pt;" aria-label="hr (11 элементов)" data-wpel-link="internal">hr</a>
<a href="https://otus.ru/journal/tag/html/" class="tag-cloud-link tag-link-217 tag-link-position-12" style="font-size: 11.208333333333pt;" aria-label="HTML (25 элементов)" data-wpel-link="internal">HTML</a>
<a href="https://otus.ru/journal/tag/ios/" class="tag-cloud-link tag-link-101 tag-link-position-13" style="font-size: 8.9722222222222pt;" aria-label="iOS (14 элементов)" data-wpel-link="internal">iOS</a>
<a href="https://otus.ru/journal/tag/it/" class="tag-cloud-link tag-link-50 tag-link-position-14" style="font-size: 10.527777777778pt;" aria-label="IT (21 элемент)" data-wpel-link="internal">IT</a>
<a href="https://otus.ru/journal/tag/java/" class="tag-cloud-link tag-link-75 tag-link-position-15" style="font-size: 15.680555555556pt;" aria-label="Java (73 элемента)" data-wpel-link="internal">Java</a>
<a href="https://otus.ru/journal/tag/javascript/" class="tag-cloud-link tag-link-83 tag-link-position-16" style="font-size: 14.319444444444pt;" aria-label="JavaScript (53 элемента)" data-wpel-link="internal">JavaScript</a>
<a href="https://otus.ru/journal/tag/linux/" class="tag-cloud-link tag-link-141 tag-link-position-17" style="font-size: 11.888888888889pt;" aria-label="Linux (29 элементов)" data-wpel-link="internal">Linux</a>
<a href="https://otus.ru/journal/tag/machine-learning/" class="tag-cloud-link tag-link-167 tag-link-position-18" style="font-size: 8.6805555555556pt;" aria-label="Machine Learning (13 элементов)" data-wpel-link="internal">Machine Learning</a>
<a href="https://otus.ru/journal/tag/otus-book/" class="tag-cloud-link tag-link-261 tag-link-position-19" style="font-size: 9.9444444444444pt;" aria-label="otus book (18 элементов)" data-wpel-link="internal">otus book</a>
<a href="https://otus.ru/journal/tag/php/" class="tag-cloud-link tag-link-45 tag-link-position-20" style="font-size: 10.527777777778pt;" aria-label="PHP (21 элемент)" data-wpel-link="internal">PHP</a>
<a href="https://otus.ru/journal/tag/python/" class="tag-cloud-link tag-link-27 tag-link-position-21" style="font-size: 16.944444444444pt;" aria-label="Python (99 элементов)" data-wpel-link="internal">Python</a>
<a href="https://otus.ru/journal/tag/qa/" class="tag-cloud-link tag-link-155 tag-link-position-22" style="font-size: 11.402777777778pt;" aria-label="qa (26 элементов)" data-wpel-link="internal">qa</a>
<a href="https://otus.ru/journal/tag/sql/" class="tag-cloud-link tag-link-38 tag-link-position-23" style="font-size: 12.861111111111pt;" aria-label="SQL (37 элементов)" data-wpel-link="internal">SQL</a>
<a href="https://otus.ru/journal/tag/team-lead/" class="tag-cloud-link tag-link-364 tag-link-position-24" style="font-size: 9.9444444444444pt;" aria-label="team lead (18 элементов)" data-wpel-link="internal">team lead</a>
<a href="https://otus.ru/journal/tag/unity/" class="tag-cloud-link tag-link-24 tag-link-position-25" style="font-size: 8pt;" aria-label="unity (11 элементов)" data-wpel-link="internal">unity</a>
<a href="https://otus.ru/journal/tag/algoritmy/" class="tag-cloud-link tag-link-30 tag-link-position-26" style="font-size: 9.9444444444444pt;" aria-label="Алгоритмы (18 элементов)" data-wpel-link="internal">Алгоритмы</a>
<a href="https://otus.ru/journal/tag/bazy-dannyh/" class="tag-cloud-link tag-link-40 tag-link-position-27" style="font-size: 10.138888888889pt;" aria-label="Базы данных (19 элементов)" data-wpel-link="internal">Базы данных</a>
<a href="https://otus.ru/journal/tag/matematika/" class="tag-cloud-link tag-link-44 tag-link-position-28" style="font-size: 10.916666666667pt;" aria-label="Математика (23 элемента)" data-wpel-link="internal">Математика</a>
<a href="https://otus.ru/journal/tag/arhitektura-po/" class="tag-cloud-link tag-link-10 tag-link-position-29" style="font-size: 9.4583333333333pt;" aria-label="архитектура ПО (16 элементов)" data-wpel-link="internal">архитектура ПО</a>
<a href="https://otus.ru/journal/tag/bazy-dannyh-2/" class="tag-cloud-link tag-link-251 tag-link-position-30" style="font-size: 10.138888888889pt;" aria-label="базы данных (19 элементов)" data-wpel-link="internal">базы данных</a>
<a href="https://otus.ru/journal/tag/vebinar/" class="tag-cloud-link tag-link-201 tag-link-position-31" style="font-size: 13.930555555556pt;" aria-label="вебинар (48 элементов)" data-wpel-link="internal">вебинар</a>
<a href="https://otus.ru/journal/tag/dajdzhest/" class="tag-cloud-link tag-link-308 tag-link-position-32" style="font-size: 10.722222222222pt;" aria-label="дайджест (22 элемента)" data-wpel-link="internal">дайджест</a>
<a href="https://otus.ru/journal/tag/zapis-vebinara/" class="tag-cloud-link tag-link-226 tag-link-position-33" style="font-size: 14.902777777778pt;" aria-label="запись вебинара (61 элемент)" data-wpel-link="internal">запись вебинара</a>
<a href="https://otus.ru/journal/tag/zapis-uroka/" class="tag-cloud-link tag-link-272 tag-link-position-34" style="font-size: 16.069444444444pt;" aria-label="запись урока (80 элементов)" data-wpel-link="internal">запись урока</a>
<a href="https://otus.ru/journal/tag/informacionnaya-bezopasnost/" class="tag-cloud-link tag-link-232 tag-link-position-35" style="font-size: 10.138888888889pt;" aria-label="информационная безопасность (19 элементов)" data-wpel-link="internal">информационная безопасность</a>
<a href="https://otus.ru/journal/tag/karera-v-it/" class="tag-cloud-link tag-link-292 tag-link-position-36" style="font-size: 9.9444444444444pt;" aria-label="карьера в IT (18 элементов)" data-wpel-link="internal">карьера в IT</a>
<a href="https://otus.ru/journal/tag/podborka/" class="tag-cloud-link tag-link-7 tag-link-position-37" style="font-size: 12.666666666667pt;" aria-label="подборка (35 элементов)" data-wpel-link="internal">подборка</a>
<a href="https://otus.ru/journal/tag/podborka-statej/" class="tag-cloud-link tag-link-219 tag-link-position-38" style="font-size: 15.777777777778pt;" aria-label="подборка статей (75 элементов)" data-wpel-link="internal">подборка статей</a>
<a href="https://otus.ru/journal/tag/programmirovanie/" class="tag-cloud-link tag-link-65 tag-link-position-39" style="font-size: 22pt;" aria-label="программирование (332 элемента)" data-wpel-link="internal">программирование</a>
<a href="https://otus.ru/journal/tag/proekt/" class="tag-cloud-link tag-link-321 tag-link-position-40" style="font-size: 11.888888888889pt;" aria-label="проект (29 элементов)" data-wpel-link="internal">проект</a>
<a href="https://otus.ru/journal/tag/proektnaya-rabota/" class="tag-cloud-link tag-link-310 tag-link-position-41" style="font-size: 11.597222222222pt;" aria-label="проектная работа (27 элементов)" data-wpel-link="internal">проектная работа</a>
<a href="https://otus.ru/journal/tag/seti/" class="tag-cloud-link tag-link-181 tag-link-position-42" style="font-size: 12.958333333333pt;" aria-label="сети (38 элементов)" data-wpel-link="internal">сети</a>
<a href="https://otus.ru/journal/tag/testirovanie/" class="tag-cloud-link tag-link-69 tag-link-position-43" style="font-size: 13.930555555556pt;" aria-label="тестирование (48 элементов)" data-wpel-link="internal">тестирование</a>
<a href="https://otus.ru/journal/tag/upravlenie-komandoj/" class="tag-cloud-link tag-link-63 tag-link-position-44" style="font-size: 11.694444444444pt;" aria-label="управление командой (28 элементов)" data-wpel-link="internal">управление командой</a>
<a href="https://otus.ru/journal/tag/habr-2/" class="tag-cloud-link tag-link-203 tag-link-position-45" style="font-size: 13.930555555556pt;" aria-label="хабр (48 элементов)" data-wpel-link="internal">хабр</a></div>
</li>
</ul>
</div>
</aside>
</div> <!-- .ts-row -->
</div> <!-- .main -->
<footer class="main-footer dark bold">
<section class="lower-footer cf">
<div class="wrap">
<div class="links">
<div class="menu-menju-navykov-container"><ul id="menu-menju-navykov-1" class="menu"><li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10413"><a href="https://otus.ru/categories/programming/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Программирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10414"><a href="https://otus.ru/categories/architecture/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Архитектура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10415"><a href="https://otus.ru/categories/operations/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Инфраструктура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10416"><a href="https://otus.ru/categories/information-security-courses/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Безопасность<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10417"><a href="https://otus.ru/categories/data-science/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Data Science<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10418"><a href="https://otus.ru/categories/gamedev/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">GameDev<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10419"><a href="https://otus.ru/categories/marketing-business/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Управление<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10420"><a href="https://otus.ru/categories/analytics/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Аналитика и анализ<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10421"><a href="https://otus.ru/categories/testing/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Тестирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
</ul></div> </div>
<p class="copyright"> © 2015-2026 OTUS </p>
<div class="to-top">
<a href="#" class="back-to-top"><i class="fa fa-angle-up"></i> Top</a>
</div>
</div>
</section>
</footer>
</div> <!-- .main-wrap -->
<div class="mobile-menu-container off-canvas" id="mobile-menu">
<a href="#" class="close"><i class="fa fa-times"></i></a>
<div class="logo">
</div>
<ul class="mobile-menu"></ul>
</div>
<div class="search-modal-wrap">
<div class="search-modal-box" role="dialog" aria-modal="true">
<form method="get" class="search-form" action="https://otus.ru/journal/">
<input type="search" class="search-field" name="s" placeholder="Search..." value="" required />
<button type="submit" class="search-submit visuallyhidden">Submit</button>
<p class="message">
Type above and press <em>Enter</em> to search. Press <em>Esc</em> to cancel. </p>
</form>
</div>
</div>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/clearfy/components/comments-plus/assets/js/url-span.js" id="wbcr-comments-plus-url-span-js"></script>
<script type="text/javascript" id="ez-toc-scroll-scriptjs-js-extra">
/* <![CDATA[ */
var eztoc_smooth_local = {"scroll_offset":"30"};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/assets/js/smooth_scroll.min.js" id="ez-toc-scroll-scriptjs-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/vendor/js-cookie/js.cookie.min.js" id="ez-toc-js-cookie-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/vendor/sticky-kit/jquery.sticky-kit.min.js" id="ez-toc-jquery-sticky-kit-js"></script>
<script type="text/javascript" id="ez-toc-js-js-extra">
/* <![CDATA[ */
var ezTOC = {"smooth_scroll":"1","visibility_hide_by_default":"","scroll_offset":"30","fallbackIcon":"<span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span>"};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/assets/js/front.min.js" id="ez-toc-js-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/custom-script.js" id="custom-script-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/magnific-popup.js" id="magnific-popup-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/jquery.fitvids.js" id="jquery-fitvids-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/imagesloaded.min.js" id="imagesloaded-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/object-fit-images.js" id="object-fit-images-js"></script>
<script type="text/javascript" id="contentberg-theme-js-extra">
/* <![CDATA[ */
var Bunyad = {"custom_ajax_url":"\/journal\/znakomstvo-s-docker-ot-a-do-ya-chto-zachem-i-pochemu\/"};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/theme.js" id="contentberg-theme-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/theia-sticky-sidebar.js" id="theia-sticky-sidebar-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/jquery.slick.js" id="jquery-slick-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/jarallax.js" id="jarallax-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/masonry.min.js" id="masonry-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/jquery/jquery.masonry.min.js" id="jquery-masonry-js"></script>
</body>
</html>
<!-- Cache served by breeze CACHE - Last modified: Mon, 09 Mar 2026 14:45:59 GMT -->