Docker CLI cheat sheet
Команды по группам. Каждая запись — что набрать; объяснение механизма в разделе, на который ведёт ссылка.
Клиент
docker— преобразователь аргументов в HTTP-запросы к сокету. Всё делает демон (урок 17.1).
Содержание
- Образы
- Container: запуск и управление
- Сети
- Тома
- Система и место
- Выражения
--format - Комбинации для типовых задач
Образы
| Задача | Команда |
|---|---|
| Собрать | 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 опубликованного образа без загрузки:
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 образ |
| Ограничить память и CPU | docker 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 имя |
| Подключить работающий container | docker 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 не входят. Искать отдельно:
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 в registry | docker 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 |
| Состояние healthcheck | docker 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):
docker exec имя cat /sys/fs/cgroup/memory.max
Комбинации для типовых задач
Найти причину исчезнувшего container'а:
docker inspect имя --format '{{.State.ExitCode}} {{.State.OOMKilled}}'
docker logs --previous --tail 50 имя
docker events --filter "container=имя" --since 1h
Проверить, слушает ли приложение нужный адрес, без утилит в образе:
docker exec имя python -c "
import socket
s = socket.socket(); s.settimeout(1)
print('слушает' if s.connect_ex(('0.0.0.0', 8000)) == 0 else 'нет')"
Проверить время мягкой остановки:
docker run -d --name t образ && sleep 2 && time docker stop t
Доли секунды — обработчик есть. Ровно grace period — нет.
Проверить, что образ не запускается от root:
docker image inspect образ --format '{{.Config.User}}' | grep -qE '^[1-9][0-9]*(:[0-9]+)?$' \
&& echo "непривилегированный, числовой" || echo "ПРОБЛЕМА"
Найти секреты в истории образа:
docker history --no-trunc образ | grep -iE 'password|secret|token|api_key' \
|| echo "в истории не найдено"
Отсутствие находок здесь не доказывает отсутствия секрета: он мог попасть в слой как файл. Надёжнее — распаковать docker save и искать по содержимому.
Отладить сеть container'а без утилит в его образе:
docker run --rm -it --network container:имя nicolaka/netshoot
Второй container подключается к тому же network namespace (урок 13.5).
Посмотреть, что реально записано в слой container'а:
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
Главное оглавление