Развитие информационных технологий привело в тому, что программисты начали создавать контент, который отличается расширенным функционалом. Так появились совершенно новые понятия, о которых прежде никто не слышал.
Яркий тому пример – Docker. Для разработчиков соответствующая «составляющая» крайне важна. Но не каждый юзер понимает «с ходу» о чем идет речь.
В данной статье будет рассказано все о Докерах, его контейнерах и образах. В результате каждый пользователь сможет разобраться, за что конкретно соответствующий «софт» несет ответ. Информация полезна не только новичкам, но и опытным разрабам.
Определение понятия
Контейнер, который называется Docker – специализированное программное обеспечение с открытым исходным кодом. Может использоваться программерами совершенно свободно. Применяется на практике достаточно часто.
В основном Докер используется при:
- создании приложений «с нуля»;
- внедрении веб-контента;
- доставки софта.
Все операции необходимо осуществлять через специальные среды. Они поддерживают так называемую контейнеризацию.
Docker контейнер – программное обеспечение, придуманное для эффективного применения ресурсов и систем, развертки программного обеспечения и масштабирования софта. Соответствующий элемент отвечает за стабильную работу контента при его перенесении в другие среды.
Исторические данные
Контейнер разрабатывался с 2008 года. В те годы о Docker Build мало кто слышал. Разработку осуществлялась в закрытом пространстве.
Лишь к 2013 году рассматриваемый элемент появился в Сети под лицензией Apache 2.0. С тех пор он распространяется в Сети свободно и имеет открытый код. Изначально о контейнерах слышали владельцы и разработчики Linux. Позже они распространились на другие ОС. С 2017 года контейнеры можно использовать для коммерческих целей без существенных затруднений.
На Linux даже сегодня подобное программное обеспечение работает без проблем, поддерживая crgoups и изоляцию пространства имен. Для того, чтобы воспользоваться контейнером на других ОС, требуется задействовать дополнительные приложения вроде Kitematic.
О принципах работы
Перед тем, как создать новый контейнер, важно понимать, каким образом они вообще работают. Главным предназначением ПО является контейнеризация софта посредством визуализации. В процессе задействования инструмента нужно упаковать приложение по специальным изолированным средам. Это и есть контейнеры, «блоки».
Докер работает в разных областях:
- облачные сервисы;
- персональные компьютеры и ноутбуки;
- центры обработки информации локального характера;
- прочие устройства.
У каждого контейнера должны быть собственные настройки и элементы. Они требуются для нормального функционирования выбранной утилиты. За счет соответствующего результата получается запускать несколько контейнеров на одном и том же хосте.
Преимущества и недостатки
Докер позволяет «упаковывать» программы и переносить их в разные среды. Но, как и любые другие инструменты, он имеет как сильные, так и слабые стороны. О них должен знать каждый разработчик.
Преимущества
Docker Container – программное обеспечение для файловых систем или компьютеров. У него выделяют следующие преимущества:
- Свободное использование и открытый код. Доступен софт всем желающим. И даже новичок сможет разобраться в принципах контейнеризации.
- Ресурсопотребление. Оно не слишком большое. «Блоки» не будут отвечать за виртуализацию всей ОС.
- Скорость развертывания. Можно использовать базовый образ на Docker.
- Удобство скрытия процессов. Докер предусматривает возможность задействования разнообразных способов обработки данных. А фоновые процессы удается скрыть в несколько кликов.
- Право на работу с небезопасными кодификациями. Изолирование предусматривает запуск небезопасных кодов без вреда для операционной системы.
- Масштабирование «в несколько кликов». Расширение осуществляется, если активировать создание образов и контейнеров.
Docker Run легко запускается в хосте. Также имеется оптимизация файловой системы. Образы включают в себя слои, которые предельно эффективно используют операционную систему и ее ресурсы.
Недостатки
Минусов при запуске контейнера практически нет. Единственный момент, на который необходимо обратить внимание – это то, что «рядовой» пользователь вряд ли сможет с легкостью разобраться со спецификой ПО.
Для того, чтобы работать с Докерами, требуются навыки программирования. Также важно понимать и знать команды Docker. Лишь в этом случае с контейнеризацией не возникнет никаких проблем.
Внимание: для программиста или разработчика упомянутого минуса не будет, даже если «сотрудник» только начал свою карьеру.
Необходимые термины
Рассматривая упомянутую тему, требуется изучить и запомнить некоторые ключевые понятия. А именно:
- Контейнер – исполняемый экземпляр, отвечающий за инкапсуляцию приложения. Включает в себя так называемые образы. Его достаточно просто удалить или создать за небольшой отрезок времени.
- Образ (Docker Image)– базовый элемент того или иного контейнера. Создается за разное количество времени.
- Порт – порт TCP/UDP в исходном значении. Подключаются к «блокам» или находятся во внешнем мире.
- Реестр – сервер, используемый для хранения образов. Напоминает GitHub.
- Том – общая папка. Устанавливается на устройство при создании контейнеров. Используются для того, чтобы хранить информацию, независимо от жизненного цикла Докера.
- Docker Hub – репозиторий с интерфейсом публичного типа. Предусматривает огромное количество образов и контейнеров. Чем-то отдаленно напоминает «магазин шаблонов и образов».
- Демон – сервер контейнеров, который входит в программные средства Докера. Осуществляет управление объектами.
- Клиент – пользовательский интерфейс для взаимодействия с Докер-демоном. Включает в себя Docker Build, Docker Pull, Docker Run.
- DockerFile – файл, в котором хранятся правила и принципы сборки образа. Первая строчка здесь – это ссылка на базовый вариант. Последующие команды отвечают за копирование документов, инициализацию приложений ради создания определенной среды разработки.
Картинка выше поможет понять, из чего состоит Докер. Без этого нет никакого смысла в создании образов, а также проведении контейнеризацию.
Движок
Теперь, когда ключевые понятия рассмотрены, стоит обратить внимание на то, что разработка и создание задействованных «утилит» ведется в специальной среде. Она называется движком. Речь идет о Docker Engine.
Подобный элемент отвечает за связь между ключевыми объектами Докера: образами, реестром и контейнерами. Включает в себя:
- Сервер. Он добавляет демон (фоновую программу), которая будет использоваться при модификации и задействовании контейнеров, томов и образов.
- REST API. Специальный механизм, на который возложена ответственность за взаимодействия клиента и демона.
- Клиент. То, что позволяет осуществлять взаимодействие с серверами через команды. Последние вводятся в CLI-интерфейсе.
Принцип работы Докер-движка предельно простой:
- Сначала пользователь отдает через интерфейс демону на хосте команду.
- В зависимости от поданного «сигнала» Daemon осуществляет выполнение операций с Docker Images на основе инструкций из DockerFile.
- Организовывается работа образа непосредственно в «изолирован��ом блоке».
Если разобраться с командами и принципами их использования, никаких проблем с контейнированием не возникнет. Готовые элементы всегда можно посмотреть и отыскать с DockerHub. Но некоторые создают собственный контент для реализации тех или иных задач. На это требуется не так много времени.
О работе образов
Docker-Image является шаблоном, который имеет пометку «только для чтения». В нем хранятся готовые инструкции, используемые для того, чтобы создать новенький «изолированный блок». Включает в себя слои, которые комбинируются в единый образ посредством вспомогательной файловой системой. Она носит название UnionFS. Параметры устанавливаются в ДокерФайл.
Для того, чтобы многократно применять образ, требуется задействовать реестр. Из него скачиваются готовые варианты с внешнего репозитория сервиса. Хранение осуществляется через хост. Лучше всего производить загрузку из официальных источников. Пример – реестр Docker Trusted Registry.
При необходимости можно скачивать конкретные слои. Пример – программер захотел доработать ПО и провести модификацию образа, внеся корректировки в несколько документов. После того, как произойдет загрузка, на сервер отправят только слои с модификациями.
О работе контейнеров
Контейнер, который хотим использовать для работы, будет строиться на основе Docker-образов. Запускаются непосредственно из ядра Linux Ubuntu (и не только). За счет этого обеспечивается меньшее ресурсопотребление при виртуализации.
Изоляция обеспечивается за счет технологий namespace. Каждое изолированное пространство получает уникальную область имен, отвечающих за предоставление доступа.
Если речь идет о Docker Engine, используется иной подход:
- «В центре внимания» находятся контрольные группы – crgoups.
- Приложение ограничивают определенным набором ресурсов.
- Контрольные группы отвечают за обмен ресурсов с контейнерами, дополнительно устанавливаемыми.
Движок также объединяет контрольные группы с пространством имен и файловой системой в формат контейнера.
Что будет при запуске контейнера
Важно также понимать, что происходит с приложениями, запущенными на этом контейнере. При запуске «изолированного блока» будут реализовываться следующие операции:
- Запускается Docker Image.
- Движок проводит проверку на существование образа. При наличии оного используется соответствующий контейнер Docker. В противном случае он загружается из Docker Hub.
- Происходит создание контейнера.
- Файловая система получает разметку. На данном этапе добавляются недостающие слои для записи.
- Осуществляется создание сетевого интерфейса.
- Присваивается IP-адрес.
- Запускается заданный процесс.
Далее Docker проводит захват ввода и вывода приложения. Посредством специальных команд можно управлять объектами рассматриваемого софта.
Создание Image
Чтобы Докер Containers работали исправно, их необходимо правильно использовать. А еще – уметь управлять и создавать Images. Это не так трудно, как кажется изначально. Даже с начинающими навыками программирования удастся добиться желаемого результата.
Чтобы создать образ, требуется выбрать способ реализации поставленной задачи. Действовать можно вручную или через DockerFile. Иногда предусматривается автоматизация операции. Тогда система создает новый образ самостоятельно.
Собственными руками
В этом случае обработка изолированной среды ведется по принципу «обычного компьютера». Пользователь:
- устанавливает пакеты;
- пишет файлы;
- фиксирует команды и запускает их;
- получает на выходе образ, который используется в виде шаблона.
Попробуем сделать Alpine Image. Это – Linux Image небольшого масштаба. Добавим файл «Yeah», который содержит в себе текст «It Works!». Для этого требуется зайти в корневой каталог и открыть его.
Для того, чтобы осуществить creating file, достаточно добавить следующую запись c использованием echo:
Теперь предстоит открыть контейнер vibrant_spenc с docker ps –all. Выглядеть это будет так:
Далее в директории создаем новый Docker Image для vibrate_spence. Для отметки добавим комментарий «mine, mine, mine».
Далее удалим Docker контейнер и создам новую изолированную среду. В нем будет изначально присутствовать файл «Yeah».
Но это – только один из возможных вариантов. Через Docker File справиться с поставленной задачей тоже можно.
Decker File в помощь
Так выглядит минимальный ДокерФайл для Python:
Здесь стоит обратить внимание на следующие моменты:
- Run apt-get отвечает за обновление системных библиотек.
- Далее произошла установка make и build.
- Осуществлена проверка версии Питона на актуальность.
- Был задан рабочий каталог и файл requirements.txt скопирован в контейнер.
- Pip произвел установку всех библиотек.
- Остальной код скопирован в контейнер, проведена проверка на целостность с последующим запуском main.py.
Docker File будет работать, если структура каталога кодификации имеет следующий вид:
Остается только сменить App-name на нужную утилиту.
О командах
Чтобы был виден более заметный результат работы с Docker, требуется уточнить некоторые команды. По мере их обработки пользователь заметит те или иные изменения.
Типичная операция – docker container start. В ходе операции будет выполнен запуск Докера. Чтобы провести created нового контейнера, можно использовать запись:
Docker container run new_container.
Команды имеют определенные опции и аргументы. Вот список основных «задач», которые задают пользователи при работе с рассматриваемым объектом:
- docker stop – останавливает контейнер;
- create – создание нового изолированного пространства из выбранного image;
- run – создание и запуск контейнера;
- inspect – выводит подробную информацию о «блоке»;
- logs – осуществляет вывод cmd (выводит в консоль логи);
- expose – подсказка для пользователей относительно того, какие порты предоставлены сервисом;
- kill – отключает контейнер, игнорируя сохранение корректировок.
Есть еще docker rm. Команда удаляет выбранный контейнер. Но он предварительно должен быть отключен.
Внимание: apt-get install – набор утилит для установки пакетов в Linux, который может пригодиться при работе с Докерами.
Как лучше узнать Докеры
Для того, чтобы понимать, что такое id Image from Docker, а также какие макаром происходит работа внутри контейнера, стоит внимательно изучить соответствующую тему.
Стать настоящим специалистом в подобной области помогают специализированные курсы. Они проводятся как очно, так и дистанционно. После того, как создастся группа желающих, образовательный центр предоставит программу обучения. В результате пользователь сможет изучить 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/docker-chto-eto-takoe-osobennosti-sozdanie/" />
<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\/docker-chto-eto-takoe-osobennosti-sozdanie\/#article","name":"Docker: \u0447\u0442\u043e \u044d\u0442\u043e \u0442\u0430\u043a\u043e\u0435, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438, \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 OTUS","headline":"Docker: \u0447\u0442\u043e \u044d\u0442\u043e \u0442\u0430\u043a\u043e\u0435, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438, \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435","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-14.png","width":1080,"height":720},"datePublished":"2021-10-19T18:26:14+00:00","dateModified":"2021-10-19T18:26:15+00:00","inLanguage":"ru-RU","mainEntityOfPage":{"@id":"https:\/\/otus.ru\/journal\/docker-chto-eto-takoe-osobennosti-sozdanie\/#webpage"},"isPartOf":{"@id":"https:\/\/otus.ru\/journal\/docker-chto-eto-takoe-osobennosti-sozdanie\/#webpage"},"articleSection":"\u041f\u043e\u043b\u0435\u0437\u043d\u043e\u0435, devops, Docker"},{"@type":"BreadcrumbList","@id":"https:\/\/otus.ru\/journal\/docker-chto-eto-takoe-osobennosti-sozdanie\/#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\/docker-chto-eto-takoe-osobennosti-sozdanie\/#listItem"},{"@type":"ListItem","@id":"https:\/\/otus.ru\/journal\/docker-chto-eto-takoe-osobennosti-sozdanie\/#listItem","position":2,"name":"Docker: \u0447\u0442\u043e \u044d\u0442\u043e \u0442\u0430\u043a\u043e\u0435, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438, \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435","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\/docker-chto-eto-takoe-osobennosti-sozdanie\/#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\/docker-chto-eto-takoe-osobennosti-sozdanie\/#webpage","url":"https:\/\/otus.ru\/journal\/docker-chto-eto-takoe-osobennosti-sozdanie\/","name":"Docker: \u0447\u0442\u043e \u044d\u0442\u043e \u0442\u0430\u043a\u043e\u0435, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438, \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 OTUS","description":"\u0420\u0430\u0437\u0432\u0438\u0442\u0438\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0439 \u043f\u0440\u0438\u0432\u0435\u043b\u043e \u0432 \u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u044b \u043d\u0430\u0447\u0430\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u0442\u0435\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u044b\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u043e\u043c. \u0422\u0430\u043a \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043d\u043e\u0432\u044b\u0435 \u043f\u043e\u043d\u044f\u0442\u0438\u044f, \u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u0440\u0435\u0436\u0434\u0435 \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u0441\u043b\u044b\u0448\u0430\u043b. \u042f\u0440\u043a\u0438\u0439 \u0442\u043e\u043c\u0443 \u043f\u0440\u0438\u043c\u0435\u0440 \u2013 Docker. \u0414\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0430\u044f \u00ab\u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0430\u044f\u00bb \u043a\u0440\u0430\u0439\u043d\u0435 \u0432\u0430\u0436\u043d\u0430. \u041d\u043e \u043d\u0435 \u043a\u0430\u0436\u0434\u044b\u0439 \u044e\u0437\u0435\u0440 \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442 \u00ab\u0441 \u0445\u043e\u0434\u0443\u00bb \u043e \u0447\u0435\u043c \u0438\u0434\u0435\u0442 \u0440\u0435\u0447\u044c. \u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043d\u043e \u0432\u0441\u0435 \u043e","inLanguage":"ru-RU","isPartOf":{"@id":"https:\/\/otus.ru\/journal\/#website"},"breadcrumb":{"@id":"https:\/\/otus.ru\/journal\/docker-chto-eto-takoe-osobennosti-sozdanie\/#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-14.png","@id":"https:\/\/otus.ru\/journal\/docker-chto-eto-takoe-osobennosti-sozdanie\/#mainImage","width":1080,"height":720},"primaryImageOfPage":{"@id":"https:\/\/otus.ru\/journal\/docker-chto-eto-takoe-osobennosti-sozdanie\/#mainImage"},"datePublished":"2021-10-19T18:26:14+00:00","dateModified":"2021-10-19T18:26:15+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/2190" /><link rel='shortlink' href='https://otus.ru/journal/?p=2190' />
<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%2Fdocker-chto-eto-takoe-osobennosti-sozdanie%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%2Fdocker-chto-eto-takoe-osobennosti-sozdanie%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-2190 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-2190" class="the-post post-2190 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/docker-chto-eto-takoe-osobennosti-sozdanie/" 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-14.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-14-770x515.png 770w, https://otus.ru/journal/wp-content/uploads/2021/10/oj-1080x720-14-300x200.png 300w, https://otus.ru/journal/wp-content/uploads/2021/10/oj-1080x720-14-1024x683.png 1024w, https://otus.ru/journal/wp-content/uploads/2021/10/oj-1080x720-14-150x100.png 150w, https://otus.ru/journal/wp-content/uploads/2021/10/oj-1080x720-14-270x180.png 270w" data-src="https://otus.ru/journal/wp-content/uploads/2021/10/oj-1080x720-14-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%9E%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BE%D0%BD%D1%8F%D1%82%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-2" href="#%D0%98%D1%81%D1%82%D0%BE%D1%80%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5" 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%9E_%D0%BF%D1%80%D0%B8%D0%BD%D1%86%D0%B8%D0%BF%D0%B0%D1%85_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B" 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%D1%80%D0%B5%D0%B8%D0%BC%D1%83%D1%89%D0%B5%D1%81%D1%82%D0%B2%D0%B0_%D0%B8_%D0%BD%D0%B5%D0%B4%D0%BE%D1%81%D1%82%D0%B0%D1%82%D0%BA%D0%B8" 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%9D%D0%B5%D0%BE%D0%B1%D1%85%D0%BE%D0%B4%D0%B8%D0%BC%D1%8B%D0%B5_%D1%82%D0%B5%D1%80%D0%BC%D0%B8%D0%BD%D1%8B" title="Необходимые термины">Необходимые термины</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-8" href="#%D0%94%D0%B2%D0%B8%D0%B6%D0%BE%D0%BA" title="Движок">Движок</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-9" href="#%D0%9E_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B5_%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2" title="О работе образов">О работе образов</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-10" 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-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-11" href="#%D0%A7%D1%82%D0%BE_%D0%B1%D1%83%D0%B4%D0%B5%D1%82_%D0%BF%D1%80%D0%B8_%D0%B7%D0%B0%D0%BF%D1%83%D1%81%D0%BA%D0%B5_%D0%BA%D0%BE%D0%BD%D1%82%D0%B5%D0%B9%D0%BD%D0%B5%D1%80%D0%B0" title="Что будет при запуске контейнера">Что будет при запуске контейнера</a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-12" href="#%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_Image" title="Создание Image">Создание Image</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-13" href="#%D0%A1%D0%BE%D0%B1%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D1%8B%D0%BC%D0%B8_%D1%80%D1%83%D0%BA%D0%B0%D0%BC%D0%B8" title="Собственными руками">Собственными руками</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-14" href="#Decker_File_%D0%B2_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C" title="Decker File в помощь">Decker File в помощь</a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-15" href="#%D0%9E_%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%B0%D1%85" title="О командах">О командах</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-16" href="#%D0%9A%D0%B0%D0%BA_%D0%BB%D1%83%D1%87%D1%88%D0%B5_%D1%83%D0%B7%D0%BD%D0%B0%D1%82%D1%8C_%D0%94%D0%BE%D0%BA%D0%B5%D1%80%D1%8B" title="Как лучше узнать Докеры">Как лучше узнать Докеры</a></li></ul></nav></div>
<p>Развитие информационных технологий привело в тому, что программисты начали создавать контент, который отличается расширенным функционалом. Так появились совершенно новые понятия, о которых прежде никто не слышал.</p>
<p>Яркий тому пример – Docker. Для разработчиков соответствующая «составляющая» крайне важна. Но не каждый юзер понимает «с ходу» о чем идет речь.</p>
<p>В данной статье будет рассказано все о Докерах, его контейнерах и образах. В результате каждый пользователь сможет разобраться, за что конкретно соответствующий «софт» несет ответ. Информация полезна не только новичкам, но и опытным разрабам.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9E%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BE%D0%BD%D1%8F%D1%82%D0%B8%D1%8F"></span>Определение понятия<span class="ez-toc-section-end"></span></h2>
<p>Контейнер, который называется Docker – специализированное программное обеспечение с открытым исходным кодом. Может использоваться программерами совершенно свободно. Применяется на практике достаточно часто.</p>
<p>В основном Докер используется при:</p>
<ul><li>создании приложений «с нуля»;</li><li>внедрении веб-контента;</li><li>доставки софта.</li></ul>
<p>Все операции необходимо осуществлять через специальные среды. Они поддерживают так называемую контейнеризацию.</p>
<p>Docker контейнер – программное обеспечение, придуманное для эффективного применения ресурсов и систем, развертки программного обеспечения и масштабирования софта. Соответствующий элемент отвечает за стабильную работу контента при его перенесении в другие среды.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%98%D1%81%D1%82%D0%BE%D1%80%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5"></span>Исторические данные<span class="ez-toc-section-end"></span></h2>
<p>Контейнер разрабатывался с 2008 года. В те годы о Docker Build мало кто слышал. Разработку осуществлялась в закрытом пространстве.</p>
<p>Лишь к 2013 году рассматриваемый элемент появился в Сети под лицензией Apache 2.0. С тех пор он распространяется в Сети свободно и имеет открытый код. Изначально о контейнерах слышали владельцы и разработчики Linux. Позже они распространились на другие ОС. С 2017 года контейнеры можно использовать для коммерческих целей без существенных затруднений.</p>
<p>На Linux даже сегодня подобное программное обеспечение работает без проблем, поддерживая crgoups и изоляцию пространства имен. Для того, чтобы воспользоваться контейнером на других ОС, требуется задействовать дополнительные приложения вроде Kitematic.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9E_%D0%BF%D1%80%D0%B8%D0%BD%D1%86%D0%B8%D0%BF%D0%B0%D1%85_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B"></span>О принципах работы<span class="ez-toc-section-end"></span></h2>
<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%D1%80%D0%B5%D0%B8%D0%BC%D1%83%D1%89%D0%B5%D1%81%D1%82%D0%B2%D0%B0_%D0%B8_%D0%BD%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></h2>
<p>Докер позволяет «упаковывать» программы и переносить их в разные среды. Но, как и любые другие инструменты, он имеет как сильные, так и слабые стороны. О них должен знать каждый разработчик.</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>Docker Container – программное обеспечение для файловых систем или компьютеров. У него выделяют следующие преимущества:</p>
<ol type="1"><li>Свободное использование и открытый код. Доступен софт всем желающим. И даже новичок сможет разобраться в принципах контейнеризации.</li><li>Ресурсопотребление. Оно не слишком большое. «Блоки» не будут отвечать за виртуализацию всей ОС.</li><li>Скорость развертывания. Можно использовать базовый образ на Docker.</li><li>Удобство скрытия процессов. Докер предусматривает возможность задействования разнообразных способов обработки данных. А фоновые процессы удается скрыть в несколько кликов.</li><li>Право на работу с небезопасными кодификациями. Изолирование предусматривает запуск небезопасных кодов без вреда для операционной системы.</li><li>Масштабирование «в несколько кликов». Расширение осуществляется, если активировать создание образов и контейнеров.</li></ol>
<p>Docker Run легко запускается в хосте. Также имеется оптимизация файловой системы. Образы включают в себя слои, которые предельно эффективно используют операционную систему и ее ресурсы.</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>Для того, чтобы работать с Докерами, требуются навыки программирования. Также важно понимать и знать команды Docker. Лишь в этом случае с контейнеризацией не возникнет никаких проблем.</p>
<p>Внимание: для программиста или разработчика упомянутого минуса не будет, даже если «сотрудник» только начал свою карьеру.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9D%D0%B5%D0%BE%D0%B1%D1%85%D0%BE%D0%B4%D0%B8%D0%BC%D1%8B%D0%B5_%D1%82%D0%B5%D1%80%D0%BC%D0%B8%D0%BD%D1%8B"></span>Необходимые термины<span class="ez-toc-section-end"></span></h2>
<p>Рассматривая упомянутую тему, требуется изучить и запомнить некоторые ключевые понятия. А именно:</p>
<ol type="1"><li>Контейнер – исполняемый экземпляр, отвечающий за инкапсуляцию приложения. Включает в себя так называемые образы. Его достаточно просто удалить или создать за небольшой отрезок времени.</li><li>Образ (Docker Image)– базовый элемент того или иного контейнера. Создается за разное количество времени.</li><li>Порт – порт TCP/UDP в исходном значении. Подключаются к «блокам» или находятся во внешнем мире.</li><li>Реестр – сервер, используемый для хранения образов. Напоминает GitHub.</li><li>Том – общая папка. Устанавливается на устройство при создании контейнеров. Используются для того, чтобы хранить информацию, независимо от жизненного цикла Докера.</li><li>Docker Hub – репозиторий с интерфейсом публичного типа. Предусматривает огромное количество образов и контейнеров. Чем-то отдаленно напоминает «магазин шаблонов и образов».</li><li>Демон – сервер контейнеров, который входит в программные средства Докера. Осуществляет управление объектами.</li><li>Клиент – пользовательский интерфейс для взаимодействия с Докер-демоном. Включает в себя Docker Build, Docker Pull, Docker Run.</li><li>DockerFile – файл, в котором хранятся правила и принципы сборки образа. Первая строчка здесь – это ссылка на базовый вариант. Последующие команды отвечают за копирование документов, инициализацию приложений ради создания определенной среды разработки.</li></ol>
<figure class="wp-block-image size-large"><img decoding="async" width="883" height="568" src="https://otus.ru/journal/wp-content/uploads/2021/10/1-1.jpg" alt="Docker: что это такое, особенности, создание" class="wp-image-2193" srcset="https://otus.ru/journal/wp-content/uploads/2021/10/1-1.jpg 883w, https://otus.ru/journal/wp-content/uploads/2021/10/1-1-300x193.jpg 300w, https://otus.ru/journal/wp-content/uploads/2021/10/1-1-150x96.jpg 150w, https://otus.ru/journal/wp-content/uploads/2021/10/1-1-768x494.jpg 768w" sizes="(max-width: 883px) 100vw, 883px" /></figure>
<p>Картинка выше поможет понять, из чего состоит Докер. Без этого нет никакого смысла в создании образов, а также проведении контейнеризацию.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%94%D0%B2%D0%B8%D0%B6%D0%BE%D0%BA"></span>Движок<span class="ez-toc-section-end"></span></h2>
<p>Теперь, когда ключевые понятия рассмотрены, стоит обратить внимание на то, что разработка и создание задействованных «утилит» ведется в специальной среде. Она называется движком. Речь идет о Docker Engine.</p>
<p>Подобный элемент отвечает за связь между ключевыми объектами Докера: образами, реестром и контейнерами. Включает в себя:</p>
<ol type="1"><li>Сервер. Он добавляет демон (фоновую программу), которая будет использоваться при модификации и задействовании контейнеров, томов и образов.</li><li>REST API. Специальный механизм, на который возложена ответственность за взаимодействия клиента и демона.</li><li>Клиент. То, что позволяет осуществлять взаимодействие с серверами через команды. Последние вводятся в CLI-интерфейсе.</li></ol>
<p>Принцип работы Докер-движка предельно простой:</p>
<ol type="1"><li>Сначала пользователь отдает через интерфейс демону на хосте команду.</li><li>В зависимости от поданного «сигнала» Daemon осуществляет выполнение операций с Docker Images на основе инструкций из DockerFile.</li><li>Организовывается работа образа непосредственно в «изолированном блоке».</li></ol>
<p>Если разобраться с командами и принципами их использования, никаких проблем с контейнированием не возникнет. Готовые элементы всегда можно посмотреть и отыскать с DockerHub. Но некоторые создают собственный контент для реализации тех или иных задач. На это требуется не так много времени.</p>
<h2 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%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2"></span>О работе образов<span class="ez-toc-section-end"></span></h2>
<p>Docker-Image является шаблоном, который имеет пометку «только для чтения». В нем хранятся готовые инструкции, используемые для того, чтобы создать новенький «изолированный блок». Включает в себя слои, которые комбинируются в единый образ посредством вспомогательной файловой системой. Она носит название UnionFS. Параметры устанавливаются в ДокерФайл.</p>
<p>Для того, чтобы многократно применять образ, требуется задействовать реестр. Из него скачиваются готовые варианты с внешнего репозитория сервиса. Хранение осуществляется через хост. Лучше всего производить загрузку из официальных источников. Пример – реестр Docker Trusted Registry.</p>
<p>При необходимости можно скачивать конкретные слои. Пример – программер захотел доработать ПО и провести модификацию образа, внеся корректировки в несколько документов. После того, как произойдет загрузка, на сервер отправят только слои с модификациями.</p>
<h2 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></h2>
<p>Контейнер, который хотим использовать для работы, будет строиться на основе Docker-образов. Запускаются непосредственно из ядра Linux Ubuntu (и не только). За счет этого обеспечивается меньшее ресурсопотребление при виртуализации.</p>
<p>Изоляция обеспечивается за счет технологий namespace. Каждое изолированное пространство получает уникальную область имен, отвечающих за предоставление доступа.</p>
<p>Если речь идет о Docker Engine, используется иной подход:</p>
<ol type="1"><li>«В центре внимания» находятся контрольные группы – crgoups.</li><li>Приложение ограничивают определенным набором ресурсов.</li><li>Контрольные группы отвечают за обмен ресурсов с контейнерами, дополнительно устанавливаемыми.</li></ol>
<p>Движок также объединяет контрольные группы с пространством имен и файловой системой в формат контейнера.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A7%D1%82%D0%BE_%D0%B1%D1%83%D0%B4%D0%B5%D1%82_%D0%BF%D1%80%D0%B8_%D0%B7%D0%B0%D0%BF%D1%83%D1%81%D0%BA%D0%B5_%D0%BA%D0%BE%D0%BD%D1%82%D0%B5%D0%B9%D0%BD%D0%B5%D1%80%D0%B0"></span>Что будет при запуске контейнера<span class="ez-toc-section-end"></span></h3>
<p>Важно также понимать, что происходит с приложениями, запущенными на этом контейнере. При запуске «изолированного блока» будут реализовываться следующие операции:</p>
<ol type="1"><li>Запускается Docker Image.</li><li>Движок проводит проверку на существование образа. При наличии оного используется соответствующий контейнер Docker. В противном случае он загружается из Docker Hub.</li><li>Происходит создание контейнера.</li><li>Файловая система получает разметку. На данном этапе добавляются недостающие слои для записи.</li><li>Осуществляется создание сетевого интерфейса.</li><li>Присваивается IP-адрес.</li><li>Запускается заданный процесс.</li></ol>
<p>Далее Docker проводит захват ввода и вывода приложения. Посредством специальных команд можно управлять объектами рассматриваемого софта.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_Image"></span>Создание Image<span class="ez-toc-section-end"></span></h2>
<p>Чтобы Докер Containers работали исправно, их необходимо правильно использовать. А еще – уметь управлять и создавать Images. Это не так трудно, как кажется изначально. Даже с начинающими навыками программирования удастся добиться желаемого результата.</p>
<p>Чтобы создать образ, требуется выбрать способ реализации поставленной задачи. Действовать можно вручную или через DockerFile. Иногда предусматривается автоматизация операции. Тогда система создает новый образ самостоятельно.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A1%D0%BE%D0%B1%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D1%8B%D0%BC%D0%B8_%D1%80%D1%83%D0%BA%D0%B0%D0%BC%D0%B8"></span>Собственными руками<span class="ez-toc-section-end"></span></h3>
<p>В этом случае обработка изолированной среды ведется по принципу «обычного компьютера». Пользователь:</p>
<ul><li>устанавливает пакеты;</li><li>пишет файлы;</li><li>фиксирует команды и запускает их;</li><li>получает на выходе образ, который используется в виде шаблона.</li></ul>
<p>Попробуем сделать Alpine Image. Это – Linux Image небольшого масштаба. Добавим файл «Yeah», который содержит в себе текст «It Works!». Для этого требуется зайти в корневой каталог и открыть его.</p>
<figure class="wp-block-image size-large"><img decoding="async" width="839" height="85" src="https://otus.ru/journal/wp-content/uploads/2021/10/2.jpg" alt="Docker: что это такое, особенности, создание" class="wp-image-2194" srcset="https://otus.ru/journal/wp-content/uploads/2021/10/2.jpg 839w, https://otus.ru/journal/wp-content/uploads/2021/10/2-300x30.jpg 300w, https://otus.ru/journal/wp-content/uploads/2021/10/2-150x15.jpg 150w, https://otus.ru/journal/wp-content/uploads/2021/10/2-768x78.jpg 768w" sizes="(max-width: 839px) 100vw, 839px" /></figure>
<p>Для того, чтобы осуществить creating file, достаточно добавить следующую запись c использованием echo:</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="403" height="71" src="https://otus.ru/journal/wp-content/uploads/2021/10/3.jpg" alt="Docker: что это такое, особенности, создание" class="wp-image-2195" srcset="https://otus.ru/journal/wp-content/uploads/2021/10/3.jpg 403w, https://otus.ru/journal/wp-content/uploads/2021/10/3-300x53.jpg 300w, https://otus.ru/journal/wp-content/uploads/2021/10/3-150x26.jpg 150w" sizes="(max-width: 403px) 100vw, 403px" /></figure>
<p>Теперь предстоит открыть контейнер vibrant_spenc с docker ps –all. Выглядеть это будет так:</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="584" height="63" src="https://otus.ru/journal/wp-content/uploads/2021/10/4.jpg" alt="Docker: что это такое, особенности, создание" class="wp-image-2196" srcset="https://otus.ru/journal/wp-content/uploads/2021/10/4.jpg 584w, https://otus.ru/journal/wp-content/uploads/2021/10/4-300x32.jpg 300w, https://otus.ru/journal/wp-content/uploads/2021/10/4-150x16.jpg 150w" sizes="(max-width: 584px) 100vw, 584px" /></figure>
<p>Далее в директории создаем новый Docker Image для vibrate_spence. Для отметки добавим комментарий «mine, mine, mine».</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="586" height="54" src="https://otus.ru/journal/wp-content/uploads/2021/10/5.jpg" alt="Docker: что это такое, особенности, создание" class="wp-image-2197" srcset="https://otus.ru/journal/wp-content/uploads/2021/10/5.jpg 586w, https://otus.ru/journal/wp-content/uploads/2021/10/5-300x28.jpg 300w, https://otus.ru/journal/wp-content/uploads/2021/10/5-150x14.jpg 150w" sizes="(max-width: 586px) 100vw, 586px" /></figure>
<p>Далее удалим Docker контейнер и создам новую изолированную среду. В нем будет изначально присутствовать файл «Yeah».</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="372" height="132" src="https://otus.ru/journal/wp-content/uploads/2021/10/6.jpg" alt="Docker: что это такое, особенности, создание" class="wp-image-2198" srcset="https://otus.ru/journal/wp-content/uploads/2021/10/6.jpg 372w, https://otus.ru/journal/wp-content/uploads/2021/10/6-300x106.jpg 300w, https://otus.ru/journal/wp-content/uploads/2021/10/6-150x53.jpg 150w, https://otus.ru/journal/wp-content/uploads/2021/10/6-370x132.jpg 370w" sizes="(max-width: 372px) 100vw, 372px" /></figure>
<p>Но это – только один из возможных вариантов. Через Docker File справиться с поставленной задачей тоже можно.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="Decker_File_%D0%B2_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C"></span>Decker File в помощь<span class="ez-toc-section-end"></span></h3>
<p>Так выглядит минимальный ДокерФайл для Python:</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="573" height="484" src="https://otus.ru/journal/wp-content/uploads/2021/10/7.jpg" alt="Docker: что это такое, особенности, создание" class="wp-image-2199" srcset="https://otus.ru/journal/wp-content/uploads/2021/10/7.jpg 573w, https://otus.ru/journal/wp-content/uploads/2021/10/7-300x253.jpg 300w, https://otus.ru/journal/wp-content/uploads/2021/10/7-150x127.jpg 150w" sizes="(max-width: 573px) 100vw, 573px" /></figure>
<p>Здесь стоит обратить внимание на следующие моменты:</p>
<ol type="1"><li>Run apt-get отвечает за обновление системных библиотек.</li><li>Далее произошла установка make и build.</li><li>Осуществлена проверка версии Питона на актуальность.</li><li>Был задан рабочий каталог и файл requirements.txt скопирован в контейнер.</li><li>Pip произвел установку всех библиотек.</li><li>Остальной код скопирован в контейнер, проведена проверка на целостность с последующим запуском main.py.</li></ol>
<p>Docker File будет работать, если структура каталога кодификации имеет следующий вид:</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="556" height="132" src="https://otus.ru/journal/wp-content/uploads/2021/10/8.jpg" alt="Docker: что это такое, особенности, создание" class="wp-image-2200" srcset="https://otus.ru/journal/wp-content/uploads/2021/10/8.jpg 556w, https://otus.ru/journal/wp-content/uploads/2021/10/8-300x71.jpg 300w, https://otus.ru/journal/wp-content/uploads/2021/10/8-150x36.jpg 150w, https://otus.ru/journal/wp-content/uploads/2021/10/8-554x132.jpg 554w" sizes="(max-width: 556px) 100vw, 556px" /></figure>
<p>Остается только сменить App-name на нужную утилиту.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9E_%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%B0%D1%85"></span>О командах<span class="ez-toc-section-end"></span></h2>
<p>Чтобы был виден более заметный результат работы с Docker, требуется уточнить некоторые команды. По мере их обработки пользователь заметит те или иные изменения.</p>
<p>Типичная операция – docker container start. В ходе операции будет выполнен запуск Докера. Чтобы провести created нового контейнера, можно использовать запись:</p>
<p><code>Docker container run new_container.</code></p>
<p>Команды имеют определенные опции и аргументы. Вот список основных «задач», которые задают пользователи при работе с рассматриваемым объектом:</p>
<ul><li>docker stop – останавливает контейнер;</li><li>create – создание нового изолированного пространства из выбранного image;</li><li>run – создание и запуск контейнера;</li><li>inspect – выводит подробную информацию о «блоке»;</li><li>logs – осуществляет вывод cmd (выводит в консоль логи);</li><li>expose – подсказка для пользователей относительно того, какие порты предоставлены сервисом;</li><li>kill – отключает контейнер, игнорируя сохранение корректировок.</li></ul>
<p>Есть еще docker rm. Команда удаляет выбранный контейнер. Но он предварительно должен быть отключен.</p>
<p>Внимание: apt-get install – набор утилит для установки пакетов в Linux, который может пригодиться при работе с Докерами.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9A%D0%B0%D0%BA_%D0%BB%D1%83%D1%87%D1%88%D0%B5_%D1%83%D0%B7%D0%BD%D0%B0%D1%82%D1%8C_%D0%94%D0%BE%D0%BA%D0%B5%D1%80%D1%8B"></span>Как лучше узнать Докеры<span class="ez-toc-section-end"></span></h2>
<p>Для того, чтобы понимать, что такое id Image from Docker, а также какие макаром происходит работа внутри контейнера, стоит внимательно изучить соответствующую тему.</p>
<p>Стать настоящим специалистом в подобной области помогают специализированные курсы. Они проводятся как очно, так и дистанционно. После того, как создастся группа желающих, образовательный центр предоставит программу обучения. В результате пользователь сможет изучить Docker поверхностно или углубленно. В конце выдается сертификат, подтверждающий соответствующие навыки и знания.</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 loading="lazy" decoding="async" width="970" height="90" src="https://otus.ru/journal/wp-content/uploads/2021/10/DevOps_970x90-4.png" alt="Docker: что это такое, особенности, создание" class="wp-image-2191" srcset="https://otus.ru/journal/wp-content/uploads/2021/10/DevOps_970x90-4.png 970w, https://otus.ru/journal/wp-content/uploads/2021/10/DevOps_970x90-4-300x28.png 300w, https://otus.ru/journal/wp-content/uploads/2021/10/DevOps_970x90-4-150x14.png 150w, https://otus.ru/journal/wp-content/uploads/2021/10/DevOps_970x90-4-768x71.png 768w" sizes="(max-width: 970px) 100vw, 970px" /></a></figure>
</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%2Fdocker-chto-eto-takoe-osobennosti-sozdanie%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%2Fdocker-chto-eto-takoe-osobennosti-sozdanie%2F&text=Docker%3A%20%D1%87%D1%82%D0%BE%20%D1%8D%D1%82%D0%BE%20%D1%82%D0%B0%D0%BA%D0%BE%D0%B5%2C%20%D0%BE%D1%81%D0%BE%D0%B1%D0%B5%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D0%B8%2C%20%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5" 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%2Fdocker-chto-eto-takoe-osobennosti-sozdanie%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%2Fdocker-chto-eto-takoe-osobennosti-sozdanie%2F&media=https%3A%2F%2Fotus.ru%2Fjournal%2Fwp-content%2Fuploads%2F2021%2F10%2Foj-1080x720-14.png&description=Docker%3A%20%D1%87%D1%82%D0%BE%20%D1%8D%D1%82%D0%BE%20%D1%82%D0%B0%D0%BA%D0%BE%D0%B5%2C%20%D0%BE%D1%81%D0%BE%D0%B1%D0%B5%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D0%B8%2C%20%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5" 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/znakomstvo-s-docker-ot-a-do-ya-chto-zachem-i-pochemu-chast-2/" 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/znakomstvo-s-docker-ot-a-do-ya-chto-zachem-i-pochemu-chast-2/" 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="Знакомство с 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">Prev 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 class="post next cf">
<a href="https://otus.ru/journal/yazyki-c-vse-o-tipah-dannyh/" 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/yazyki-c-vse-o-tipah-dannyh/" 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="Языки C: все о типах данных" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2021/10/oj-1080x720-15-150x100.png 150w, https://otus.ru/journal/wp-content/uploads/2021/10/oj-1080x720-15-300x200.png 300w, https://otus.ru/journal/wp-content/uploads/2021/10/oj-1080x720-15-1024x683.png 1024w, https://otus.ru/journal/wp-content/uploads/2021/10/oj-1080x720-15-768x512.png 768w, https://otus.ru/journal/wp-content/uploads/2021/10/oj-1080x720-15-270x180.png 270w, https://otus.ru/journal/wp-content/uploads/2021/10/oj-1080x720-15-770x515.png 770w, https://otus.ru/journal/wp-content/uploads/2021/10/oj-1080x720-15-370x245.png 370w, https://otus.ru/journal/wp-content/uploads/2021/10/oj-1080x720-15.png 1080w" data-src="https://otus.ru/journal/wp-content/uploads/2021/10/oj-1080x720-15-150x100.png" data-sizes="(max-width: 150px) 100vw, 150px" title="Языки C: все о типах данных" /> </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/yazyki-c-vse-o-tipah-dannyh/" data-wpel-link="internal">Языки C: все о типах данных</a>
</h2>
<div class="below">
<a href="https://otus.ru/journal/yazyki-c-vse-o-tipah-dannyh/" class="meta-item date-link" data-wpel-link="internal"><time class="post-date" datetime="2021-10-19T18:39:17+00:00">19 октября, 2021</time></a>
<span class="meta-sep"></span>
<span class="meta-item read-time">7 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\/docker-chto-eto-takoe-osobennosti-sozdanie\/"};
/* ]]> */
</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: Tue, 10 Mar 2026 14:45:43 GMT -->