Ответ 1
Также может быть полезно удалить "оборванные" изображения
docker rmi $(docker images -f "dangling=true" -q)
Как я создаю/отлаживаю докеры image/container docker, похоже, оставляет в моей системе всевозможные артефакты. (в какой-то момент было ограничение на 48 изображений). Но в последний раз, когда я смотрел, было 20-25 изображений; docker images
.
Таким образом, основные вопросы:
и мета-вопрос... какие вопросы я не спросил, что нужно?
Также может быть полезно удалить "оборванные" изображения
docker rmi $(docker images -f "dangling=true" -q)
Вот как я периодически очищаю свой хост докера:
Убейте запущенные контейнеры:
docker kill $(docker ps -qa)
Удалить все контейнеры (и связанные с ними тома):
docker rm -v $(docker ps -qa)
Удалить все изображения:
docker rmi $(docker images -q)
Удалите только те контейнеры, которые не запущены. Разберите вывод "ps" для строки "Exited":
docker ps -a | awk '/Exited/ {print $1}' | xargs docker rm -v
Не идеально... Не давайте вашему контейнеру имя "Exited": -)
Docker 1.9 имеет новую команду тома, которая может использоваться для очистки старых томов
docker volume rm $(docker volume ls -qf dangling=true)
В последней версии сообщества docker появилась новая команда "обрезка системы"
docker system prune --volumes
Это очистка неиспользуемых сетей, уничтожение остановленных контейнеров, оборванных изображений и любых неиспользуемых томов.
Я также хотел бы внести свой вклад в это с помощью некоторых команд, которые были добавлены в версию 1.13.0:
$ docker system prune
$ docker container prune
$ docker image prune
$ docker volume prune
$ docker network prune
см. журнал изменений: 1.13.0 (2017-01-18)
Добавьте новую команду
docker system
с подкомандамиdf
иprune
для управления системными ресурсами, а также подкомандыdocker {container,image,volume,network} prune
# 26108 # 27525/# 27525
Update: В докере cli есть встроенные фильтры, которые позволяют отображать контейнеры, соответствующие определенным критериям. Эти функции bash берутся из одного из основных поддерживающих операторов dotfiles:
dcleanup(){
docker rm -v $(docker ps --filter status=exited -q 2>/dev/null) 2>/dev/null
docker rmi $(docker images --filter dangling=true -q 2>/dev/null) 2>/dev/null
}
del_stopped(){
local name=$1
local state=$(docker inspect --format "{{.State.Running}}" $name 2>/dev/null)
if [[ "$state" == "false" ]]; then
docker rm $name
fi
}
Оригинальный ответ
Помощник script Я создал для собственного использования:
#!/bin/bash
# options:
# remove stopped containers and untagged images
# $ dkcleanup
# remove all stopped|running containers and untagged images
# $ dkcleanup --reset
# remove containers|images|tags matching {repository|image|repository\image|tag|image:tag}
# pattern and untagged images
# $ dkcleanup --purge {image}
# everything
# $ dkcleanup --nuclear
if [ "$1" == "--reset" ]; then
# Remove all containers regardless of state
docker rm -f $(docker ps -a -q) 2>/dev/null || echo "No more containers to remove."
elif [ "$1" == "--purge" ]; then
# Attempt to remove running containers that are using the images we're trying to purge first.
(docker rm -f $(docker ps -a | grep "$2/\|/$2 \| $2 \|:$2\|$2-\|$2:\|$2_" | awk '{print $1}') 2>/dev/null || echo "No containers using the \"$2\" image, continuing purge.") &&\
# Remove all images matching arg given after "--purge"
docker rmi $(docker images | grep "$2/\|/$2 \| $2 \|$2 \|$2-\|$2_" | awk '{print $3}') 2>/dev/null || echo "No images matching \"$2\" to purge."
else
# This alternate only removes "stopped" containers
docker rm -f $(docker ps -a | grep "Exited" | awk '{print $1}') 2>/dev/null || echo "No stopped containers to remove."
fi
if [ "$1" == "--nuclear" ]; then
docker rm -f $(docker ps -a -q) 2>/dev/null || echo "No more containers to remove."
docker rmi $(docker images -q) 2>/dev/null || echo "No more images to remove."
else
# Always remove untagged images
docker rmi $(docker images | grep "<none>" | awk '{print $3}') 2>/dev/null || echo "No untagged images to delete."
fi
exit 0
На ваши вопросы:
как правильно очистить?
нет официального пути, просто вспомогательные скрипты и функции, подобные приведенным выше.
поскольку я вручную удалял изображения, которые больше начали поступать. а?
возможно, вы удалили изображения, которые были построены поверх других, которые стали "непомеченными" при попытке удалить их.
сколько места на диске я должен выделить хосту?
зависит от типов изображений, которые вы планируете использовать. Знайте, что многократное использование 500-мегабайтного изображения не используется (пространство размером 500 Мб X). Контейнеры повторно используют одно и то же изображение и просто добавляют все, что они меняют при работе сверху. Поэтому подумайте о перспективе хранения изображений, а не о времени выполнения контейнера в отношении хранилища.
будут запущены демоны, которые будут перезагружаться после следующей перезагрузки?
По умолчанию они останавливаются при перезагрузке хоста. Вам нужно запустить с помощью docker run --restart=True
для автоматического запуска при перезагрузке хоста.
Я использую докер-машину с VirtualBox, и после удаления всех контейнеров и всех изображений изображение докеры VirtualBox по-прежнему потребляет много гигабайт дискового пространства.
Чтобы очистить дисковое пространство, оно помогает удалить и заново создать докер-машину. Например:.
docker-machine rm default
docker-machine create --driver virtualbox default
Иногда у вас не будет статуса, он просто будет пустым.
вот моя версия:
docker rm -f $(docker ps -a | env -i grep -v Up | tail -n+2 | cut -d ' ' -f 1)