6.1 Образы (Images)
Чтобы эффективно работать с Docker, необходимо понять несколько ключевых терминов: образы, контейнеры и реестры. Давайте разберем их и поймем, для чего они нужны и как взаимодействуют между собой.
Образ Docker — это шаблон, из которого создаются контейнеры. Образ содержит все необходимые компоненты для выполнения приложения: операционную систему, приложение, библиотеки и зависимости, а также конфигурационные файлы. Проводя аналогию с ООП: образ Docker — это класс, а контейнер — объект класса. Образы создаются с помощью Dockerfile — текстового файла, который описывает шаги по созданию образа.
Основные характеристики образов:
- Слоистая структура: образы состоят из нескольких слоев. При этом есть базовый слой, а каждый следующий представляет собой изменения по сравнению с предыдущим слоем. Это позволяет экономить место и уменьшает время загрузки.
- Многоразовость: один и тот же образ можно использовать для создания множества контейнеров.
- Переносимость: образы можно переносить между различными системами, что делает их идеальными для разработки, тестирования и развертывания приложений в различных окружениях.
Примеры использования образов:
Создание собственного образа: вы можете создать свой собственный образ, написав Dockerfile, в котором нужно указать настройки вашего приложения и его зависимостей.
FROM ubuntu:latest
RUN apt-get update && apt-get install -y python3
COPY . /app
CMD ["python3", "/app/app.py"]
Использование готового образа: вы можете использовать образы, доступные в Docker Hub, чтобы быстро развернуть стандартные приложения, такие как веб-серверы или базы данных.
docker pull nginx
Эта команда загружает образ nginx из публичного хранилища Docker Hub.
6.2 Контейнеры (Containers)
Контейнер Docker — это запущенный экземпляр образа. Контейнеры изолируют приложения и их зависимости в отдельной среде выполнения, что позволяет запускать их независимо от хостовой системы и других контейнеров. Контейнеры легковесные, так как они используют ядро хостовой операционной системы, а не создают отдельное ядро, как виртуальные машины.
Основные характеристики контейнеров:
- Изоляция: контейнеры изолируют приложения, обеспечивая их независимую работу и предотвращая конфликты зависимостей.
- Легковесность: контейнеры потребляют меньше ресурсов по сравнению с виртуальными машинами, так как не требуют отдельной операционной системы.
- Быстрый запуск: контейнеры запускаются и останавливаются значительно быстрее виртуальных машин, что делает их идеальными для динамических сред и масштабирования.
Примеры использования контейнеров:
Запуск контейнера: вы можете запустить контейнер из образа, используя команду docker run.
docker run -d -p 80:80 --name mynginx nginx
Управление контейнерами: Docker предоставляет команды для управления контейнерами: start, stop, restart, rm и exec.
docker stop mynginx
docker rm mynginx
Обо всех командах и их параметрах вы узнаете в следующих лекциях.
6.3 Реестры (Registries)
Реестр Docker — это хранилище Docker-образов. Реестры позволяют разработчикам и организациям хранить, управлять и распространять образы контейнеров. Существуют публичные и приватные реестры.
Основные характеристики реестров:
- Публичные реестры: такие как Docker Hub, предоставляют доступ к множеству образов, созданных сообществом и официальными разработчиками.
- Приватные реестры: используются для хранения и управления образами внутри организации, обеспечивая контроль доступа и безопасность.
- Интеграция с CI/CD: реестры легко интегрируются с системами непрерывной интеграции и развертывания, что позволяет автоматизировать процесс создания и развертывания образов.
Примеры использования реестров:
1. Docker Hub: публичный (и самый популярный) реестр Docker-образов. Предоставляет доступ к множеству готовых (и часто проверенных, что видно по статистике загрузки) образов.
docker pull nginx
docker push myusername/myimage:tag
2. Приватный реестр: вы можете настроить и использовать собственный реестр с помощью Docker Registry.
docker run -d -p 5000:5000 --name registry registry:2
docker tag myimage localhost:5000/myimage
docker push localhost:5000/myimage
Взаимодействие образов, контейнеров и реестров
Эти три компонента тесно связаны между собой и формируют основу работы с Docker:
- Создание образа: разработчик создает образ с помощью Dockerfile и сохраняет его локально.
- Загрузка образа в реестр: образ загружается в реестр (например, Docker Hub или приватный реестр), где он хранится и становится доступным для других пользователей или систем.
- Запуск контейнера: пользователь загружает образ из реестра и запускает контейнер, который изолирует приложение и обеспечивает его выполнение.
6.4 Оркестрация (Orchestration)
Оркестрация — это процесс управления множеством контейнеров в распределенной среде. Инструменты оркестрации помогают автоматизировать развертывание, масштабирование и управление контейнерами.
- Kubernetes: самая популярная платформа оркестрации контейнеров, позволяющая управлять кластером контейнеров на различных узлах.
- Docker Swarm: встроенная в Docker платформа оркестрации для создания и управления кластерами Docker.
- Функции оркестрации: автоматическое масштабирование, самовосстановление, управление сетями и балансировка нагрузки.
6.5 Сети (Networks)
Сети в Docker позволяют контейнерам взаимодействовать друг с другом и с внешним миром. Docker предоставляет несколько типов сетей для различных сценариев использования.
- Bridge: сеть по умолчанию, создаваемая Docker. Контейнеры в мостовой сети могут взаимодействовать друг с другом.
- Host: контейнер использует сетевые интерфейсы хостовой машины, получая прямой доступ к ним.
- Overlay: используется для создания сетей между несколькими Docker-демонами. Необходима для оркестрации.
- None: отключает все сетевые интерфейсы контейнера. Полезно для изолированных задач.
6.6 Тома (Volumes)
Тома (Volumes) — это механизм для постоянного хранения данных контейнеров. Они позволяют сохранять данные вне контейнера, чтобы информация не терялась при перезапуске или удалении контейнера.
- Создание тома: тома создаются командой
docker volume create. - Монтирование тома: тома подключаются к контейнерам флагом
-vпри запуске. - Преимущества: тома обеспечивают удобное сохранение и обмен данными между контейнерами, а также лучшую производительность по сравнению с привязанными директориями (bind mounts).
Важно! Том — это виртуальный жесткий диск, который можно подключить к виртуальной машине или контейнеру. Обычно хранится на гостевой операционной системе в виде обычного файла.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ