docker — висячий (отсутствует) промежуточный образ

#docker #dockerfile #credentials

#docker #dockerfile #учетные данные

Вопрос:

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

Итак, имея такое содержимое Dockerfile:

 FROM alpine/git:v2.26.2 as intermediate

ARG SSH_PRIVATE_KEY
RUN mkdir /root/.ssh/ amp;amp; chmod 755 /root/.ssh
RUN echo "${SSH_PRIVATE_KEY}" > /root/.ssh/id_ed25519 amp;amp; chmod 600 /root/.ssh/id_ed25519
# Generate public key from private key.
RUN ssh-keygen -y -f /root/.ssh/id_ed25519 > /root/.ssh/id_ed25519.pub

# make sure your domain is accepted
RUN touch /root/.ssh/known_hosts amp;amp; chmod 644 /root/.ssh/known_hosts
RUN ssh-keyscan github.com >> /root/.ssh/known_hosts

RUN git clone -b master --single-branch git@github.com:user/my-repo.git /root/my-repo

FROM main_image

# Do some stuff
COPY --from=intermediate /root/my-repo /mnt/my-repo
# Do some stuff more...
# ....
# ....
CMD ["my_cmd"]
 

Вопрос: после того, как изображение построено из этого файла Dockerfile, я также получаю висячий образ None (при условии, что он поступает из промежуточного образа). docker images , выводит это None изображение (есть также много None изображений, которые отображаются docker images -a , но те, которые я знаю, ожидаемы). Ожидается ли, что это всегда будет происходить, и я должен просто удалить его, или я делаю что-то не так, и я не должен получать висячее изображение после создания моего изображения?

Ответ №1:

Да, вы правы, что если вы видите «none: none» при запуске «docker images -a», это промежуточные изображения, которые повторно используются позже с использованием кэшированных слоев

Когда вы видите изображения ‘none: none’ при выполнении команды ‘docker images’, это изображения, которые висят и больше не используются, поэтому их следует удалить, чтобы сохранить место на диске

Этот сайт объясняет это довольно хорошо — https://www.projectatomic.io/blog/2015/07/what-are-docker-none-none-images /.

В нем используется пример извлечения базового образа Fedora для запуска образа «hello-world» (то есть было создано 2 изображения — промежуточное для Fedora и выходное изображение для нашего приложения hello-world)

Если вы перестроили образ hello-world месяц спустя и доступна новая версия Fedora, новый образ Fedora извлекается, оставляя старый промежуточный образ Fedora висячим (с none:none), и тогда он просто занимает место на диске