Docker основан на клиент-серверной архитектуре, которая позволяет эффективно управлять приложениями в контейнерах. В этой архитектуре участвуют три ключевых компонента:
- Docker Client — это интерфейс, через который пользователи взаимодействуют с Docker. Клиент отправляет команды (например, docker run, docker pull) в Docker Daemon. Все взаимодействие с Docker происходит через клиент.
- Docker Daemon (dockerd) — это фоновый процесс, отвечающий за обработку команд от клиента. Он управляет образами, контейнерами, сетями и томами, обеспечивая выполнение заданных задач. Docker Daemon отвечает за создание, запуск и удаление контейнеров. Именно он делает основную работу по созданию контейнеров и управлению ими на сервере.
- Docker Registry — это хранилище для Docker-образов. Самый известный реестр — Docker Hub, где хранятся тысячи публичных образов для различных приложений (Nginx, MySQL, Redis и т.д.). Реестр так же может быть и частным для работы внутри компании. Клиент загружает образы из реестра (или публикует свои) с помощью команд docker pull и docker push.
Как взаимодействуют компоненты:
- Пользователь через Docker Client отправляет команду на скачивание образа.
- Docker Client передаёт запрос Docker Daemon.
- Docker Daemon обращается к Docker Registry для загрузки образа.
- Образ скачивается и хранится на локальной машине, после чего его можно использовать для создания контейнеров.
Образы (images).
Образ Docker — это неизменяемый шаблон, который включает операционную систему, зависимости, библиотеки и само приложение. Смысл образа в том, что он позволяет стандартно разворачивать приложение независимо от среды выполнения. Образы состоят из нескольких слоёв. Каждый слой создаётся на основе предыдущего, что позволяет эффективно управлять ресурсами.
Пример слоёв образа:
- Базовый слой: Обычно это минимальная версия операционной системы, такая как alpine, ubuntu или debian.
- Дополнительные слои: Например, установка зависимостей, библиотек или конфигураций.
Образы могут быть версионированы с помощью тегов:
- nginx:latest — последняя версия образа.
- nginx:1.19 — конкретная версия образа Nginx.
Преимущества использования слоёв:
- Повторное использование: Один слой может использоваться в разных образах, если он не изменён. Это значительно экономит ресурсы, так как не нужно загружать один и тот же слой несколько раз.
- Оптимизация обновлений: Если вам нужно изменить только один слой, Docker не перезагружает весь образ, а только модифицирует изменённый слой.
Команды для работы с образами:
Загрузка образа с Docker Hub:
docker pull nginx
Эта команда загружает последний образ Nginx с Docker Hub на локальную машину.
Просмотр загруженных образов:
docker images
Показывает список всех образов, доступных на вашей системе.
Анализ слоёв образа:
docker history nginx
Эта команда покажет список всех слоёв, которые составляют образ Nginx, и команды, которые привели к созданию каждого слоя.
Контейнеры (containers).
Контейнеры — это рабочие экземпляры образов. Когда Docker запускает контейнер, он использует образ как шаблон и создаёт на его основе контейнер. Контейнеры изолированы друг от друга и от хост-системы, что позволяет запускать несколько контейнеров на одном хосте без риска конфликтов.
Как работает изоляция?
Docker использует технологии Namespaces и Cgroups для изоляции контейнеров:
- Namespaces предоставляют каждому контейнеру собственное пространство имён (отдельные процессы, сеть и файлы).
- Cgroups ограничивают ресурсы (CPU, память, дисковое пространство), доступные каждому контейнеру.
Контейнеры и слои.
Когда контейнер запускается, он наследует все слои образа, а затем добавляет собственный слой записи. Этот слой записи позволяет контейнеру хранить изменения (например, файлы или временные данные), не затрагивая исходный образ.
Заключение второго урока.
Сегодня мы изучили:
- Узнали о базовых принципах работы Docker и его архитектуре.
- Изучили, что такое образы.
- Познакомились с понятием контейнеров и принципами их изоляции.
Домашнее задание:
Задание 1: Последние версии Mysql и Redis.
Скачайте образы с тегом latest из Docker Hub, такие как mysql или redis, и проанализируйте их структуру.
Задание 2: Изучите более детально скачанные образы.
Используйте команду docker history, чтобы изучить, как построены загруженные образы.
Задание 3*: Установить Joomla определенной версии.
Найдите и скачайте Joomla последней версии и версию 5.1.4. Изучите разницу между этой версией и последней.
Вопросы для самопроверки:
- Какие основные компоненты составляют архитектуру Docker и какую роль выполняет каждый из них?
- Чем Docker Client отличается от Docker Daemon?
- Что такое Docker-образ и из каких частей он состоит?
- В чем преимущества использования слоев в Docker-образах?
- Как посмотреть список всех загруженных образов на локальной машине?
- Как узнать структуру слоев конкретного Docker-образа?
- Чем отличается образ от контейнера?
Поздравляю с успешным освоением второго урока! В следующем уроке мы начнем работать непосредственно с контейнерами: научимся их запускать, останавливать, управлять ими и понимать, как они взаимодействуют с файловой системой и сетью. Вы узнаете, как создавать свои контейнеры на основе готовых образов и настраивать их под нужды приложения. Погружаемся дальше в мир Docker!
Друзья, ставьте свои лайки и подписывайтесь на канал. Дальше будет только интереснее! До новых встреч!