Программно удалять образы Docker, связанные со сборкой Docker, из Dockerfile - PullRequest
1 голос
/ 28 марта 2019

Я создаю образ докера как часть автоматической сборки и хочу удалить созданное мной изображение и любые последующие изображения, связанные со встроенным образом.

Я могу легко удалить созданное изображение, указавимя и тег (потому что я могу получить эти данные через переменные).Но как мне удалить любые дополнительные изображения, которые извлекаются Dockerfile?(В частности, с использованием ключевого слова FROM, так как в одном Dockerfile может быть несколько вызовов FROM).

Например, у меня есть изображение, которое извлекает python:2.7.16-alpine в своем Dockerfile.Если я запускаю без изображений в системе, запуск docker build -f path/to/Dockerfile оставляет мне два изображения: generated-docker-image:tag и python:2.7.16-alpine.

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

1 Ответ

0 голосов
/ 02 апреля 2019

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

Позвольте мне показать вам пример:

1. Создаем простое Dockerfile:

FROM ubuntu:latest
RUN touch newfile

2. Из него строим образ докера:

$ docker build -t new-image .
Sending build context to Docker daemon  2.048kB
Step 1/2 : FROM ubuntu:latest
latest: Pulling from library/ubuntu
898c46f3b1a1: Pull complete
63366dfa0a50: Pull complete
041d4cd74a92: Pull complete
6e1bee0f8701: Pull complete
Digest: sha256:017eef0b616011647b269b5c65826e2e2ebddbe5d1f8c1e56b3599fb14fabec8
Status: Downloaded newer image for ubuntu:latest
 ---> 94e814e2efa8
Step 2/2 : RUN touch newfile
 ---> Running in ac93702f363b
Removing intermediate container ac93702f363b
 ---> 4d52ac122761
Successfully built 4d52ac122761
Successfully tagged new-image:latest

3. И теперь мы можем очистить все изображения, которые использовались для построения окончательного:

$ docker history new-image:latest | awk '!/IMAGE|<missing>/ {print $1}' | xargs -I {} docker rmi {}
Untagged: new-image:latest
Deleted: sha256:4d52ac122761ec1ba9f3d77606c49f98cf8c7d728d60834a87f25cede39a2027
Deleted: sha256:7f62b9533dbd6514fe0cb7f4ddc3086ad5ae45fe1c13f5eeea1cc38f575e92bd
Untagged: ubuntu:latest
Untagged: ubuntu@sha256:017eef0b616011647b269b5c65826e2e2ebddbe5d1f8c1e56b3599fb14fabec8
Deleted: sha256:94e814e2efa8845d95b2112d54497fbad173e45121ce9255b93401392f538499
Deleted: sha256:e783d8ee44ce099d51cbe699f699a04e43c9af445d85d8576f0172ba92e4e16c
Deleted: sha256:cc7fae10c2d465c5e4b95167987eaa53ae01a13df6894493efc5b28b95c1bba2
Deleted: sha256:99fc3504db138523ca958c0c1887dd5e8b59f8104fbd6fd4eed485c3e25d2446
Deleted: sha256:762d8e1a60542b83df67c13ec0d75517e5104dee84d8aa7fe5401113f89854d9
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...