2.1.Технологии под капотом контейнеризации. Основные технологии ядра Linux: - Namespaces(пространство имён) - это механизм изоляции ресурсов в Linux. Процессы в контейнере думают, что они работают в обычной системе, на самом деле они изолированы от всего остального. - Cgroups(conrol groups) - это механизм для контроля и ограничения ресурсов, выделяемых группам процессов. Cgroups позволяет устанавливать лимиты на использование CPU, ограничивать потребление оперативки и т.д. Обеспечивают справедливое распределение ресурсов между контейнерами на одной машине и защищают, когда один контейнер потребляет все доступные ресурсы. - Capabilities - это механизм разделения полных привелегий суперпользователя(root) на отдельные права. Безопасность. В Docker — при запуске контейнера Docker создаёт набор namespaces для изоляции, настраивает cgroups для ограничения ресурсов и назначает минимальный набор capabilities для безопасной работы. Docker - инструмент контейнеризации в котором: код, библиотеки, настройки, среда. Архитектура Docker Общая схема: 1.Docker Daemon - Принимает запросы от клиента. - Управляет жизненным циклом контейнеров: создание, запуск, остановка. - Отвечает за работу с образами — тянет их из реестра, кеширует, удаляет и т. д.. - Ведёт учёт сетей, томов и других ресурсов. 2.Docker Client(CLI and API) - CLI — это командная строка - Под капотом все эти команды идут по Docker API. То есть CLI просто оборачивает HTTP-запросы, которые отправляются Daemon. 3.Docker Engine - Docker Daemon — процесс, управляющий контейнерами. - Containerd — вспомогательный слой, который создаёт и контролирует процессы контейнеров. - runc — инструмент, который непосредственно запускает контейнеры, используя возможности ядра Linux. 4.Registry - Docker Hub — публичный реестр, где лежат миллионы образов (официальные, пользовательские). - Локальный реестр (self-hosted), где компания хранит свои образы. - GitHub Container Registry или другие облачные решения. Основные сущности Docker 1. Образы (Images) Образ — это шаблон контейнера. Он содержит: - Базовую файловую систему (например, основанную на ubuntu или alpine), - Установленные программы и библиотеки, - Набор инструкций (какой порт открыть, какой процесс запустить). 2. Контейнеры (Containers) Контейнер — это запущенный экземпляр образа. В момент запуска: - Docker создаёт отдельное пространство процессов, сети, монтирования (namespaces). - Создаётся слой записи (Copy-on-Write), чтобы изменения в контейнере не портили исходный образ. - Запускается основной процесс (например, nginx, python app.py), который живёт в своей мини-среде. 3. Сети (Networks) В Docker каждый контейнер, по умолчанию, получает собственный изолированный сетевой стек. Это значит, что: - Контейнер имеет свой внутренний IP-адрес. - Общение между контейнерами организуется через виртуальные сети, которые Docker Daemon настраивает автоматически. - При необходимости вы пробрасываете порты хоста внутрь контейнера (например, -p 8080:80), чтобы приложение было доступно извне. - Основные типы сетей (позже разберём подробнее): - bridge — дефолтный, чаще всего используемый, - host — контейнер использует сеть хоста напрямую, - none — контейнер без сети, - overlay — для кластера Docker Swarm, когда контейнеры разбросаны по разным хостам. 4. Тома (Volumes) и хранение данных По умолчанию, файлы внутри контейнера живут только в слое записи и пропадают, когда контейнер удалён. Если нужно сохранять данные дольше (например, база данных), Docker предлагает: - Volumes — специальные тома, которые существуют вне контейнера, но монтируются внутрь. - Bind mounts — монтирование директории хоста прямо в контейнер. 5. Dockerfile, docker-compose, registry… Dockerfile: это шаблон для создания образа: скопируй вот этот файл, поставь такую-то библиотеку, запусти команду... docker-compose: инструмент для описания (в YAML) нескольких сервисов, сетей и томов. Полезно, когда нужно поднимать, например, веб-приложение и базу данных одновременно. Registry (реестр): хранилище образов (Docker Hub, GitHub Container Registry, локальный registry). Docker CLI: набор команд (run, ps, build, pull, push). Базовые команды 1. docker run образ - запуск - Если образа нету, он его подтянет из реестра Полезные флаги: - d(detached). Запуск в фоновом режиме - p 8080:80 Перенаправление портов. - --name <имя> - e KEY=VALUE (передача переменных окружения) 2. docker ps - показывает активные контейнеры -а показывает все контейнеры 3. docker stop AND docker rm 4. docker pull образ :номер Тянет определенный образ 5. docker images 6. docker rmi images 7. Дополнительные: docker kill docker rename docker port container, docker inspect container docker logs -f в режиме реального времени Работа внутри контейнера 1.docker exec Выполнение команд внутри контейнера docker exec <имя_или_id_контейнера> <команда> Пример : docker exec mynginx ls -l /usr/share/nginx/html 2.docker exec -it Запустить в интерактивной командной оболочке docker exec -it mynginx /bin/bash 3.docker attach AND docker exec docker attach Подключается к главному процессу контейнера docker exec Создаёт новый процесс 4.docker cp Перекинуть файлы docker cp [локальный_путь] [container_name]:[путь_в_контейнере] docker cp index.html mynginx:/usr/share/nginx/html/index.html docker cp [container_name]:[путь_в_контейнере] [локальный_путь] docker cp mynginx:/usr/share/nginx/html/index.html ./index_from_container.html