Docker: шпаргалка по командам

Wild Tuna
4 min readJul 11, 2020

Сейчас сложно представить разработку приложений без платформы Docker. Это инструмент, который упростил разработку, миграцию, тестирование и отладку программ. В то же время в процессе работы над приложением нередко приходится отвлекаться на поиск нужной информации в мануалах Docker, что мешает полностью сосредоточиться на разработке. Эта проблема и натолкнула меня написать статью-шпаргалку по основным командам Docker, которые часто вылетают из головы.

Очистка старых данных

При работе с Docker в течение длительного времени его основной каталог начинает занимать много места на диске. Это связано с накопившимися неиспользуемыми объектами —контейнерами, образами, сетями. Для решения этой проблемы в Docker есть полезная команда prune, которая удаляет весь накопившийся мусор.

Удаление всех неиспользуемых (не связанных с контейнерами) образов:

docker system prune

Для удаления всех остановленных контейнеров и неиспользуемых образов добавьте ключ -a:

docker system prune -a

Выборочное удаление образов (images)

Команда docker images с ключом -a выведет все образы с их идентификаторами и тегами. Если нужны только неиспользуемые образы, добавьте ключ -f с параметром dangling=true.

# Вывести все образы
docker images -a
# Вывести все неиспользуемые образы
docker images -f dangling=true

Для удаления образов используйте команду docker rmi. Ниже несколько примеров ее использования:

# Удаление образа по ID
docker rmi 2d6aa672c5c4
# Удаление нескольких образов по ID
docker rmi 2d6aa672c5c4 0760ea8061d0
# Удаление образа по тэгу
docker rmi phpdockerio/php73-cli
# Удаление всех образов
docker rmi $(docker images -a -q)

Бывает, что при удалении вы получаете ошибку из-за конфликта связи образов:

Error response from daemon: conflict: unable to delete 2d6aa672c5c4 (cannot be forced) - image has dependent child images
Error response from daemon: conflict: unable to delete 0760ea8061d0 (cannot be forced) - image has dependent child images

Если образы все же нужно удалить, просто добавьте ключ -f:

docker rmi -f 2d6aa672c5c4
docker rmi -f 2d6aa672c5c4 0760ea8061d0
docker rmi -f phpdockerio/php73-cli

Чтобы быстро удалить неиспользуемые образы, можно использовать команду docker images purge.

# Удаление несвязанных образов
docker images purge

Важно помнить: если вы создали образ и не присвоили ему тег, он будет отображаться в списке несвязанных образов.

Образы можно удалять, используя шаблоны:

# Удаление всех образов, попадающих под шаблон "pattern"
docker images -a | grep "pattern" | awk '{print $3}' | xargs docker rmi

Удаление контейнеров (containers)

Команда docker ps с ключом -a выведет список всех контейнеров с их идентификаторами и названиями. Если нужны только запущенные контейнеры, уберите ключ -a. Чтобы отфильтровать список контейнеров по статусу, добавьте ключи -af с параметром status=[статус].

Список статусов контейнера:

  • created (создан);
  • restarting (перезапускается);
  • running (работает);
  • paused (на паузе);
  • exited (выполнен выход).
# Вывод запущенных контейнеров
docker ps
# Вывод всех контейнеров
docker ps -a
# Список всех контейнеров в статусе exited
docker ps -af status=exited

Для удаления контейнера его нужно предварительно остановить. Сделать это можно командой docker stop:

# Остановка всех контейнеров
docker stop $(docker ps -a -q)
# Остановка контейнера по id
docker stop 168966113d31
# Остановка контейнера по названию
docker stop php-cli-app

Когда контейнер остановлен, для его удаления используйте команду docker rm:

# Удаление контейнера по ID
docker rm 168966113d31
# Удаление контейнера по названию
docker rm php-cli-app
# Удаление контейнеров в статусе exited
docker rm $(docker ps -af status=exited -q)

Для удаления контейнера с примонтированным томом (volume) используйте ключ -v:

# Удаление контейнера с его volume
docker rm -v 168966113d31

Если нужно удалить контейнеры, используя фильтры, не забудьте указать ключ -f перед каждым из них:

# Удаление контейнеров с статусом created и exited
docker rm $(docker ps -a -f status=created -f status=exited -q)

Контейнеры, как и образы, можно удалять, используя шаблоны:

# Удаление всех контейнеров из списка,
# которые попадают под шаблон "pattern"

docker ps -a | grep "pattern" | awk '{print $1}' | xargs docker rmi

Удаление томов (volumes)

Команда docker volume ls выводит список всех томов с их названиями. Для удаления тома используйте команду docker volume rm:

# Вывести список volumes
docker volume ls
# Удаление хранилища
docker rm volume_name
# Удаление нескольких volume
docker rm volume_name test_volume
# Удаление контейнера с его volume (добавление ключа -v)
docker rm -v 168966113d31

Начиная с версии 1.9, в Docker появилась возможность просматривать список томов, не связанных с контейнером, и быстро удалять их:

# Список несвязанных c контейнерами volumes
docker volume ls -f dangling=true
# Удаление несвязанных с контейнерами volumes
docker volume prune

Удаление сетей (networks)

Команда docker network ls выводит список всех сетей с их идентификаторами и названиями. Для удаления сети используйте команду docker network rm:

# Удаление сети по id
docker network rm 263b4c8d6382
# Удаление сети по названию
docker network rm php_cli_local_net

Сети, как контейнеры и образы, можно удалять, используя шаблоны:

# Удаление всех сетей из списка,
# которые попадают под шаблон "pattern"

docker network ls| grep "pattern" | awk '{print $2}' | xargs docker network rm

--

--

Wild Tuna
0 Followers

Заметки программиста #PHP #Symfony #GitLab #Docker #GitHub #Linux #Networks