Начало работы с контейнерами — краткое введение для ИТ-специалистов

Опубликовано: 16 Апреля, 2023
Начало работы с контейнерами — краткое введение для ИТ-специалистов

Контейнеры — это естественная эволюция виртуализации, благодаря которой теперь мы можем виртуализировать приложения и запускать их быстрее, использовать меньше ресурсов, улучшать сценарии DevOps и использовать преимущества этой технологии для разделения приложений. Контейнеры уже давно существуют в мире Linux, и Microsoft впервые представила эту технологию в выпусках Windows Server 2016 и Windows 10. Docker — компания, стоящая за этой революцией, и они своим кодом вносят свой вклад в создание OCI (Open Container Initiative), органа, определяющего стандарты для контейнеров. В этой статье мы попытаемся получить общую картину для тех, кто только начинает работать с контейнерами, и познакомим вас с некоторыми ключевыми понятиями, которые вам необходимо знать. Большинство изображений в этой статье взяты из официальной документации Docker, и если вам нравится идея контейнеров и вы хотите узнать больше из источника, я перечислил всю официальную документацию от Docker в конце этой статьи, чтобы помочь вам.

Виртуализация против контейнеров

— это естественная эволюция . Используя виртуализацию, мы делим ЦП/память/сеть физического сервера на несколько виртуальных машин (виртуальных машин), что отлично подходит для оптимизации использования оборудования и позволяет предприятиям сократить центр обработки данных и другие расходы. Имейте в виду, что каждая виртуальная машина содержит полную операционную систему (включая лицензии), которая обычно представляет собой комбинацию нескольких больших файлов (файлов на диске).

Используя , мы имеем полную изоляцию, включая ЦП/память/сеть/процесс, но они используют одно и то же ядро ОС, а размер контейнера крошечный, всего несколько ГБ, потому что мы несем только то, что нам действительно нужно для запуска приложения. Контейнеры переносимы и обеспечивают высокую доступность, оркестрацию и большую экосистему партнеров, что означает, что они готовы для корпоративных приложений.

Есть одно ключевое различие между виртуализацией и контейнерами, которое ИТ-специалистам трудно принять на раннем этапе. IT-специалисты эмоционально привязаны к своим виртуальным машинам: у них есть имена, иногда статические IP-адреса, мы подключаемся к ним, чтобы проверить, все ли в порядке и так далее, на них может быть установлено несколько приложений. С другой стороны, при использовании контейнеров нам не нужно заботиться об именах, IP-адресах и даже подключаться к контейнерам (мы можем, но не должны!). Большим преимуществом использования контейнеров является то, что если нам нужно изменение, мы развертываем новый контейнер и все, не тратя время на индивидуальную настройку, мы просто развертываем новые контейнеры на основе нашего нового образа!

Функция общего ядра контейнеров кратко объясняет, почему контейнер Linux должен работать поверх хоста Linux (неважно, физический это или виртуальный Linux), и то же самое относится к контейнеру Windows — он должен работать поверх хоста Windows.

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

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

Хорошим примером является запуск веб-сервера для отображения содержимого на виртуальной машине и в контейнере. Если мы раскрутим виртуальную машину, нам придется установить операционную систему, удаленно подключиться к виртуальной машине, настроить службу, скопировать некоторые файлы для веб-сайта и так далее. Используя контейнеры, нам просто нужно настроить образ (в этом образе у нас будет базовый образ и несколько команд для копирования необходимой информации), а после этого остается только развернуть контейнеры. Если нам нужно больше экземпляров, не проблема! Мы просто создаем больше контейнеров из того же образа.

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

Архитектура Docker — высокий уровень

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

При установке Docker на сервер/рабочую станцию у нас будет два компонента: сервер Docker (демон) и клиент. Вся связь между клиентом и сервером осуществляется через RestAPI. Весь пакет называется Engine — Docker использует архитектуру клиент-сервер.

Клиент Docker может быть установлен на том же сервере, что и демон Docker, но также может удаленно подключаться к демону Docker. Чтобы работать с Docker, просто введите docker в командной строке, и на выходе будет приглашение справки (так же, как docker –help ), где у нас есть и . Для выполнения всех потребуется команда. Например, для docker-образа требуется дополнительная команда, а самая простая — перечислить все существующие образы. В этом случае мы будем использовать список образов докеров. Не беспокойтесь об этом прямо сейчас, потому что у нас будет целая статья о развертывании и использовании наших первых контейнеров, где мы потратим много времени на интерфейс командной строки .

Компонент отвечает за получение всех сообщений от через RestAPI и управление объектами Docker: изображениями, контейнером, сетью и томами.

Еще одним компонентом мира Docker является реестр, где мы можем хранить и использовать образы. Изображения могут быть общедоступными или частными. Для новичков первым реестром будет Docker Hub (hub.docker.com, который требует регистрации, но является бесплатным). В корпоративной среде обычно рекомендуется частный реестр, и в настоящее время лучшим местом для размещения является облако с использованием Microsoft Azure. Например, администратор может воспользоваться своей управляемой службой под названием Azure Container Registry, которая обладает отличными функциями. (Мы рассмотрели эту услугу в этой статье на TechGenix.

На изображении ниже мы видим, как клиент выполняет несколько команд: build, pull и run. Они будут взаимодействовать с демоном Docker и реестром для извлечения образов и создания контейнеров.

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

Начало работы с контейнерами: дополнительная информация

  • Докер-хранилище
    https://docs.docker.com/storage/storagedriver/
  • Обзор докера
    https://docs.docker.com/engine/docker-overview/
  • Докер архитектура
    https://docs.docker.com/engine/docker-overview/#docker-архитектура
  • Инициатива открытых контейнеров
    https://www.opencontainers.org/