Поиск по сайту:

Как добавлять, заменять и удалять теги изображений Docker


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

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

example-image:1.1.0-apache
example-image:1.1.0-nginx
example-image:1.2.0-apache
example-image:1.2.0-nginx

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

Вы можете добавлять свои собственные теги к любому изображению, которое вы создаете или извлекаете. Локальные теги позволяют быстро идентифицировать определенные изображения в будущем. В этом руководстве мы покажем, как управлять тегами изображений с помощью интерфейса командной строки Docker.

Добавление тегов

Теги добавляются к изображениям с помощью команды docker tag. Теги также можно прикрепить при создании образа с помощью docker build, передав флаг -t.

Команда tag принимает два аргумента: существующий тег, идентифицирующий изображение, и новый «целевой» тег, назначаемый этому изображению:

# docker tag <source image> <new tag>
docker tag example-image:1.1.0 example-image:1.1.0-apache

Оба тега теперь будут ссылаться на одно и то же изображение, поэтому вы можете начать использовать их взаимозаменяемо. Однако запуск docker pull example-image:1.1.0 не повлияет на тег 1.1.0-apache. Ссылка на изображение тега не обновляется, если вы не включили его вручную в команду CLI.

Единственным исключением из этого правила является часто неправильно понимаемый тег latest. Когда вы загружаете «голый» образ без тега, например docker pull example-image, Docker неявно использует latest.

Изображения без тегов

Команда docker tag будет принимать идентификаторы изображений в качестве ссылки на источник вместо существующего тега. Если вы получили изображение без тегов, запустите команду docker images, чтобы найти его идентификатор, а затем используйте docker tag, чтобы назначить новый тег:

docker tag 0e3e06b48755 example-image:latest

Когда вы вытаскиваете новую версию тега, у вас могут быть изображения без тегов:

# already has example-image:latest
docker pull example-image:latest

Первоначальная цель тега example-image:latest все еще существует в вашей системе, но теперь она не помечена. Пул загрузил новые данные изображения и переназначил тег latest для ссылки на них.

Использование тегов для отправки изображений

Одна из ситуаций, когда вам нужно добавить новый тег, — это когда вы отправляете изображения между реестрами. URL-адрес реестра является частью тега. Добавьте новый тег, включающий реестр, в который вы хотите отправить данные, а затем используйте docker push, чтобы загрузить его:

docker tag example-image:latest registry.example.com/example-image:latest
docker push registry.example.com/example-image:latest

Отправка пустого тега без компонента URL-адреса отправит данные изображения в Docker Hub. Следовательно, вы должны добавить тег с именем хоста вашего сервера и необязательным номером порта, когда вы взаимодействуете с частным реестром.

Замена и изменение тегов

Команда docker tag автоматически заменит ссылку на тег, если в качестве цели используется существующий тег:

docker tag first-image:latest demo
docker tag second-image:latest demo

Тег demo теперь ссылается на второе изображение и не может использоваться для ссылки на первое изображение. Вы по-прежнему можете взаимодействовать с первым изображением, используя его оставшийся тег first-image:latest. Второе изображение можно выбрать с помощью second-image:latest или demo.

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

# Build and push v1
docker build -t example-image:v1 .
docker push example-image:v1

# v1 now refers to different image data
# This is fine for local use (tags in the 
# registry are independent of your local tags).
docker build -t example-image:v1 .

# Don't do this - now the tag in the registry
# has been changed too, which could negatively 
# impact existing users.
docker push example-image:v1

Удаление тегов

Вы можете удалить теги с изображений, загруженных на ваш компьютер. Используйте команду docker rmi, указав тег, который вы хотите удалить:

docker rmi example-image:1.1.0-apache

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

Удаление тега действует только локально, даже если вы ссылаетесь на тег, содержащий URL-адрес реестра:

# Does not remove the tag from the registry!
docker rmi registry.example.com/example-image:latest

В настоящее время вы не можете удалить определенный тег из реестра. Это соответствует принципу неизменности тегов: после того, как вы отправили контент, он может использоваться в качестве зависимости нижестоящими потребителями, поэтому Registry API опускает конечную точку удаления тега. Однако многие сторонние реализации реестра предоставляют эквивалентный механизм; стоит проверить свою документацию, если у вас есть веская причина для удаления проталкиваемого тега.

Краткое содержание

Теги используются для маркировки образов Docker ключевой отличительной информацией, такой как их версия сборки и включенные зависимости. С тегами работать намного проще, чем с SHA-идентификаторами изображений, которые можно просмотреть с помощью docker images. Теги также являются основным механизмом взаимодействия с изображениями в удаленных реестрах.

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