Итак, лично я рекомендую сделать это как часть вашего сценария развертывания для образов и контейнеров, сохраняя только самые последние n контейнеров и изображений. Я помечаю свои образы Docker с помощью той же схемы управления версиями, с которой я использую, git tag
а также всегда отмечаю последний образ Docker как «последний». Это означает, что без очистки чего-либо мои изображения Docker выглядят так:
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
some_repo/some_image 0.0.5 8f1a7c7ba93c 23 hours ago 925.4 MB
some_repo/some_image latest 8f1a7c7ba93c 23 hours ago 925.4 MB
some_repo/some_image 0.0.4 0beabfa514ea 45 hours ago 925.4 MB
some_repo/some_image 0.0.3 54302cd10bf2 6 days ago 978.5 MB
some_repo/some_image 0.0.2 0078b30f3d9a 7 days ago 978.5 MB
some_repo/some_image 0.0.1 sdfgdf0f3d9a 8 days ago 938.5 MB
Теперь, конечно, я не хочу, чтобы все мои изображения (или контейнеры) возвращались к вечности на всех моих производственных коробках. Я просто хочу последние 3 или 4 для отката и избавления от всего остального. Unix's tail
ваш лучший друг здесь. Поскольку docker images
и то, и docker ps
другое по порядку, мы можем просто использовать, tail
чтобы выбрать все, кроме первых трех, и удалить их:
docker rmi $(docker images -q | tail -n +4)
Запустите его вместе с вашими сценариями развертывания (или локально), чтобы всегда сохранять достаточно изображений для удобного отката, не занимая слишком много места и не загромождая старые изображения.
Лично я могу хранить только один контейнер на своей производственной коробке в любое время, но вы можете сделать то же самое с контейнерами, если хотите больше:
docker rm $(docker ps -aq | tail -n +4)
Наконец, в моем упрощенном примере мы имеем дело только с одним репозиторием за раз, но если бы у вас было больше, вы можете просто немного сложнее с той же идеей. Скажем, я просто хочу сохранить последние три изображения из some_repo / some_image. Я могу просто смешаться grep
и awk
и быть на моем пути:
docker rmi $(docker images -a | grep 'some_repo/some_image' | awk '{print $3}' | tail -n +4)
Опять же, та же идея применима и к контейнерам, но вы получите ее к этому моменту, поэтому я перестану приводить примеры.