Только самые важные команды и как их легко запомнить. В этой статье мы рассморим только использоваение готовых образов. Как создать свои образы я рассказываю в другой статье.

Если вы совсем не знакомы с docker, почитайте эту мою статью.

docker cheat sheet on russian

Запуск

Обратите внимание, что ключи где больше одной буквы, и это слова (name, network, expose) указываются через 2 тире (без пробелов). Но не стоит путать с объединением однобуквенных ключей (просто для удобства), например -i и -t часто объединяют как -it (это не слово “it”). Также у каждого короткого ключа есть длинный аналог (в виде слова), но я редко использую полные слова если есть однобуквенный вариант (просто так быстрее)

docker run ключи образ
КлючЧто делаетКак запомнить
-itинтерактивноInteractive Terminal (терминал)
– – rmудалить при выходеRemove (удалить)
– – name имя_контейнеразадать имяName (имя)
-p снаружи:внутрипробросить портыPort (порт)
-v снаружи:внутрипримонтировать папкуVolume (“объем”, т.е. папка на диске)
-dзапустить в фоне (открепить от терминала)Detache (открепить)
-e переменная-значениезадать значение системной переменнойEnvironment (окружение)
–network имядля соединения контейнеров в разные сетиNetwork
-w каталогвыбор рабочего каталога внутри контейнераWorkdir
– – expose портоткрыть порт(ы) внутри контейнераExpose (экспозиция, выставлять на обозрение)

Тут важно запомнить что:

  1. 1) без -it будет невозможно взаимодействовать с контейнером через терминал
  2. 2) без -p служба в контейнере не будет доступна вне контейнера (http, database и так далее)
  3. 3) без -v в контейнер невозможно будет передать ваши файлы
  4. 4) без -e приложение внутри контейнера будет иметь настройки по-умолчанию
  5. 5) без -d контейнер займет терминал и будет писать в него логи, и вы больше ничего не сможете ввести. А стандартный запуск в фоне через & не будет работать как нужно. Это особенно неудобно если работать с docker на сервере через ssh
  6. 6) без – – rm придется удалять после работы ненужный контейнер (хотя, образы при – – rm останутся и их все равно нужно будет удалять через docker image rm)

Вообще у команды run очень много ключей, восновном для настройки выделяемых ресурсов. Но в простейшем случае их можно не указывать и система сама выберет нужные значения. Важно ограничивать ресуры для продуктовой среде, но там чаще используется docker-compose или если это kubernetes то команда kubectl run (немного отличается формат и там мы дело имеем с группами контейнеров – подами, условно говоря “суперконтейнер” для запуска в нем контейнеров, но об этом в следующий раз).


Список

Ключ -a (all) – показать все

Контейнеров

docker ps -a

У контейнеров есть имя (- – name при запуске) и ID (генерируется автоматически). Везде где требуется указать контейнер, можно указыват или имя или ID.

Как запомнить ps: как команду ps linux (Procrocess), но в качестве “процессо” получим список контейнеров.

Образов

docker image ls -a

У образа кроме ID есть TAG – это версия (latest-последняя). Repository – имя образа.


Удаление

Запущенные сначала остановить или указать ключ принудительного удаления -f

Контейнеров

docker rm контейнер -f

Образов

По имени:

docker image rm имя

Всех не используемых в контейнерах:

docker image prune -a

Ключ -a лучше использовать. Дело в том, что prune удаляет только так называемые dangling образы (образы с пустыми TAG или REPOSITORY, можно увидеть если вывести их с помощью docker image ls). Но такими они не становятся после удаления. А docker image prune -a удаляет все образы, не используемые в контейнерах (но не удаляет в остановленных!)


Логи

docker logs ключи контейнер
КлючЧто делаетКак запомнить
-fпродолжать выводить лог после выведения всего логаFollow (следовать за)
– – tail (или -n) число_строквывести последние число_строкTail (хвост), -n сложнее запомнить (не так очевидно)
– – since “время”
– – until “время”
показывать начиная с (since) или до (until) времени. Время может быть в формате ISO по UTC (“YYYY-MM-DDTHH:MM:SSZ”) или в относительном формате “10m” (10 минут). Время всегда в виде строки.Since (“Since I’ve been looving You” Led Zeppelin)
Until (“Until it sleeps” Metallica)
-l “уровень”“debug”, “info”, “warn”, “error”, “fatal”Level

Подключение к работающему контейнеру

docker attach контейнер

Если контейнер внутри выводит логи в stdout (например nginx), то увидим логи и ничего не сможем вводить. Для подключения к командной оболочке (bash, sh) нужно выполнить не attach, а exec.

Еслы вы обратили внимание, attach я не включил в cheat sheet. Это потому что docker attach всегда можно заменить docker exec и docker logs. И она менее удобная чем exec и logs. Лично я ей не пользуюсь.

docker exec -it контейнер bash
docker exec logs контейнер

Выполнение команды внутри контейнера

docker exec контейнер команда

Команда – имеется в виду любая команда командной оболочки (cat, ls, cp) или программа, которая установлена в контейнере (curl, nmap).

Если нужна сама командная оболочка (bash, sh, zsh) указывают ее (в отличии от attach можно будет вводить команды, но не забудте указать ключ -it)

docker exec -it контейнер bash

Иногда необходимо ввести полный путь /bin/bash

Оболочка sh немного быстрее, но в ней нет истории.

Сохранение изменений в контейнере (локально)

docker commit контейнер образ:тэг

Перед сохранением контейнер необходимо остановить

docker stop контейнер

Образ сохраняется не в файл, а в кэш имиджей на вашем диске. Чтобы сохранить в файл:

docker save -o файл.tar образ:тэг

А загрузить (тоже в кэш, напрямую в контейнер не полусчится)

docker load --input файл.tar

И теперь он появится в кэше

docker image ls

И только теперь можно создавать контейнер из этого образа

docker run .... образ

Остановка/запуск/пауза/снятие с паузы остановленного контейнера

Иногда контейнер может внезапно остановится. Увидеть его можно через docker ps -a

В зависимости от состояния (STATUS)

STATUSВозможное действиеЗамечания
Createdstart, removeremove -f можно с любым
Runningstop, restart, pause, kill, execstop-спокойно, kill-жестко
Pausedunpause, stop, kill
Exitedstart, restart, removeчаще всего внезапно выпадает
Restartingничего
docker start контейнер
docker stop контейнер
docker pause контейнер
docker unpause контейнер
docker restart контейнер

Встроенная справка

Вообще, справка по docker очень удобная: выполняем docker без параметров – получаете список команд, выполняем:

docker команда --help

и получаем формат команды и ее параметры.

Обратите внимание, что если ключ – слово (а не буква), то ставится два тире.

Также обратите внимание, что на верхнем уровне команды “docker команда” (один уровень команды – docker и сразу действие) он работает с контейнерами, а с имиджами работает через “docker image команда” (второй уровень команды). Это связано с тем, что восновном работают с контейнерами, а образы только удаляют. И то только тогда, когда необходимо почистить систему.

Список полезных образов

ОбразНазначениеПеременные окруженияТочки монтированияПорт
nginx web-cервер, reverse-proxy, balancerNGINX_HOST: Задает имя хоста.
NGINX_PORT: Задает порт, на котором будет работать сервер.
/etc/nginx/conf.d: Для пользовательских конфигурационных файлов.
/usr/share/nginx/html: Для статических файлов веб-сайта.
80
httpdapache web-serverHTTPD_PREFIX: Указывает путь установки Apache.
HTTPD_LOG_DIR: Задает каталог для лог-файлов.
/usr/local/apache2/conf:
Для конфигурационных файлов.
/usr/local/apache2/htdocs: Для размещения веб-контента.
80
nodeКомпиляция и выполнение кода node.js (код лежит у вас, а выполнится в контейнере). Удобно если есть чужой код, а node не установленNODE_ENV: Определяет окружение выполнения (например, ‘development’ или ‘production’).
NPM_CONFIG_LOGLEVEL: Уровень логирования npm.
/usr/src/app: Рекомендуемая директория для размещения исходного кода приложения.
gccкомпиляция и отладка С++ кода, компилятор GNUCFLAGS: Флаги для компиляции C-кода.
CXXFLAGS: Флаги для компиляции C++-кода.
/usr/src/myapp: Директория для исходного кода, которую можно монтировать для компиляции.
golangкомпиляция на GolangGOPATH: Определяет рабочее пространство Go.
GOROOT: Указывает на установку Go.
/go/src/app: Рекомендуемая директория для исходного кода Go-приложения.
kalilinux/kali-rollingpentesting утилитыKALI_USER: Имя пользователя по умолчанию.
KALI_PASSWORD: Пароль пользователя по умолчанию.
/root/shared: Директория для обмена файлами между хостом и контейнером
metasploitframework/metasploit-frameworkочень мощная пентеcтерская утилита. На мой взгляд входит в 10-ку самых важных утилитMSF_DATABASE: Тип используемой базы данных (например, ‘postgres’).
MSF_USERNAME и MSF_PASSWORD: Учетные данные для доступа к базе данных.
/metasploit-framework: Директория с конфигурационными файлами и модулями.
ctfd/ctfdтренировочная платформа для пентестеров, не пробовал, но очень хвалят. Попробую, обязательно расскажуCTFD_SECRET_KEY: Секретный ключ для сессий.
DATABASE_URL: URL для подключения к базе данных.
/var/ctfd: Директория
raesene/bwappbuggy web application для тренировки пентестеровэто реализация части проекта http://www.itsecgames.com/80
bkimminich/juice-shopеще один тренировочный сайт со множественными уязвимостямиэто часть проекта https://github.com/OWASP/vulnerable-container-hub.git3000
tensorflow/tensorflowPython AI/ML/DL (Google)tensorflow/tensorflow:latest-gpu и
ключ --runtime=nvidia запустит режим GPU
pytorch/pytorchPython AI/ML/DL (Facebook)PYTORCH_VERSION: Указывает версию PyTorch.
CUDA_VERSION: Версия CUDA, если используется GPU.
/workspace: Директория для проектов и данных.

Это только малая часть интересных образов. Про работу с каждым из них я напишу отдельно.

В первой колонке находится название образа, прямо его ипользуйте в run, а ссылка ведет на страницу образа на Docker Hub, где можно почитать подробности и посмотреть версии.

Версия указывается через двоеточие после имени образа, например node:22, node:18-alpine3.20, node:latest. Если нужна самая последняя версия, указывают latest (самая последняя), или можно вообще ничего не указывать.

Как пользоваться разными видами образов

Компиляторы

Для компиляторов командная строка выглядит приблизительно так:

docker --rm -v папка_локальная:раб_папка_контейнера -w раб_папка_контейнера образ команда_компилятора аргументы_компилятора

В локальной папке должны лежать исходные файлы. В результате получим в той же папке скомпилированный файл. -w указывает рабочий каталог внути контейнера (к нему же нужно примонтировать локальный каталог ключом -v)

Утилиты и наборы утилит

Утилиты просто запускаются в интерактивном режиме, если необходимо монтируются каталоги и пробрасываются порты, указываются переменные окружения

docker -it -е переменная=значение -v откуда:куда образ

Иногда утилите может потребоваться принимать входящие подключения, тогда необходимо пробросить порты, также может понадобится открыть порты внутри контейнера ключом –expose

Python

Можно запустить как утилиты, а можно запустить командную оболочку

docker -it образ bash

Данный cheatsheet призван не дать вам исчерпывающую справку по docker (она есть встроенная в docker и очень удобная), а сделать команды запоминаующимися и логичными, так чтобы вы их вводили не заглядывая в help.