Сейчас сложно представить разработку приложений без платформы 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