Главная/Справочники/Справочник

Docker CLI cheat sheet

Команды по группам. Каждая запись — что набрать; объяснение механизма в разделе, на который ведёт ссылка.

Клиент docker — преобразователь аргументов в HTTP-запросы к сокету. Всё делает демон (урок 17.1).

Содержание


Образы

ЗадачаКоманда
Собратьdocker build -t имя:тег .
Собрать конкретную стадиюdocker build --target test -t имя:test .
Собрать без кэшаdocker build --no-cache -t имя .
Собрать с секретомdocker build --secret id=ключ,src=./ключ .
Списокdocker images
Список с безымяннымиdocker images -a
История слоёвdocker history имя --no-trunc
Метаданныеdocker image inspect имя
Пометить тегомdocker tag имя:1.0 registry/имя:1.0
Выгрузитьdocker push registry/имя:1.0
Загрузитьdocker pull registry/имя:1.0
Сохранить в файлdocker save имя -o имя.tar
Восстановить из файлаdocker load -i имя.tar
Удалитьdocker rmi имя
Удалить безымянныеdocker image prune
Удалить старше неделиdocker image prune -a --filter 'until=168h'

Digest опубликованного образа без загрузки:

bash
docker buildx imagetools inspect registry/имя:тег

Подробнее: раздел 03, раздел 05.


Container: запуск и управление

ЗадачаКоманда
Запустить в фонеdocker run -d --name имя образ
Запустить и удалить послеdocker run --rm образ
С интерактивным вводомdocker run -it образ sh
Со стандартным вводом из каналаecho данные | docker run -i --rm образ
Опубликовать портdocker run -p 8080:8000 образ
Опубликовать только локальноdocker run -p 127.0.0.1:8080:8000 образ
Переменная окруженияdocker run -e KEY=value образ
Файл переменныхdocker run --env-file .env образ
Ограничить память и CPUdocker run -m 256m --cpus 0.5 образ
Только для чтенияdocker run --read-only --tmpfs /tmp образ
Снять привилегииdocker run --cap-drop ALL --security-opt no-new-privileges образ
Список запущенныхdocker ps
Список всехdocker ps -a
Логиdocker logs имя
Логи с продолжениемdocker logs -f --tail 100 имя
Логи предыдущего запускаdocker logs --previous имя
Выполнить команду внутриdocker exec имя команда
Метаданныеdocker inspect имя
Процессы внутриdocker top имя
Потребление ресурсовdocker stats --no-stream имя
Остановить мягкоdocker stop имя
Остановить с таймаутомdocker stop -t 30 имя
Убитьdocker kill имя
Удалитьdocker rm имя
Удалить все остановленныеdocker container prune
Скопировать файл наружуdocker cp имя:/путь ./локально

Подробнее: раздел 04.


Сети

ЗадачаКоманда
Списокdocker network ls
Создатьdocker network create имя
Создать без выхода наружуdocker network create --internal имя
Подробности и участникиdocker network inspect имя
Подключить работающий containerdocker network connect сеть container
Отключитьdocker network disconnect сеть container
Запустить в сетиdocker run --network сеть образ
Сеть хостаdocker run --network host образ
Без сетиdocker run --network none образ
Удалить неиспользуемыеdocker network prune

Разрешение имён работает только в пользовательских сетях. В сети по умолчанию bridge — нет.

Подробнее: раздел 08, networking cheat sheet.


Тома

ЗадачаКоманда
Списокdocker volume ls
Создатьdocker volume create имя
Подробностиdocker volume inspect имя
Подключитьdocker run -v имя:/data образ
Подключить каталог хостаdocker run -v "$PWD:/app" образ
Подключить только для чтенияdocker run -v имя:/data:ro образ
Явный синтаксисdocker run --mount type=volume,src=имя,dst=/data образ
Временная файловая системаdocker run --tmpfs /tmp образ
Удалитьdocker volume rm имя
Удалить неиспользуемыеdocker volume prune

docker volume prune удаляет данные безвозвратно. Перед запуском — посмотреть, что удалится: docker volume ls -f dangling=true.

Подробнее: раздел 07, storage cheat sheet.


Система и место

ЗадачаКоманда
Что занимает местоdocker system df
То же подробноdocker system df -v
События демонаdocker events --since 1h
События конкретного видаdocker events --filter 'event=oom'
Сведения о демонеdocker info
Версии клиента и демонаdocker version
Очистить кэш сборкиdocker builder prune
Очистить всё неиспользуемоеdocker system prune
То же, включая образыdocker system prune -a

Логи container'ов в docker system df не входят. Искать отдельно:

bash
du -sh /var/lib/docker/containers/*/*-json.log | sort -h | tail -5

Подробнее: урок 13.4, cleanup checklist.


Выражения --format

Формат — шаблон Go. Полезен, когда ответ нужен скрипту, а не человеку.

Что нужноВыражение
Код возвратаdocker inspect имя --format '{{.State.ExitCode}}'
Убит ли по памятиdocker inspect имя --format '{{.State.OOMKilled}}'
Состояниеdocker inspect имя --format '{{.State.Status}}'
Пользователь образаdocker image inspect имя --format '{{.Config.User}}'
Точка входа и командаdocker image inspect имя --format '{{json .Config.Entrypoint}}{{json .Config.Cmd}}'
Размер образаdocker image inspect имя --format '{{.Size}}' | numfmt --to=iec
Digest в registrydocker image inspect имя --format '{{index .RepoDigests 0}}'
Образ работающего container'аdocker inspect имя --format '{{.Image}}'
Сети container'аdocker inspect имя --format '{{json .NetworkSettings.Networks}}'
Адрес в сетиdocker inspect имя --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' — поля .NetworkSettings.IPAddress на Docker 29 нет
Лимит памятиdocker inspect имя --format '{{.HostConfig.Memory}}' | numfmt --to=iec
Состояние healthcheckdocker inspect имя --format '{{json .State.Health}}'
Точки монтированияdocker inspect имя --format '{{json .Mounts}}'
Внутренняя ли сетьdocker network inspect имя --format '{{.Internal}}'
Таблица container'овdocker ps --format 'table {{.Names}}\t{{.Status}}\t{{.Ports}}'

Важно про inspect. Он показывает запрошенное при создании, а не применённое. Проверять применённое нужно изнутри container'а (урок 17.4):

bash
docker exec имя cat /sys/fs/cgroup/memory.max

Комбинации для типовых задач

Найти причину исчезнувшего container'а:

bash
docker inspect имя --format '{{.State.ExitCode}} {{.State.OOMKilled}}'
docker logs --previous --tail 50 имя
docker events --filter "container=имя" --since 1h

Проверить, слушает ли приложение нужный адрес, без утилит в образе:

bash
docker exec имя python -c "
import socket
s = socket.socket(); s.settimeout(1)
print('слушает' if s.connect_ex(('0.0.0.0', 8000)) == 0 else 'нет')"

Проверить время мягкой остановки:

bash
docker run -d --name t образ && sleep 2 && time docker stop t

Доли секунды — обработчик есть. Ровно grace period — нет.

Проверить, что образ не запускается от root:

bash
docker image inspect образ --format '{{.Config.User}}' | grep -qE '^[1-9][0-9]*(:[0-9]+)?$' \
  && echo "непривилегированный, числовой" || echo "ПРОБЛЕМА"

Найти секреты в истории образа:

bash
docker history --no-trunc образ | grep -iE 'password|secret|token|api_key' \
  || echo "в истории не найдено"

Отсутствие находок здесь не доказывает отсутствия секрета: он мог попасть в слой как файл. Надёжнее — распаковать docker save и искать по содержимому.

Отладить сеть container'а без утилит в его образе:

bash
docker run --rm -it --network container:имя nicolaka/netshoot

Второй container подключается к тому же network namespace (урок 13.5).

Посмотреть, что реально записано в слой container'а:

bash
docker diff имя

A — добавлено, C — изменено, D — удалено. Полезно, чтобы понять, что приложение пишет мимо тома.


Чего в этом списке нет

Чего нетПочему
docker swarmРазвитие остановлено; см. урок 18.4
docker-compose через дефисУстаревшая отдельная утилита; сейчас docker compose
docker attachПриводит к остановке container'а при Ctrl+C; используйте docker logs -f
docker commitСоздаёт образ, не описанный Dockerfile, — невоспроизводимый

Навигация

Вернуться к справочникам
Dockerfile cheat sheet
Compose cheat sheet
Debugging checklist
Главное оглавление

Markdown на GitHub ↗