Шпаргалка по командам
docker run -d -p 8080:80 nginx запустить контейнер в фоне с пробросом порта
docker ps показать работающие контейнеры
docker ps -a показать все, включая остановленные
docker logs <id> посмотреть логи
docker logs -f <id> следить за логами в реальном времени
docker exec -it <id> bash зайти внутрь контейнера
docker stop <id> остановить контейнер
docker rm <id> удалить остановленный контейнерСловарик
| Термин | Что означает |
|---|---|
| docker run | Создать и запустить контейнер из образа |
Флаг -d | Запуск в фоне (detached), терминал остается свободным |
Флаг -p 8080:80 | Проброс порта: порт хоста ведет на порт внутри контейнера |
| docker ps | Показать работающие контейнеры; с -a еще и остановленные |
| docker logs | Показать логи контейнера; с -f следить в реальном времени |
| docker exec -it | Выполнить команду внутри работающего контейнера, например зайти в его оболочку |
| docker stop / docker rm | Остановить контейнер; удалить остановленный |
| Docker Hub | Публичный реестр готовых образов, откуда Docker их скачивает |
docker run -d -p 8080:80 nginx
docker run ── запусти контейнер
-d ── в фоне (detached), не занимая терминал
-p 8080:80 ── порт 8080 на моем компьютере ведет на порт 80 внутри контейнера
nginx ── образ, который запускаем (веб-сервер)За этой короткой строкой стоит несколько шагов, которые Docker делает сам. Он проверил, есть ли образ nginx локально, не нашел и скачал его из реестра Docker Hub, а затем создал из образа контейнер и запустил. При этом вы не устанавливали nginx, не правили конфиги и не открывали порты в системе.
Отдельно про -p 8080:80. Внутри контейнера nginx слушает порт 80, но контейнер изолирован, и снаружи к нему так просто не достучаться. Флаг -p пробрасывает порт и говорит: все, что приходит на порт 8080 этой машины, надо отправлять на порт 80 внутри контейнера.

Смотрим, что запущено
docker ps
CONTAINER ID IMAGE STATUS PORTS NAMES
a1b2c3d4e5f6 nginx Up 2 minutes 0.0.0.0:8080->80/tcp nice_teslaПо колонкам:
| Колонка | Что показывает |
|---|---|
| CONTAINER ID | Уникальный идентификатор |
| IMAGE | Из какого образа запущен |
| STATUS | Состояние (Up значит работает) |
| PORTS | Проброс портов |
| NAMES | Имя |
Имя Docker придумал сам, потому что мы его не задали. С docker ps обычно и начинают, когда хотят понять, что вообще сейчас крутится. Если добавить флаг -a, то команда docker ps -a покажет еще и остановленные контейнеры, а не только работающие.
Факт. Заметили имя
nice_tesla? Когда вы не задаете контейнеру имя, Docker придумывает его сам: случайное прилагательное плюс фамилия известного ученого или инженера, напримерhungry_einsteinилиnice_tesla. В исходном коде Docker есть забавное исключение: сочетаниеboring_wozniak(«скучный Возняк») явно запрещено, с комментарием, что Стив Возняк скучным быть не может.
Читаем логи
Чтобы посмотреть, что происходит внутри контейнера и какие запросы к нему приходят:
docker logs a1b2c3d4e5f6
Длинный идентификатор целиком набирать не нужно, хватит первых символов: docker logs a1b.
172.17.0.1 - - [21/May/2026:10:15:32] "GET / HTTP/1.1" 200 615
172.17.0.1 - - [21/May/2026:10:15:33] "GET /favicon.ico" 404 153Вот наши заходы из браузера, видны прямо в логах. Первая строка – мы открыли страницу (код 200, успех). Вторая – браузер запросил иконку, которой нет (код 404). Когда что-то не работает, логи и есть первое место, куда стоит смотреть. Если нужно следить за ними в реальном времени, добавьте флаг -f, и тогда docker logs -f a1b будет показывать новые строки живьем, по мере их появления.
Заходим внутрь контейнера
Можно зайти внутрь работающего контейнера, как будто это отдельная система:
docker exec -it a1b2c3d4e5f6 bash
docker exec ── выполни команду в работающем контейнере
-it ── интерактивно, с подключением терминала
bash ── запусти оболочку bash (командную строку)И вот мы внутри:
root@a1b2c3d4e5f6:/#Это приглашение командной строки внутри контейнера. Вы оказались в изолированной мини-системе и можете бродить по ней как по обычному Linux:
root@a1b2c3d4e5f6:/# ls
bin boot dev etc home lib usr var ...
root@a1b2c3d4e5f6:/# cat /etc/nginx/nginx.conf
user nginx;
worker_processes auto;
... (настоящий конфиг nginx прямо тут)
root@a1b2c3d4e5f6:/# exitКоманда exit возвращает вас обратно на свой компьютер. Контейнер при этом продолжает работать, вы просто вышли из него. Заход внутрь – мощный инструмент отладки: когда что-то не работает, вы заходите и смотрите, что там происходит на самом деле.
Гасим контейнер
Когда наигрались, гасим контейнер:
docker stop a1b2c3d4e5f6
Проверяем:
docker ps
CONTAINER ID IMAGE STATUS PORTS NAMES
(пусто)