## 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">