Linux Labs

Контейнеры: Docker и compose / Ступень 1 из 11

Образ, контейнер и процесс

Не запущена Запускается обычно ~20 с
Выйти из урока

Шаг 4 из 6 · на машине · 5 мин

Внутри контейнера

Контейнер web работает — в нём можно выполнять команды и смотреть на его процессы изнутри.

docker exec <имя> <команда> запускает ещё одну команду в работающем контейнере. Список процессов изнутри:

bash
sudo docker exec web ps

Первой строкой стоит PID 1 — httpd -f -p 8080: внутри контейнера главный процесс идёт первым. Командную оболочку внутри даёт sudo docker exec -it web sh: -i и -t подключают к ней твой ввод и терминал, выход — exit.

С самого сервера тот же процесс виден в обычном списке процессов — со своим номером:

bash
pgrep -a httpd

Контейнер — это процессы сервера, которым ядро ограничило обзор (пространства имён и cgroups): они видят только свои процессы и файлы своего образа. docker stop останавливает главный процесс, docker start запускает тот же контейнер снова.

Проверь себя 1 вопрос

Контейнер box в docker ps -a — Exited (0) 5 minutes ago. Что напечатает sudo docker exec box ls /?

  • Команда до контейнера не доходит: Docker отказывает с ошибкой is not running и ненулевым кодом.

  • docker exec добавляет команду к процессам работающего контейнера. У остановленного процессов нет, и Docker отвечает is not running.

  • Сам docker exec контейнер не запускает. Запустить его снова — sudo docker start box, и только потом exec.

docker exec выполняет команду рядом с главным процессом работающего контейнера. У остановленного контейнера процессов нет: сначала docker start, потом exec.

Главное в шаге

  • docker exec выполняет ещё одну команду в работающем контейнере; docker exec -it … sh — оболочка внутри.
  • Внутри контейнера главный процесс — PID 1, а на сервере он виден в ps под своим номером.
  • Контейнер — процессы сервера с ограниченным обзором: свои процессы и файлы своего образа.
Ubuntu 24.04
Загрузка…