После того как я поигрался с docker-ом примерно неделю я обнаружил, что место на диске закончилось. Я предположил, что это случилось из-за установки множества проектов используя Dockerfile, и был прав. т.к. процесс установки создаёт отдельный образ для каждой строки из Dockerfile (каждый новый образ берёт за основу предыдущий), что ускоряет процесс сборки (т.к. при изменении Dockerfile нужно перестраивать только образы начиная со строки с изменением), но требует достаточно много места для хранения всего этого.

Я не смог найти встроенной комманды для удаления остановленных контейнеров и непомеченных (untagged) образов, поэтому скомбинировал несколько команд.

I was not able to find any built-in commands for clearing stopped containers and untagged images, so I was able to put together a couple commands.

Если у вас стандартная инсталляция docker-a - для всех комманд нужно добавить sudo перед docker или запускать комманды от пользователя root

Удалить все остановленные контейнеры:

Это удалит все остановленные контейнеры через получение их списка с помошью комманды docker ps -a -q и передачей их идентификаторов в docker rm. Эта комманда не сможет удалить запущенные контейнеры, и скажет вам об этом.

docker rm $(docker ps -a -q)

Удалить все непомеченные образы

В основном это промежуточные образы, которые используются чтоб построить конечный, или просто устаревшие и уже не нужные.

Тут мы вызываем docker images чтоб получить список образов, передаём его в grep, для того чтоб откинуть те, которые имеют ID, и всё это попадает в awk "{print $3}" чтоб извлечь третью колонку из каждой строки, которая является идентификатором образа.

docker rmi $(docker images | grep "^<none>" | awk "{print $3}")

После запуска этих двух комманд я освободил 15Gb места. Если мне понадобится больше места - я всегда смогу удалить что-то ещё т.к. моя папка с образами весит 5Gb :)

Оригинал поста: http://jimhoskins.com/

P.s: Пост про перемещение папки с данными docker-а на другой раздел.