Контейнеризация с использованием Docker

Опубликовано: 2 Июля, 2021

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

Docker - это ведущая в мире платформа для создания программных контейнеров. Он был запущен в 2013 году компанией Dotcloud, Inc, которая позже была переименована в Docker, Inc. Он написан на языке Go. С момента запуска Docker прошло всего шесть лет, но сообщества уже перешли на него с виртуальных машин. Docker предназначен для использования как разработчиками, так и системными администраторами, что делает его частью многих наборов инструментов DevOps. Разработчики могут писать код, не беспокоясь о тестовой и производственной среде. Системным администраторам не нужно беспокоиться об инфраструктуре, поскольку Docker может легко увеличивать и уменьшать количество систем. Докер вступает в игру на этапе развертывания цикла разработки программного обеспечения.

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

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

Контейнеры могут работать практически где угодно, что значительно упрощает разработку и развертывание: в операционных системах Linux, Windows и Mac; на виртуальных машинах или на голом железе, на машине разработчика или в локальных центрах обработки данных; и, конечно же, в публичном облаке. Контейнеры виртуализируют ЦП, память, хранилище и сетевые ресурсы на уровне ОС, предоставляя разработчикам изолированное представление ОС, логически изолированное от других приложений. Docker - это самый популярный из доступных форматов контейнеров с открытым исходным кодом, который поддерживается в Google Cloud Platform и Google Kubernetes Engine.

Докер Архитектура

Архитектура Docker состоит из клиента Docker, демона Docker, работающего на хосте Docker, и репозитория Docker Hub. Docker имеет архитектуру клиент-сервер, в которой клиент взаимодействует с демоном Docker, запущенным на хосте Docker, используя комбинацию REST API, Socket IO и TCP. Если нам нужно создать образ Docker, мы используем клиент для выполнения команды сборки для Docker Daemon, затем Docker Daemon создает образ на основе заданных входных данных и сохраняет его в реестр Docker. Если вы не хотите создавать образ, просто выполните команду pull с клиента, а затем Docker Daemon извлечет образ из Docker Hub и, наконец, если мы хотим запустить образ, выполните команду запуска от клиента, которая будет создать контейнер.

Компоненты Docker

К основным компонентам Docker относятся: клиенты и серверы Docker, образы Docker, файл Docker, реестры Docker и контейнеры Docker. Эти компоненты подробно описаны в следующем разделе:

  1. Клиенты и серверы Docker - Docker имеет архитектуру клиент-сервер. Docker Daemon / Server состоит из всех контейнеров. Docker Daemon / Server получает запрос от клиента Docker через интерфейс командной строки или REST API и, таким образом, обрабатывает запрос соответствующим образом. Клиент Docker и демон могут находиться на одном или разных хостах.

  1. Образы Docker - образы Docker используются для создания контейнеров докеров с использованием шаблона, доступного только для чтения. Основа каждого изображения - это базовое изображение, например. базовые образы, такие как - ubuntu14.04 LTS, Fedora 20. Базовые образы также могут быть созданы с нуля, а затем необходимые приложения могут быть добавлены к базовому образу, изменив его, таким образом, этот процесс создания нового образа называется «фиксацией изменения» .
  2. Файл Docker - файл Dockerfile - это текстовый файл, содержащий серию инструкций по созданию образа Docker. Это изображение содержит весь код проекта и его зависимости. Один и тот же образ Docker можно использовать для вращения n контейнеров, в каждом из которых вносятся изменения в базовый образ. Окончательный образ можно загрузить в Docker Hub и поделиться с другими соавторами для тестирования и развертывания. Набор команд, которые вам нужно использовать в вашем файле Docker, - это FROM, CMD, ENTRYPOINT, VOLUME, ENV и многие другие.
  3. Реестры Docker - Реестр Docker - это компонент хранилища для образов Docker. Мы можем хранить изображения как в общедоступных, так и в частных репозиториях, чтобы несколько пользователей могли совместно работать над созданием приложения. Docker Hub - это собственный облачный репозиторий Docker. Docker Hub называется общедоступным реестром, в котором каждый может извлекать доступные образы и отправлять свои собственные, не создавая образ с нуля.
  4. Контейнеры Docker. Контейнеры Docker - это экземпляры образов Docker во время выполнения. Контейнеры содержат весь комплект, необходимый для приложения, поэтому приложение может работать изолированно. Например: - Предположим, что есть образ ОС Ubuntu с NGINX SERVER, когда этот образ запускается с командой docker run, тогда будет создан контейнер и NGINX SERVER будет работать в ОС Ubuntu.

Docker Compose

Docker Compose - это инструмент, с помощью которого мы можем создать многоконтейнерное приложение. Это упрощает настройку и
запускать приложения, состоящие из нескольких контейнеров. Например, предположим, что у вас есть приложение, требующее WordPress и MySQL, вы можете создать один файл, который запускал бы оба контейнера как службу без необходимости запускать каждый из них по отдельности. Мы определяем многоконтейнерное приложение в файле YAML. С помощью команды docker-compose up мы можем запустить приложение на переднем плане. Docker-compose будет искать файл docker-compose.yaml в текущей папке, чтобы запустить приложение. Добавив параметр -d в команду docker-compose up, мы можем запускать приложение в фоновом режиме. Создание файла docker-compose.yaml для приложения WordPress:

 #cat docker-compose.yaml
версия: '2'
Сервисы:
db:
изображение: mysql: 5.7
тома: db_data: / var / lib / mysql
перезапуск: всегда
среда:
MYSQL_ROOT_PASSWORD: wordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
зависит от:
- дб
изображение: wordpress: последний
порты:
- «8000: 80»
перезапуск: всегда
среда:
WORDPRESS_DB_HOST: db: 3306

WORDPRESS_DB_PASSWORD: wordpress
объемы:
db_data:

В этом файле docker-compose.yaml у нас есть следующий раздел портов для контейнера WordPress, что означает, что мы собираемся сопоставить порт 8000 хоста с портом 80 контейнера. Таким образом, этот хост может получить доступ к приложению со своим IP-адресом и номером порта.

Докер сети

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

Чтобы получить список всех сетей по умолчанию, которые создает Docker, мы запускаем команду, показанную ниже -

В Docker есть три типа сетей:

  1. Мостовая сеть : когда новый контейнер Docker создается без аргумента –network, Docker по умолчанию подключает контейнер к сети моста. В мостовых сетях все контейнеры на одном узле могут подключаться друг к другу через свои IP-адреса. Сеть моста создается, когда количество хостов Docker равно единице, т.е. когда все контейнеры работают на одном хосте. Нам нужна оверлейная сеть, чтобы создать сеть, охватывающую более одного хоста Docker.
  2. Сеть хоста : когда создается новый контейнер Docker с аргументом –network = host, он помещает контейнер в стек сети хоста, где работает демон Docker. Все интерфейсы хоста доступны из контейнера, который назначен сети хоста.
  3. Нет сети : когда новый контейнер Docker создается с аргументом –network = none, он помещает контейнер Docker в свой собственный сетевой стек. Таким образом, в этой сети контейнеру не назначаются IP-адреса, из-за чего они не могут связываться друг с другом.

Мы можем назначить любую из сетей контейнерам Docker. Параметр –network команды docker run используется для назначения конкретной сети контейнеру.

 $ docker run --network = "имя сети"

Чтобы получить подробную информацию о конкретной сети, мы используем команду -

 $ docker network проверить "имя сети"

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

Docker стал популярным в настоящее время из-за преимуществ, предоставляемых контейнерами Docker. Основные преимущества Docker:

  1. Скорость - скорость контейнеров Docker по сравнению с виртуальной машиной очень высока. Время, необходимое для создания контейнера, очень короткое, потому что он крошечный и легкий. Разработка, тестирование и развертывание могут выполняться быстрее, поскольку контейнеры небольшие. После сборки контейнеры можно отправить на тестирование, а затем в производственную среду.
  2. Переносимость - приложения, встроенные в контейнеры докеров, чрезвычайно портативны. Эти портативные приложения можно легко перемещать куда угодно как единый элемент, при этом их производительность остается прежней.
  3. Масштабируемость - Docker может быть развернут на нескольких физических серверах, серверах данных и облачных платформах. Его также можно запустить на любой машине Linux. Контейнеры можно легко перемещать из облачной среды на локальный хост, а оттуда обратно в облако в быстром темпе.
  4. Плотность - Docker использует доступные ресурсы более эффективно, поскольку не использует гипервизор. Это причина того, что на одном хосте может работать больше контейнеров, чем на виртуальных машинах. Контейнеры Docker имеют более высокую производительность из-за их высокой плотности и отсутствия накладных расходов ресурсов.

РЕКОМЕНДУЕМЫЕ СТАТЬИ