2014-11-06 3 views
1

Я создаю очень простые контейнеры для докеров. Я понимаю, что после каждого шага создается новый контейнер. Тем не менее, при использовании других Dockerfiles из концентратора я не заканчиваю немаркированными изображениями. Так откуда они берутся? После просмотра в Интернете я выяснил, как их удалить, но я хочу лучше понять, откуда они взялись. В идеале я хотел бы предотвратить их создание.Откуда берутся немаркированные изображения Docker?

Из их документации

Это покажет немаркированные изображения, которые являются листья изображений дерева (а не промежуточные слои). Эти образы возникают, когда новая сборка изображения занимает репо: ярлык от идентификатора IMAGE, оставляя его без тегов. Предупреждение будет выдано при попытке удалить изображение, если в данный момент используется контейнер . Имея этот флаг, он позволяет выполнять очистку партии .

Я не совсем понимаю это. Почему сборщики берут repo:tag от идентификатора IMAGE?

ответ

3

Docker использует файловую систему под названием AUFS, которая обозначает дополненную файловую систему. Практически каждая строка файла Docker создаст новое изображение, и когда вы складываете или дополняете их все друг на друга, вы получите окончательное изображение докера. Это, по сути, способ кэширования, поэтому, если вы измените только 9-ю строку вашего файла Docker, он не перестроит весь набор изображений. (Ну зависит от того, какие команды есть в вашем файле Докер, если у вас есть COPY или ADD ничего после того, как эта точка кэшируются для экс)

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

+0

Итак, промежуточные шаги - это создание непомеченных изображений? Почему я только вижу их на своих пользовательских Dockerfiles? Когда я копирую один из хаба, я, похоже, не получаю их. И когда я говорю «Копировать», я имею в виду содержимое Dockerfile; Я не загружаю изображение. –

+0

Вы пробовали 'docker images -a'? Это будет показывать все –

+0

Обратите внимание, что 'docker images -a' - единственный способ увидеть промежуточные изображения; если OP не использует эту опцию, тогда мой ответ будет применен. – jwodder

1

Всякий раз, когда вы назначаете тег, который уже используется для нового изображения (например, создавая изображение foo, внося изменения в свой файл Docker, а затем снова создавая foo), старое изображение потеряет этот тег, но все равно останется оставайтесь там, даже если все его теги удалены. Эти более старые версии ваших изображений представляют собой немаркированные записи на выходе docker images, и вы можете безопасно удалить их с помощью docker rmi <IMAGE HASH> (хотя для удаления будет отказано, если контейнер с контейнером по-прежнему использует это изображение).

+0

@ adam-beck ... это основная причина тех непомеченных изображений, которые OP спрашивает о –

Смежные вопросы