Docker: висячие изображения

Я пытаюсь понять следующие команды

docker image prune
docker image prune -a

Согласно документам

docker image prune: удаляет висящие изображения

docker image prune -a: Удаляет висящие и неиспользуемые образы.

Я пытаюсь понять разницу между оборванным и неиспользуемым изображением.

Согласно этой записи stackoverflow, неиспользуемый образ — это образ, который не был назначен или использован в контейнере.

В общем, если я бегу

docker pull hello-world

(ни разу не выполняя команду docker run hello-world)

Тогда изображение для hello-world будет неиспользуемым изображением??

Как тогда создаются висячие изображения?

Согласно упомянутому выше сообщению о переполнении стека, висячее изображение просто означает, что вы создали новую сборку образа, но ему не было присвоено новое имя. Таким образом, старые образы, которые у вас есть, становятся «висячими изображениями».

Что именно это означает? То есть, что значит создать новую сборку образа? Как создать новую сборку образа? Что такое изображения без тегов?

Кто-нибудь может привести пример создания висячего изображения?


person Asool    schedule 06.02.2020    source источник


Ответы (3)


Висячее изображение просто означает, что у вас есть изображение, но к нему не прикреплены теги. (Удалить неиспользуемые объекты Docker)

Как вы достигаете этого? путем создания изображения с тем же именем и тем же тегом. Это обычный случай, а не единственный.

  1. Вы создаете изображение my.image.example.com и помечаете его тегом latest.
  2. Вы можете нажать / вытащить свое изображение, сославшись на него как my.image.example.com:lastest
  3. Вы внесли некоторые изменения и перестроили свой образ. Так же, как вы сделали в шаге 1.
  4. У вас есть новый идентификатор изображения с тем же именем и тем же тегом.
  5. Первое изображение теперь висит, вы можете исправить его, только используя его полный алгоритм SHA.

Это очень высокоуровневое и абстрактное описание того, что такое тег изображения.

Большинство, если не все компьютерные программы, состоят из названия и версии. Например, вашей ОС может быть Windows 10, OSX Catalina (14 Mojave) и т. д.

В мире контейнеров тег изображения используется для обозначения версии программного обеспечения. Имя образа - это сама программа.

При загрузке изображения вы указываете имя изображения и его версию (то есть тег). Это общий вариант использования. Теги можно использовать для многих целей; к одному изображению может быть много тегов, но не один тег, который ссылается на несколько изображений.

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

person Chen A.    schedule 06.02.2020
comment
(Я новичок во всем этом). Я предполагаю, что моя путаница --- что такое тег изображения? - person Asool; 07.02.2020
comment
@Asool Я обновил свой ответ, надеюсь, это поможет. Идите вперед и потратьте некоторое время на официальную документацию, я уверен, что это поможет вам лучше понять ее. - person Chen A.; 08.02.2020
comment
Когда я делаю docker images -a, появляется много изображений с именем и тегом ‹none›. Что это и сколько места они занимают? И как проверить размер оборванных изображений, которые появляются в docker images - person variable; 05.05.2020
comment
обратитесь к docs.docker.com/engine/reference/commandline/system - person Chen A.; 06.05.2020
comment
docker rmi $(docker images -f dangling=true -q) сотрет все висячие образы - person Leandro Maro; 08.07.2020

Предположим, вы создаете образ на основе Dockerfile с тегом «asool/user-service»:

docker build -t asool/user-service .

Образ успешно создан и имеет идентификатор "5e8d606c6dcc". Следовательно, вы меняете содержимое этого Dockerfile, например. вы добавляете строку RUN apk add vim. Затем вы создаете образ с тем же тегом «asool/user-service»:

docker build -t asool/user-service .

Создается новый образ с тегом «asool/user-service» и другим идентификатором. Хотя появился новый образ, старый образ с идентификатором «5e8d606c6dcc» все еще существует. Это изображение потеряло свой тег, свое имя и, скорее всего, свое назначение. Это изображение называется висячим изображением.

Источник: Учебное пособие по Dockerfile на примере — (Часть I — Основы)

person Wasbeer    schedule 06.02.2020

Давайте по одному:

Тогда изображение для hello-world будет неиспользованным изображением??

Да.

Как тогда создаются висячие изображения?

В вашей ситуации вы можете создать новую версию того же изображения или снять тег со своего изображения, тогда у вас будет висячее изображение.

Что именно это значит? То есть, что значит создать новую сборку образа? Как создать новую сборку образа?

Вы можете создать образ в любое время, выполнив команду docker build или даже откуда-нибудь вытащив более новую версию docker pull.

Что такое изображения без тегов?

Каждое изображение имеет тег, как указано в документации, вы можете повторно пометить изображения с помощью следующей команды: docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG] Когда вы удаляете теги или снова создаете образ, обычно вы получаете изображение без тегов.

Может ли кто-нибудь привести мне пример того, как создается оборванное изображение?

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

В конце дублируется ссылка для этой проблемы: Тот же вопрос с ответом

person Matus Danoczi    schedule 06.02.2020