## The basics Docker uses [cgroups](https://www.kernel.org/doc/Documentation/cgroups/cgroups.txt) to group processes running in the container. This allows you to manage the resources of a group of processes, which is very valuable, as you can imagine. If we run an operating system which uses [systemd](http://www.freedesktop.org/wiki/Software/systemd/) as the service manager, every process (not only the ones inside of the container) will be placed in a cgroups tree. You can see it for yourself if you run the `systemd-cgls` command: docker-45ea2142f956c5127ef4f87e8d7bf78db830abb355d1d220644bf40efd95fdf6.scope … │ ├─59306 /usr/local/bin/python3.11 /usr/local/bin/gunicorn app:app -b 0.0.0.0:80 --log-file - --access-logfile - --wor> │ ├─59387 /usr/local/bin/python3.11 /usr/local/bin/gunicorn app:app -b 0.0.0.0:80 --log-file - --access-logfile - --wor> │ ├─59388 /usr/local/bin/python3.11 /usr/local/bin/gunicorn app:app -b 0.0.0.0:80 --log-file - --access-logfile - --wor> │ ├─59390 /usr/local/bin/python3.11 /usr/local/bin/gunicorn app:app -b 0.0.0.0:80 --log-file - --access-logfile - --wor> │ └─59391 /usr/local/bin/python3.11 /usr/local/bin/gunicorn app:app -b 0.0.0.0:80 --log-file - --access-logfile - --wor> Это вывод из команды вроде ```bash systemd-cgls ``` — и он показывает **группу процессов Docker-контейнера**, которую **systemd** отслеживает через _cgroup (control group)_. Разберём подробно 👇 --- ### 🔹 1. Что значит строка ``` docker-45ea2142f956c5127ef4f87e8d7bf78db830abb355d1d220644bf40efd95fdf6.scope ``` - Это **cgroup**, автоматически созданная **systemd** для контейнера Docker с ID `45ea2142f956...`. - Каждому контейнеру Docker systemd создаёт отдельный `.scope`-объект, чтобы управлять его процессами, CPU, памятью и т.д. - По сути — контейнер «живёт» в этой группе. --- ### 🔹 2. Что внутри неё ``` │ ├─59306 /usr/local/bin/python3.11 /usr/local/bin/gunicorn app:app -b 0.0.0.0:80 ... │ ├─59387 /usr/local/bin/python3.11 /usr/local/bin/gunicorn app:app -b 0.0.0.0:80 ... │ ├─59388 ... │ ├─59390 ... │ └─59391 ... ``` - Это **процессы внутри контейнера**, запущенные **gunicorn** — Python-сервером приложений. - `app:app` — это указание WSGI-приложения (`app.py` → объект `app`). - `-b 0.0.0.0:80` — слушает все интерфейсы на порту 80. - `--log-file -` и `--access-logfile -` — пишут логи в stdout (чтобы Docker мог их ловить). - `--worker` (обрезано в конце) — скорее всего `--workers`, т.е. число рабочих процессов. --- ### 🔹 3. Почему несколько процессов gunicorn Gunicorn запускает **1 master-процесс + несколько worker-процессов** (по умолчанию зависит от числа CPU). Например: ```bash gunicorn app:app -w 4 -b 0.0.0.0:80 ``` → создаёт 1 мастер + 4 воркера — вот эти строки и видны. --- ### 🔹 4. Что делает `.scope` `.scope` используется systemd, чтобы: - ограничить ресурсы (CPU, память, IO); - отслеживать состояние контейнера; - завершать все дочерние процессы при остановке контейнера. --- ### 🔹 5. Итог |Компонент|Что это| |---|---| |`docker-45ea...scope`|cgroup контейнера в systemd| |`python3.11`|интерпретатор Python, запущенный внутри контейнера| |`gunicorn app:app`|сервер Python-приложения (обычно Flask или FastAPI)| |`-b 0.0.0.0:80`|привязка к порту 80 всех интерфейсов| |`--workers`|количество параллельных процессов для обслуживания запросов| --- Хочешь, я покажу, **как найти к какому контейнеру относится этот scope**, и как получить его имя и Docker-команду? <hr class="__chatgpt_plugin">