Контейнеризация
Контейнеризация
- каждая система имеет свою архитектуру построения;
- систему нужно разворачивать так, чтобы она выдержала требуемую нагрузку;
- нужно понять, как обновлять систему, и исправлять ошибки;
- рано или поздно придётся интегрировать систему с внешними ресурсами;
- придётся обеспечить безопасность данных и доступа к системе;
- система неизбежно будет расширяться;
- будут ошибки, и нужна будет поддержка.
Что такое контейнер?
Контейнер — это изолированный кусочек операционной системы, внутри которого живёт приложение. Внутри него есть приложение, все его зависимости, файлы, переменные окружения. А снаружи есть Docker, который управляет такими контейнерами.
Контейнеры позволяют запустить приложение с его личными зависимостями на любой Linux-машине, где есть Docker, без конфликтов с другими приложениями и без тяжёлой виртуализации. А с Docker Desktop можно развернуть и на Windows.
Контейнер - это среда исполнения. Не программа, а экземпляр образа.
Контейнеризация, процесс развертывания с использованием контейнеров сейчас – важная часть разработки ПО.
★ Контейнер – «коробка», в которую упаковали приложение, со всеми нужными компонентами, чтобы просто можно было перенести эту «коробку» и запустить в другой среде. Только представьте, как это упрощает процесс доставки технологий между разными серверами.
Виртуальная машина:

Контейнер:

Это продвинутая часть разработки, но и технологии не стоят на месте. Изначально, приложения развёртывались на физических серверах (это традиционный подход, сейчас его тоже можно встретить), когда выделяется один сервер, на нем есть операционная система, набор ресурсов и среда для выполнения со всеми необходимыми компонентами. Но с ресурсами всегда беда – зависимость и дороговизна устройств, необходимость поддержки серверных. Тогда появился подход виртуальных машин, когда более крупные центры обработки данных закупались крупными мощностями и выделяли эти мощности в виде виртуальных машин (ВМ), когда на одном сервере можно было создать эти ВМ, распределять ресурсы между ними. Это подарило гибкость и устойчивость – ВМ проще восстановить, и ей легко добавить ресурсов, да и приложения становятся изолированными. И фактически, сервера стали кластерами ВМ.
Позднее, появились контейнеры – более лёгкие решения, которые тоже обладают своей файловой системой, процессором, памятью и компонентами, используя ресурсы ОС, но дают больше преимуществ:
- можно легко создать контейнер из образа;
- простой и быстрый откат образа контейнера;
- распределение задач во время сборки (то есть ДО развертывания на целевой инфраструктуре);
- наблюдаемость с информацией и метриками;
- независимость от платформ, переносимость, и идентичная окружающая среда, независимо – на ПК или в облаке;
- возможность разбивать микросервисы по приложениям, а не ВМ;
- большая компактность.
Контейнеры не требуют отдельной операционной системы для каждого экземпляра, в отличие от виртуальных машин, что снижает потребление ресурсов. Запуск и остановка контейнеров происходит быстро - на сервере установлена одна операционная система, которая используется всеми контейнерами.
Сравнение подходов развертывания:
| Критерий | Физические серверы | Виртуальные машины | Контейнеры |
|---|---|---|---|
| Изоляция | Физическая | Гипервизор | Операционная |
| Время запуска | Минуты-часы | Минуты | Секунды |
| Использование ресурсов | Высокое | Среднее | Низкое |
| Портативность | Низкая | Средняя | Высокая |
| Масштабируемость | Ограниченная | Хорошая | Отличная |
| Безопасность | Высокая | Высокая | Средняя |
Как работают контейнеры?
Архитектура и принципы контейнеризации
Ядро контейнеризации
Контейнеризация основана на использовании возможностей ядра операционной системы, в частности:
- Пространства имен (namespaces) - обеспечивают изоляцию процессов, сетевых интерфейсов, точек монтирования и других ресурсов
- Cgroups (control groups) - управляют распределением ресурсов между контейнерами
- Union file systems - позволяют эффективно создавать слои файловых систем
Каждый контейнер работает в изолированной среде, имея доступ только к своим ресурсам, при этом используя ядро хостовой операционной системы.
Контейнеры позволяют реализовать принцип "сборка один раз, запускай везде", что критически важно для современных методологий разработки и эксплуатации программного обеспечения.
Структура контейнера
Контейнер состоит из нескольких ключевых компонентов:
Образ контейнера - неизменяемый шаблон, содержащий:
- Базовую операционную систему
- Необходимые библиотеки и зависимости
- Исходный код приложения
- Конфигурационные файлы
Слои образа - образ строится из последовательных слоев:
- Базовый слой ОС
- Слой зависимостей
- Слой приложения
- Конфигурационные слои
Контейнер - запущенный экземпляр образа с:
- Изолированным процессом
- Выделенными ресурсами
- Собственной файловой системой
- Сетевым стеком
Жизненный цикл контейнера
- Сборка - создание образа из исходного кода и зависимостей
- Регистрация - сохранение образа в репозитории
- Развертывание - запуск контейнера из образа
- Эксплуатация - работа контейнера в производственной среде
- Масштабирование - создание дополнительных экземпляров
- Обновление - замена старых контейнеров новыми версиями
- Очистка - удаление неиспользуемых контейнеров и образов
См. также
Другие статьи этого же раздела в боковом меню (как на странице «О разделе»). Docker отправляет образ в указанный реестр, и если реестр требует авторизации используется команда docker login. В системах непрерывной интеграции Docker Compose используется для запуска тестов в изолированной среде. Пайплайн выполняет команду docker-compose up --build перед запуском тестов. Другие реализации UFS - AUFS (Advanced Multi-Layered Unification Filesystem, используется в старых версиях Docker) и Btrfs/ZFS (альтернативные файловые системы с поддержкой UFS). Вывод команды будет в виде таблицы — NAME — Название образа, DESCRIPTION — Краткое описание, STARS — Популярность образа (чем больше звезд, тем лучше), OFFICIAL — Указывает, является ли образ… Если контейнеры потребляют больше ресурсов, чем доступно на хосте, это приводит к проблемам — нехватка памяти - ОС начинает использовать подкачку (swap), что сильно замедляет работу, перегрузка CPU -… Сеть в контейнерах — материал энциклопедии Вселенная IT. ★ Dockerfile — это текстовый файл, содержащий инструкции для автоматической сборки Docker-образа. Он является ключевым элементом по работе с Docker, так как позволяет создавать образы, которые можно… ★ Docker Swarm — это встроенная система оркестрации Docker, которая позволяет создавать и управлять кластерами контейнеров. Она проста в использовании и интегрирована с Docker Engine. Helm — это пакетный менеджер для Kubernetes. Chart — набор YAML-файлов (шаблонов), описывающих, как запустить под, как дать доступ, как принимать внешний трафик. Практика развёртывания приложения через Docker Desktop. Ниже представлена структурированная информация в виде таблицы, которая поможет вам понять основные этапы настройки и управления контейнерами, репозиториями, сборкой приложений и оркестрацией. Docker — это платформа для создания, запуска и управления контейнеризированными приложениями. Контейнеры изолируют процессы и зависимости, обеспечивая единообразие выполнения в разных средах. Docker…Docker
docker-compose
Объекты Docker
DockerHub и реестры образов
Работа с Docker
Сеть в контейнерах
Dockerfile
Docker Swarm и Kubernetes
Реализация Kubernetes
Первые шаги с Docker и Kubernetes
Универсальная шпаргалка
Справочник по Docker