Как автоматически удалить старое изображение, созданное в процессе сборки? - PullRequest
0 голосов
/ 23 сентября 2019

У меня есть автоматизация ci / cd в моем проекте с помощью gitlab, и после добавления моего кода в основную ветку, gitlab runner создает новый образ докера на моем сервере и устанавливает хэш последней фиксации в качестве тега для этого образа, и воссоздает контейнер сновое изображение.через некоторое время появляется много неиспользуемых изображений, и я хочу удалить их автоматически.

Я удаляю старое изображение вручную.

Это мой Makefile

NAME   := farvisun/javabina
TAG    := $$(git log -1 --pretty=%h)
IMG    := ${NAME}:${TAG}
LATEST := ${NAME}:latest

app_build:
    docker build -t ${IMG} -f javabina.dockerfile . && \
    docker tag ${IMG} ${LATEST}

app_up:
    docker-compose -p farvisun-javabina up -d javabina

И после всего этого я хочу, чтобы простой bash-код или другие инструменты удаляли неиспользуемое изображение, например, сохраняли 3 последних изображения или оставляли последние 2 дня последних сборок и удаляли другие.

Ответы [ 2 ]

1 голос
/ 23 сентября 2019

Если у вас все в порядке с сохранением одного изображения, вы можете использовать docker image prune -f, который удалит все изображения, кроме тех, которые связаны с контейнером, поэтому, если вы выполните эту команду во время работы контейнера, он удалит остальные

Не забывайте также часто запускать docker system prune для дальнейшего сокращения использования хранилища.

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

#!/bin/bash
for tag in $(docker image ls | sed 1,4d | awk '{print $3}')
do
    docker image rm -f $tag
done

В первой строке будут перечислены все изображения докера, удалены из списка первые 3 изображения, которые вы хотите сохранить, и выберите только столбец с идентификатором изображения.Затем для каждого из идентификаторов мы удаляем изображение.

Если вы хотите удалить больше, измените 4d на другое число.Обратите внимание, что первая строка является заголовком, поэтому ее всегда нужно удалять.

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

0 голосов
/ 23 сентября 2019

Вы можете запланировать (например, один раз в день или один раз в неделю) в машине компиляции команду «docker image prune».https://docs.docker.com/engine/reference/commandline/image_prune/

...