docker

Шпаргалка по командам

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
(пусто)

DockerFile Docker Compose