Docker что это за программа

Содержание

Docker что это за программа

Поэтому, выполняем комманду docker pull: docker pull apline Тут ещё есть ошибки. Кроме того, что есть опечатка в слове «команда», так ещё и имя образа неправильно указано. Правильно — alpine

MaxLich Уровень 40
27 февраля 2020
Всё, пацаны, расходимся. Это статья для toolbox. )
MaxLich Уровень 40
27 февраля 2020

Статья — неплохая, но у меня проблема с выполнением команд «docker-machine . » (так же как у Sole Noid). PS Слово «команда» пишется с одной «н», исправьте, пожалуйста

Sole Noid Уровень 35
13 февраля 2020

А что-то у меня команды не проходят, прямо начиная с самой первой: docker-machine -version Проходят такие как: docker -version , help В чём тут дело? Windows 10 у меня.

Стас Пасинков Уровень 26 Master
28 марта 2019
тот момент, когда статью почитал, интересно. но у тебя проц не поддерживает виртуализацию((
Evgeny Balanda Уровень 37
5 марта 2019

«Одной из характерных черт такого подхода является использование всеми контейнера общего ядра». Наверное все же контейнерами, а не контейнера? Иначе что за «контейнер общего ядра»?

Зачем нужен и как работает Docker — ликбез

Василий Малик Уровень 41 Expert
4 марта 2019
Технология полезная. Я читал книгу по Docker — объясняется все понятным языком — очень рекомендую
Джон Дориан Уровень 37
2 марта 2019
Спасибо за статью, как раз хотел про него почитать)
Ярослав Уровень 40 Master

2 марта 2019

Будет жаль, если данная статья пройдёт мимо без какой-либо известности, ведь Docker — это действительно очень популярная технология в наши дни и используется очень часто, потому что сейчас в трэнде микро-сервисная архитектура приложений, и докер — отличное средство для данной архитектуры. Обычно все микросервисы упаковываются в отдельные image, а потом в кластере (скоплении машин) развертываются как раз с помощью контейнеров.

Источник: javarush.com

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

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

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

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

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

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

DOCKER — Что такое Docker, зачем он нужен, как я использую его в работе, все основы в одном уроке!

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Читайте также:
Naps что это за программа

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Источник: thecode.media

Знакомство с Docker от А до Я: что, зачем и почему

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

Несмотря на полезность Докеров, не всем понятно, что представляет собой соответствующий объект. В данной статье будет раскрыта упомянутая тема. А еще каждый сможет разобраться в том, каким образом можно в считанные месяцы «с нуля» начать разбиваться в контейнерах Docker.

Даем определение

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

Его можно использовать при:

  • доставке программного обеспечения;
  • разработке приложений;
  • запуске web-программ.

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

Немного о создании

Рассматриваемый «контейнер» изначально увидел свет в 2008 году, но его первые наработки появились в 90-х годах. Тогда контент не пользовался огромным спросом. Тестирование и разработка велась в «замкнутом пространстве». Доступ к подобным «контейнерам» имели только избранные программеры.

К 2013 году Docker получит статус «общего» контента. У его появился открытый исходный код. Работал контейнер под лицензией Apache версии 2.0. В основном проект предназначался для Linux. Лишь через 4 года он стал пользоваться спросом на других ОС.

Принцип функционирования

Контейнеры Docker нужно правильно и грамотно использовать. Соответствующий софт позволяет безопасно работать, «упаковывать» приложения и даже переносить их из системы в систему.

Основным предназначением Докера служит контейнеризация ПО. В его основе лежит своеобразная визуализация, позволяющая производить упаковку приложений по специальным изолированным средам. Каждая имеет название контейнера или «блока».

Докеры используют в зависимости от нужд разработчика. Можно встретить их в:

  • облачных сервисах;
  • центрах обработки информации;
  • компьютерах и ноутбуках;
  • прочих аппаратных устройствах.

Для того, чтобы приложение нормально работало, у каждого контейнера «в арсенале» будут собственные настройки и элементы. Это дает определенные преимущества. А именно – удается запустить несколько контейнеров на одном хосте.

Плюсы и минусы инструмента

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

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

Начать лучше с преимуществ. Среди них выделяют:

  1. Открытый исходный код. Разработчики делятся друг с другом собственными разработками на специализированных площадках.
  2. Низкий уровень потребления ресурсов. Изолированные пространства не предусматривают виртуализацию всей ОС. Они задействуют исключительно ядро хоста, после чего изолируют нужное приложение на уровне процессов.
  3. Скорость развертывания. Она достаточно быстрая. Можно использовать базовый образ Docker для дальнейшей работы.
  4. Простое скрытие процессов. Контейнеризация – то, что позволяет использовать всевозможные средства и способы обработки информации. Фоновые процессы легко скрываются от «посторонних глаз».
  5. Поддержка работы с небезопасными кодами. Технологии изолирования позволяют запускать совершенно разные машинные коды. За целостность приложений переживать не нужно. Связано это с тем, что за счет Докер контейнера осуществляется изоляция утилиты.
  6. Простое масштабирование. Проекты могут расширяться только за счет того, что пользователь решил устанавливать новые контейнеры.
  7. Простой и удобный запуск. Docker Run предоставляет возможность активации любой утилиты внутри изолированного пространства в пределах одного и того же хоста.

Не нужно забывать о том, что рассматриваемый инструментарий поддерживает оптимизацию файловой системы. Образ состоит из слоев, которые отвечают за оптимальное и эффективное использование ОС и ее файловых компонентов.

Недостатки

Управлять образами и контейнерами при определенной сноровке достаточно легко. Хотя кажется, что соответствующий софт не имеет недостатков, это вовсе не так.

Разработчики указывают на то, что Докер требует грамотного обращения. А еще – наличия элементарных навыков программирования, ведь внутри контейнера находится именно код. И его предстоит корректировать под собственные нужды.

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

Терминология – что нужно знать

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

Особое значение новичкам необходимо уделить внимание следующим терминам и понятиям:

  1. Демон. Сервер контейнерного типа, который включен в состав программных средств Docker. Является неким «центром управления» объектами – хранилищами, контейнерами, сетями, образами.
  2. Клиент. Пользовательский интерфейс, при помощи которого юзер может взаимодействовать с Daemon. Поддерживает работу одновременно с несколькими демонами.
  3. Образ – своеобразный файл, который содержит конфигурацию, зависимости, а также сведения, необходимые для обеспечения инициализации и развертки containers.
  4. DockerFile – документ, который программерам приходится часто использовать. Содержит правила и принципы сборки образа. Первая строка отвечает за так называемый базовый Image. Остальные команды ответственны за копирование файлов и инициализацию контента для создания среды разработки.
  5. Контейнер – исполняемый пакет рассматриваемого программного обеспечения. Работает без проблем на разных устройствах. Его можно назвать автономным. Содержит в себе все, что может потребоваться при работе с приложениями. Обработка кода возможна, когда присутствует исходный код, среда обработки, системные инструменты и библиотеки с настройками.
  6. Тома – процедуры эмуляции файловых систем. Носят название Volume. Создаются автоматически совместно с Docker контейнерами.
  7. Docker Hub – репозиторий, своеобразное хранилище электронных материалов. Задействуется для хранения образов с разным программным обеспечением.
  8. Реестры – созданные когда-то и зарегистрированные серверы. Нужны для хранения Docker Images.
  9. Host – виртуальная машина (среда), которая используется для запуска контейнеров с программным обеспечением.
  10. Сети – компоненты, применяемые для организации большого количества сетевых интерфейсов в программах контейнерного типа.

Существуют различные Docker-registry. Вот несколько примеров:

  1. Докер Центр – реестр подгрузки образов. Отвечает в полной мере за обеспечение и размещение соответствующих элементов с интеграцией GitHub и BitBucket.
  2. Azure. Изолированные области, задействованные при работе с Images и их элементами в директории Azure.
  3. DTR (доверенные реестры) – службы Докер-реестров. После выполнения оных происходит установка софта на локальных компьютерах и в корпорационных сетках.
Читайте также:
Em client что это за программа

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

Docker Engine

Существуют самые разные компоненты Докера. Основополагающую роль здесь играет ядро механизма контейнера. Он имеет название Docker Engine.

Это – движок, отвечающий за функционирование и обеспечение связей с Докер-объектами. Сюда принято относить образы, реестры и сами контейнеры.

Engine включает в себя более двух элементов:

  1. Сервер. Отвечает за установку демона (фоновой программы). Он используется для того, чтобы создать образ, а также управлять и корректировать его. Сюда же можно отнести модификацию томов и самих контейнеров.
  2. Клиент. Предусматривает возможность совершения разнообразных действий с серверами. Пример – создавать и вносить изменения в софт. Для реализации поставленной задачи применяются специальные команды. Их разработчик вводит через пользовательский интерфейс.
  3. Rest API. Предоставляет дополнительно набор функций для взаимодействия связки клиент-сервер. Это – уникальный программный механизм.

Если пользователь намерен освоить принципы создания образа Докера, а также хочет стать настоящим профессионалом в выбранном направлении, с движком придется работать тесно и упорно.

О работе «утилиты»

Для того, чтобы пользователь мог свободно использовать контейнер в своей работе, ему предстоит изучить основы написания программных кодов, а также информатики и даже математики. А еще – по каким принципам и схемам среди доступных можно использовать Докер контейнеры.

Работа рассматриваемого инструмента основывается на принципе архитектуры «клиент-сервер». Она предусматривает взаимодействие клиентов с хостами. Первый время от времени отправляет запросы на получение данных, второй – дает на них ответы, а также производит дальнейшую отправку.

Схема

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

Стоит запомнить следующий принцип работы контейнеров Docker:

  1. Через клиентский интерфейс человек отдает те или иные команды Daemon. Соответствующий элемент заранее находится в развернутом состоянии непосредственно на хосте.
  2. Демон активируется, реагируя на пользовательские манипуляции. Запускаются процессы, которые соответствуют посланным командам. Они осуществляются относительно образов. В качестве манипулятора выступает Daemon. В качестве основы берется DockerFile. Там хранятся все необходимые инструкции, принципы и правила.
  3. После того, как отправлены все команды, образ в контейнере начинает работать.

В качестве наглядного примера можно рассмотреть запуск Image при помощи команды Docker Run или процесс удаления контейнера. Для второй операции используют «запрос» Kill.

Как работает образ

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

Образы, которые сделаете в процессе задействования Docker – это готовые шаблоны с пометкой «только для чтения». В них имеются инструкции для формирования хранилищ. Включают в себя слои, которые при помощи Докера собираются в один образ через вспомогательные файловые системы. Такой вариант избавляет от нерационального распределения и использования имеющейся дисковой памяти.

Параметры образа содержатся в DockerFile. Чтобы в режиме работы можно было использовать несколько Images, необходимо привлекать к операциям реестры и Docker-registry. Они предоставляют «список» готовых образов с внешних репозиториев, а также несут ответ за дальнейшее хранение в хостовых реестрах.

Внимание: для модификации Images достаточно корректировать исключительно необходимые файлы, а не весь объект. Такой результат получается за счет наличия слоев у образов. На сервер будут загружаться только те «документы», в которые разработчик вносил необходимые ему изменения.

О работе контейнеров

Стоит обратить внимание на то, что в рабочей сфере Докер рассматривается как объект, функционирующий комплексно. Каждый его элемент достоит отдельной «главы» при изучении. Docker Container базируется на основе Images. Запуск осуществляется напрямую из ядра Ubuntu (или другого Линукса). Такой прием – средство оптимизации использования аппаратных ресурсов.

Процесс функционирования изолированных областей Docker выглядит следующим макаром:

  1. Происходит определение контейнеров Docker.
  2. Каждое изолированное пространство получает поле имен. Оно будет уникальным.
  3. Имена – это то, что отвечает за предоставление доступа к контейнерам.
  4. Ограничения на процессы внутри изолированного пространства устанавливаются при помощи «значения» namespace.

При работе с движками задействуются контрольные группы – crgoups. Приложение получает ограничения по ресурсным наборам. Контрольные группы организовывают обмен аппаратными возможностями с контейнерами, на которые дополнительно устанавливаются разнообразные ограничительные «меры».

Движок объединяет пространство имен, контрольные группы, а также файловые системы. В результате получается формат container. Разработчики подумывают над внедрением новых форматов. Они будут реализовываться через интегрирование BSD или Solaris.

Процессы после запуска

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

  1. Пользователь запускает Докер образ.
  2. Движок начинает поиск соответствующего объекта. Если он имеет локальное предназначение, происходит создание нового изолированного пространства. Иначе Image подгружается из Хаба.
  3. Система создает контейнер из полученного образа.
  4. Файловой системе присваивается определенная разметка.
  5. Осуществляется добавление слоев записи и создание сетевого интерфейса.
  6. Происходит присваивание (с предварительным поиском) такого элемента, как IP адрес.
  7. Заданный процесс проходит стадию обработки.
  8. Активируется захват «ввод-вывод» утилиты.

Докер контейнеры и его составляющие могут корректироваться. Для этого используются специальные команды. Но это только один из возможных вариантов развития событий. Управление Docker производится и через специальные элементы.

Вторую часть статьи читайте здесь.

Источник: otus.ru

Что такое докер?

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

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

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

  • упаковывание вашего приложения (и так же используемых компонент) в docker контейнеры;
  • раздача и доставка этих контейнеров вашим командам для разработки и тестирования;
  • выкладывания этих контейнеров на ваши продакшены, как в дата центры так и в облака.

Для чего я могу использовать docker?

Быстрое выкладывание ваших приложений

Docker прекрасно подходит для организации цикла разработки. Docker позволяет разработчикам использовать локальные контейнеры с приложениями и сервисами. Что в последствии позволяет интегрироваться с процессом постоянной интеграции и выкладывания (continuous integration and deployment workflow).

Например, ваши разработчики пишут код локально и делятся своим стеком разработки (набором docker образов) с коллегами. Когда они готовы, отравляют код и контейнеры на тестовую площадку и запускают любые необходимые тесты. С тестовой площадки они могут оправить код и образы на продакшен.

Более простое выкладывание и разворачивание

Основанная на контейнерах docker платформа позволят легко портировать вашу полезную нагрузку. Docker контейнеры могут работать на вашей локальной машине, как реальной так и на виртуальной машине в дата центре, так и в облаке.

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

Высокие нагрузки и больше полезных нагрузок

Docker легковесен и быстр. Он предоставляет устойчивую, рентабельную альтернативу виртуальным машинам на основе гипервизора. Он особенно полезен в условиях высоких нагрузок, например, при создания собственного облака или платформа-как-сервис (platform-as-service). Но он так же полезен для маленьких и средних приложений, когда вам хочется получать больше из имеющихся ресурсов.

Главные компоненты Docker

Docker состоит из двух главных компонент:

  • Docker: платформа виртуализации с открытым кодом;
  • Docker Hub: наша платформа-как-сервис для распространения и управления docker контейнерами.
Читайте также:
Программа tif что это

Примечание! Docker распространяется по Apache 2.0 лицензии.

Архитектура Docker

Docker использует архитектуру клиент-сервер. Docker клиент общается с демоном Docker, который берет на себя тяжесть создания, запуска, распределения ваших контейнеров. Оба, клиент и сервер могут работать на одной системе, вы можете подключить клиент к удаленному демону docker. Клиент и сервер общаются через сокет или через RESTful API.

Docker-демон

Как показано на диаграмме, демон за пускается на хост-машине. Пользователь не взаимодействует с сервером на прямую, а использует для этого клиент.

Docker-клиент

Docker-клиент, программа docker — главный интерфейс к Docker. Она получает команды от пользователя и взаимодействует с docker-демоном.

Внутри docker-а

Чтобы понимать, из чего состоит docker, вам нужно знать о трех компонентах:

  • образы (images)
  • реестр (registries)
  • контейнеры

Образы

Docker-образ — это read-only шаблон. Например, образ может содержать операционку Ubuntu c Apache и приложением на ней. Образы используются для создания контейнеров. Docker позволяет легко создавать новые образы, обновлять существующие, или вы можете скачать образы созданные другими людьми. Образы — это компонента сборки docker-а.

Реестр

Docker-реестр хранит образы. Есть публичные и приватные реестры, из которых можно скачать либо загрузить образы. Публичный Docker-реестр — это Docker Hub. Там хранится огромная коллекция образов. Как вы знаете, образы могут быть созданы вами или вы можете использовать образы созданные другими.

Реестры — это компонента распространения.

Контейнеры

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

Контейнеры — это компонента работы.

Так как же работает Docker?

Пока мы знаем, что:

  • можем создавать образы, в которых находятся наши приложения;
  • можем создавать контейнеры из образов, для запуска приложений;
  • можем распространять образы через Docker Hub или другой реестр образов.

Давайте посмотрим, как эти компоненты сочетаются.

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

Мы уже знаем, что образ — это read-only шаблон, из которого создается контейнер. Каждый образ состоит из набора уровней. Docker использует union file system для сочетания этих уровней в один образ. Union file system позволяет файлам и директориями из разных файловых систем (разным ветвям) прозрачно накладываться, создавая когерентную файловую систему.

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

В основе каждого образа находится базовый образ. Например, ubuntu, базовый образ Ubuntu, или fedora, базовый образ дистрибутива Fedora. Так же вы можете использовать образы как базу для создания новых образов. Например, если у вас есть образ apache, вы можете использовать его как базовый образ для ваших веб-приложений.

Примечание! Docker обычно берет образы из реестра Docker Hub.

Docker образы могут создаться из этих базовых образов, шаги описания для создания этих образов мы называем инструкциями. Каждая инструкция создает новый образ или уровень. Инструкциями будут следующие действия:

  • запуск команды
  • добавление файла или директории
  • создание переменной окружения
  • указания что запускать когда запускается контейнер этого образа

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

Как работает docker реестр?

Реестр — это хранилище docker образов. После создания образа вы можете опубликовать его на публичном реестре Docker Hub или на вашем личном реестре.

С помощью docker клиента вы можете искать уже опубликованные образы и скачивать их на вашу машину с docker для создания контейнеров.

Docker Hub предоставляет публичные и приватные хранилища образов. Поиск и скачивание образов из публичных хранилищ доступно для всех. Содержимое приватных хранилищ не попадает в результат поиска. И только вы и ваши пользователи могут получать эти образы и создавать из них контейнеры.

Как работает контейнер?

Контейнер состоит из операционной системы, пользовательских файлов и метаданных. Как мы знаем, каждый контейнер создается из образа. Этот образ говорит docker-у, что находится в контейнере, какой процесс запустить, когда запускается контейнер и другие конфигурационные данные. Docker образ доступен только для чтения. Когда docker запускает контейнер, он создает уровень для чтения/записи сверху образа (используя union file system, как было указано раньше), в котором может быть запущено приложение.

Что происходит, когда запускается контейнер?

Или с помощью программы docker , или с помощью RESTful API, docker клиент говорит docker демону запустить контейнер.

Давайте разберемся с этой командой. Клиент запускается с помощью команды docker , с опцией run , которая говорит, что будет запущен новый контейнер. Минимальными требованиями для запуска контейнера являются следующие атрибуты:

  • какой образ использовать для создания контейнера. В нашем случае ubuntu
  • команду которую вы хотите запустить когда контейнер будет запущен. В нашем случае /bin/bash

Что же происходит под капотом, когда мы запускаем эту команду?

Docker, по порядку, делает следующее:

  • скачивает образ ubuntu: docker проверяет наличие образа ubuntu на локальной машине, и если его нет — то скачивает его с Docker Hub. Если же образ есть, то использует его для создания контейнера;
  • создает контейнер: когда образ получен, docker использует его для создания контейнера;
  • инициализирует файловую систему и монтирует read-only уровень: контейнер создан в файловой системе и read-only уровень добавлен образ;
  • инициализирует сеть/мост: создает сетевой интерфейс, который позволяет docker-у общаться хост машиной;
  • Установка IP адреса: находит и задает адрес;
  • Запускает указанный процесс: запускает ваше приложение;
  • Обрабатывает и выдает вывод вашего приложения: подключается и логирует стандартный вход, вывод и поток ошибок вашего приложения, что бы вы могли отслеживать как работает ваше приложение.

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

Используемые технологии

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

Пространство имен(namespaces)

Docker использует технологию namespaces для организации изолированных рабочих пространств, которые мы называем контейнерами. Когда мы запускаем контейнер, docker создает набор пространств имен для данного контейнера.

Это создает изолированный уровень, каждый аспект контейнера запущен в своем простанстве имен, и не имеет доступ к внешней системе.

Список некоторых пространств имен, которые использует docker:

  • pid: для изоляции процесса;
  • net: для управления сетевыми интерфейсами;
  • ipc: для управления IPC ресурсами. (ICP: InterProccess Communication);
  • mnt: для управления точками монтирования;
  • utc: для изолирования ядра и контроля генерации версий(UTC: Unix timesharing system).

Control groups (контрольные группы)

Docker также использует технологию cgroups или контрольные группы. Ключ к работе приложения в изоляции, предоставление приложению только тех ресурсов, которые вы хотите предоставить. Это гарантирует, что контейнеры будут хорошими соседями. Контрольные группы позволяют разделять доступные ресурсы железа и если необходимо, устанавливать пределы и ограничения. Например, ограничить возможное количество памяти контейнеру.

Union File System

Union File Sysem или UnionFS — это файловая система, которая работает создавая уровни, делая ее очень легковесной и быстрой. Docker использует UnionFS для создания блоков, из которых строится контейнер. Docker может использовать несколько вариантов UnionFS включая: AUFS, btrfs, vfs и DeviceMapper.

Форматы контейнеров

Docker сочетает эти компоненты в обертку, которую мы называем форматом контейнера. Формат, используемый по умолчанию, называется libcontainer . Так же docker поддерживает традиционный формат контейнеров в Linux c помощью LXC. В будущем Docker возможно будет поддерживать другие форматы контейнеров. Например, интегрируясь с BSD Jails или Solaris Zones.

Источник: medium.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru