Давайте познакомимся с архитектурой Docker и ее основными компонентами.
Я предполагаю, что у вас есть базовое понимание Docker.
Если нет, вы можете обратиться к предыдущей статье.
- 🎢 Что такое Dockerfile и как создать образ Docker?
- 🔕 Как проверить статус и пространство, используемое образами и контейнерами Docker
- Как работать с контейнерами Docker
Я полагаю, вы понимаете важность Docker в DevOps.
Теперь за этим фантастическим инструментом должна стоять удивительная, продуманная архитектура.
Не так ли?
Но прежде чем говорить об этом, позвольте мне продемонстрировать предыдущую и текущую систему виртуализации.
Традиционная и виртуализация нового поколения
Раньше мы создавали виртуальные машины, и у каждой виртуальной машины была ОС, которая занимала много места и делала систему тяжелой.
Теперь в случае с Docker-контейнером у вас есть одна ОС, а ресурсы распределяются между контейнерами.
Следовательно, система легкая и загружается за считанные секунды.
Docker Архитектура
Ниже приведена простая схема архитектуры Docker.
Позвольте мне объяснить вам компоненты архитектуры докера.
Docker Engine
Это основная часть всей системы Docker.
Docker Engine – это приложение, которое следует архитектуре клиент-сервер.
Он установлен на хост-машине.
В Docker Engine есть три компонента:
- Server: это демон docker, называемый dockerd. Он может создавать и управлять образами контейнерами, сетью и др.
- Rest API: используется для указания демону docker, что делать.
- Интерфейс командной строки (CLI): это клиент, который используется для ввода команд Docker.
Docker Client
Пользователи Docker могут взаимодействовать с Docker через клиента.
Когда запускаются любые команды docker, клиент отправляет их демону dockerd, который их выполняет.
Docker API используется командами Docker.
Клиент Docker может общаться с несколькими демонами.
Docker Registries
Это место, где хранятся образа Docker.
Это может быть общедоступный реестр Docker или частный реестр Docker.
Docker Hub – это место по умолчанию для образов Docker, публичный реестр его репозиториев.
Вы также можете создать и запустить свой собственный личный реестр.
Когда вы выполняете команды Docker Pull или Docker Run, требуемый образ Docker извлекается из настроенного реестра.
Когда вы выполняете команду docker push, образ Docker сохраняется в настроенном реестре.
Объекты Docker
Когда вы работаете с Docker, вы используете образа, контейнеры, тома, сети; все это объекты Docker.
Образы
Образа Docker – это шаблоны только для чтения с инструкциями по созданию контейнера Docker.
Образ Docker можно извлечь из концентратора Docker и использовать как есть, или вы можете добавить дополнительные инструкции к базовому образу и создать новый и модифицированный образ Docker.
Вы можете создавать свои собственные изображения докеров, также используя файл Docker.
Создайте dockerfile со всеми инструкциями, чтобы создать контейнер и запустить его; это создаст ваш собственный образ докера.
Изображение Docker имеет базовый слой, который доступен только для чтения, а верхний слой может быть записан.
Когда вы редактируете dockerfile и перестраиваете его, только измененная часть перестраивается в верхнем слое.
Контейнеры
После запуска образа Docker он создает контейнер Docker.
Все приложения и их окружение работают внутри этого контейнера.
Вы можете использовать Docker API или CLI для запуска, остановки, удаления контейнера Docker.
Ниже приведен пример команды для запуска Docker-контейнера Ubuntu:
docker run -i -t ubuntu /bin/bash
Тома
Постоянные данные, генерируемые Docker и используемые контейнерами Docker, хранятся в томах.
Они полностью управляются Docker через CLI Docker или API Docker
. Тома работают на контейнерах Windows и Linux.
Вместо того чтобы сохранять данные в доступном для записи слое контейнера, всегда полезно использовать для него тома.
Содержимое тома существует вне жизненного цикла контейнера, поэтому использование тома не увеличивает размер контейнера.
Вы можете использовать флаг -v или -mount, чтобы запустить контейнер с томом. В этом примере команды вы используете том geekvolume с контейнером geekflare.
docker run -d --name geekflare -v geekvolume:/app nginx:latest
Сети
Сеть Docker – это канал, через который общаются все изолированные контейнеры.
В докере в основном пять сетевых драйверов:
- bridge: это сетевой драйвер по умолчанию для контейнера. Вы используете эту сеть, когда ваше приложение работает в автономных контейнерах, то есть несколько контейнеров взаимодействуют с одним и тем же хостом докера.
- host: Этот драйвер удаляет сетевую изоляцию между док-контейнерами и док-хостом. Он используется, когда вам не нужна сетевая изоляция между хостом и контейнером.
- overlay: эта сеть позволяет службам swarm взаимодействовать друг с другом. Он используется, когда контейнеры работают на разных хостах Docker или когда службы swarm сформированы из нескольких приложений.
- None: этот драйвер отключает все сети.
- macvlan: этот драйвер назначает MAC-адрес контейнерам, чтобы они выглядели как физические устройства. Трафик направляется между контейнерами через их mac-адреса. Эта сеть используется, когда вы хотите, чтобы контейнеры выглядели как физическое устройство, например, при переносе настройки виртуальной машины.
Заключение
Я надеюсь, что это даст вам представление об архитектуре Docker и ее основных компонентах.