Перейти к содержанию

Docker

Описание

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


Основные компоненты Docker

Client
основной интерфейс (CLI или GUI), через который выполняется управление Docker
Daemon
фоновый сервис, который обрабатывает команды клиента: собирает, запускает и управляет контейнерами
Host
физическая или виртуальная машина, где работает Docker и запускаются контейнеры.
Image
неизменяемый шаблон (образ) с файловой системой и всем необходимым для запуска приложения
Dockerfile
файл с инструкциями, по которым собирается Docker-образ.
Container
запущенный из образа изолированный экземпляр приложения.
Registry
хранилище Docker-образов.
Volume
постоянное хранилище данных, которое сохраняется вне контейнера.
Netowrk
обеспечивает безопасную связь и взаимодействие между контейнерами.

Почему контейнеры легче виртуальных машин

  • виртуализирует оборудование;
  • запускает полноценную guest OS;
  • требует отдельного kernel space.
  • использует kernel host-системы;
  • изолирует процессы;
  • не запускает отдельную ОС.

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

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

Docker - эффективная и функциональная технология, а потому связанные с ним инструменты и процессы не отличаются простотой. Docker действительно довольно сложно устроен, но со стороны пользователя представляет собой понятную модель "клиент-сервер". За Docker API находится несколько компонентов, включая containerd и runc, но базовое взаимодействие осуществляется между клиентом и сервером через API.


Клиент-серверная архитектура

Справка

Проще всего представить Docker ввиде двух частей: клиент и сервер/демон. К ним может добавляться третий компонент - registry, который хранит образы Docker и их метаданные.

Docker Client

Утилита командной строки, которая позволяет взаимодействовать с Docker.

CLI Docker - главный интерфейс, через который большинство людей взаимодействуют с Docker. Клиент Docker - это программа на Go, которая компилируется и выполняется на всех популярных архитектурах и операционных системах.

Список неполных задач, которые можно выполнять с помощью Docker CLI:

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

Docker Host

DOCKER_HOST

DOCKER_HOST = переменная окружения

У Docker демона, как и у остальных современных программ, есть API. Именно через его интерфейс командной строки Docker взаимодействует с демоном.

Главный компонент Docker. Содержит в себе docker daemon. Отвечает за сборку, выполнение и администрирование контейнеров

При установке Docker на свой сервер вам устанавливается:

  • Docker Client;
  • DOCKER_HOST;
    • docker daemon;

Docker Hub/Registry

Хранилище Docker образов. (например Docker Hub)

С ним взаимодействие построено по принципы GitHub/GitLab/Bitbucket, а именно: * Что бы получить образ из Docker Hub, мы выполняем команду docker pull <name_image> * Чтобы отправить наш образ в Docker Hub, мы используем команду docker push


Дополнительная информация по Docker Host + Docker Client

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

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

Клиенты отдают сервервам команды, а серверы отвечают за размещение контейнерных приложений и управление ими.


Ограниченная изоляция

Контейнеры изолированы друго от друга, но изоляция не такая полная, как можно ожидать.

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

В Docker рекомедуется ограничивать отребление ЦПУ и памяти, но в большинстве случаев не существует лимитов по умолчанию, как у виртуальных машин.

Контейнеризованные процессы - это процессы на самом Docker Host. Они выполняются на том же экземпляре ядра Linux, что и операционная система хоста. Все процессы контейнера отображатся в обычных выходных данных команды ps на сервере Docker. Этот подход существенно отличается от гипервизора, в котором изоляция процессов предполагает отдельный экземпляр ядра ОС на каждую виртуальную машину.


Контейнеры легковесны

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