Найти тему
КУЗИНОБИТ

Урок 2: Архитектура Docker, образы и контейнеры.

Оглавление

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

  1. Docker Client — это интерфейс, через который пользователи взаимодействуют с Docker. Клиент отправляет команды (например, docker run, docker pull) в Docker Daemon. Все взаимодействие с Docker происходит через клиент.
  2. Docker Daemon (dockerd) — это фоновый процесс, отвечающий за обработку команд от клиента. Он управляет образами, контейнерами, сетями и томами, обеспечивая выполнение заданных задач. Docker Daemon отвечает за создание, запуск и удаление контейнеров. Именно он делает основную работу по созданию контейнеров и управлению ими на сервере.
  3. Docker Registry — это хранилище для Docker-образов. Самый известный реестр — Docker Hub, где хранятся тысячи публичных образов для различных приложений (Nginx, MySQL, Redis и т.д.). Реестр так же может быть и частным для работы внутри компании. Клиент загружает образы из реестра (или публикует свои) с помощью команд docker pull и docker push.

Как взаимодействуют компоненты:

  1. Пользователь через Docker Client отправляет команду на скачивание образа.
  2. Docker Client передаёт запрос Docker Daemon.
  3. Docker Daemon обращается к Docker Registry для загрузки образа.
  4. Образ скачивается и хранится на локальной машине, после чего его можно использовать для создания контейнеров.

Образы (images).

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

Пример слоёв образа:

  • Базовый слой: Обычно это минимальная версия операционной системы, такая как alpine, ubuntu или debian.
  • Дополнительные слои: Например, установка зависимостей, библиотек или конфигураций.

Образы могут быть версионированы с помощью тегов:

  • nginx:latest — последняя версия образа.
  • nginx:1.19 — конкретная версия образа Nginx.

Преимущества использования слоёв:

  1. Повторное использование: Один слой может использоваться в разных образах, если он не изменён. Это значительно экономит ресурсы, так как не нужно загружать один и тот же слой несколько раз.
  2. Оптимизация обновлений: Если вам нужно изменить только один слой, Docker не перезагружает весь образ, а только модифицирует изменённый слой.

Команды для работы с образами:

Загрузка образа с Docker Hub:

Пример использования docker pull.
Пример использования docker pull.
docker pull nginx

Эта команда загружает последний образ Nginx с Docker Hub на локальную машину.

Просмотр загруженных образов:

Пример отображения загруженных образов.
Пример отображения загруженных образов.
docker images

Показывает список всех образов, доступных на вашей системе.

Анализ слоёв образа:

Пример использования history на nginx.
Пример использования history на nginx.
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. Изучите разницу между этой версией и последней.

Вопросы для самопроверки:

  1. Какие основные компоненты составляют архитектуру Docker и какую роль выполняет каждый из них?
  2. Чем Docker Client отличается от Docker Daemon?
  3. Что такое Docker-образ и из каких частей он состоит?
  4. В чем преимущества использования слоев в Docker-образах?
  5. Как посмотреть список всех загруженных образов на локальной машине?
  6. Как узнать структуру слоев конкретного Docker-образа?
  7. Чем отличается образ от контейнера?

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

Друзья, ставьте свои лайки и подписывайтесь на канал. Дальше будет только интереснее! До новых встреч!