# Системы виртуализации и контейнеризации. Работа с Docker (Основные понятия) ## Введение * **Проблема:** Изоляция приложений и управление ресурсами на одном физическом сервере. * **Решения:** * Виртуализация * Контейнеризация ## Виртуализация (Virtualization) * **Определение:** Создание виртуальной версии чего-либо, например, операционной системы, сервера, хранилища или сетевого ресурса. * **Принцип работы:** Гипервизор (Hypervisor) управляет физическими ресурсами и распределяет их между виртуальными машинами (Virtual Machines, VMs). * **Архитектура:** * **Тип 1 (Bare-metal):** Гипервизор устанавливается непосредственно на физический сервер (например, VMware ESXi, Microsoft Hyper-V Server). * **Тип 2 (Hosted):** Гипервизор устанавливается как приложение на существующей операционной системе (например, VirtualBox, VMware Workstation). * **Характеристики виртуальных машин:** * Каждая VM имеет собственную операционную систему, ядро, библиотеки и приложения. * Обеспечивают высокий уровень изоляции. * Требуют значительных ресурсов (CPU, RAM, disk space) для каждой VM. * Процесс запуска и остановки может быть медленным. * **Применение:** Тестирование, разработка, развертывание сложных приложений с различными требованиями к ОС. ## Контейнеризация (Containerization) * **Определение:** Упаковка приложения и всех его зависимостей (библиотек, системных утилит, кода, среды выполнения) в легковесный, переносимый контейнер. * **Принцип работы:** Контейнеры используют общее ядро хостовой операционной системы, но изолированы друг от друга на уровне процессов и файловой системы. * **Архитектура:** * **Docker Engine (или другой движок контейнеризации):** Управляет созданием, запуском и остановкой контейнеров. * Контейнеры используют общие ресурсы хостовой ОС, что делает их более легкими и быстрыми по сравнению с VM. * **Характеристики контейнеров:** * Легковесные и быстро запускаются/останавливаются. * Используют меньше ресурсов, чем VM. * Обеспечивают изоляцию на уровне приложений. * Переносимость между различными средами (при наличии Docker Engine). * **Применение:** Микросервисная архитектура, CI/CD, быстрое развертывание и масштабирование приложений. ## Docker: Введение * **Определение:** Популярная платформа для разработки, доставки и запуска приложений в контейнерах. * **Основные цели Docker:** * Сделать процесс разработки и развертывания приложений более простым, быстрым и воспроизводимым. * Обеспечить консистентность окружения на различных этапах жизненного цикла приложения. * Улучшить переносимость приложений. ## Основные понятия Docker * **Docker Image (Образ Docker):** * Шаблон с инструкциями для создания Docker-контейнера. * Содержит все необходимое для запуска приложения: код, библиотеки, зависимости, инструменты, настройки. * Образы являются неизменяемыми (immutable). * Создаются на основе Dockerfile. * **Dockerfile:** * Текстовый файл, содержащий последовательность инструкций для сборки Docker-образа. * Определяет базовый образ, копирование файлов, установку пакетов, настройку окружения, команду для запуска приложения и т.д. * **Docker Container (Контейнер Docker):** * Запущенный экземпляр Docker-образа. * Изолированная среда выполнения для приложения. * Может быть создан, запущен, остановлен, перемещен или удален. * Несколько контейнеров могут быть созданы из одного и того же образа. * **Docker Hub:** * Облачный реестр (registry) Docker-образов. * Содержит большое количество публичных образов, созданных Docker и сообществом. * Позволяет хранить и обмениваться собственными образами. * **Docker Daemon (Docker Engine):** * Фоновый сервис, работающий на хостовой машине. * Отвечает за сборку, запуск, управление образами и контейнерами. * Принимает команды от Docker Client. * **Docker Client:** * Инструмент командной строки (CLI) или графический интерфейс (GUI), который позволяет пользователю взаимодействовать с Docker Daemon. * Отправляет команды демону для выполнения различных операций (например, сборка образа, запуск контейнера). * **Docker Registry:** * Сервис для хранения и распространения Docker-образов. * Docker Hub является публичным реестром, но также могут быть созданы частные реестры. * **Docker Volume (Том Docker):** * Механизм для обеспечения постоянного хранения данных, используемых контейнерами. * Данные в томах не удаляются при удалении контейнера. * Могут быть различных типов (например, named volumes, bind mounts). * **Docker Network (Сеть Docker):** * Изолированные сети, которые позволяют контейнерам взаимодействовать друг с другом и с внешним миром. * Docker создает несколько стандартных сетей (например, bridge, host, none), а также позволяет создавать пользовательские сети. ## Заключение * Виртуализация и контейнеризация - ключевые технологии для изоляции и управления приложениями. * Docker - ведущая платформа в области контейнеризации, предоставляющая удобные инструменты для работы с контейнерами. * Понимание основных понятий Docker (образы, контейнеры, Dockerfile, Docker Hub и т.д.) является фундаментом для эффективного использования этой технологии.