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 CLI.

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

Теги добавляются к образам с помощью команды 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, чтобы найти его ID, а затем используйте команду docker tag для присвоения нового тега:

docker tag 0e3e06b48755 example-image:latest

При использовании новой версии тега возможно появление немаркированных образов:

docker pull example-image:latest

Исходная цель тега example-image:latest все еще существует в вашей системе, но теперь растеган.

Команда pull загрузила новые данные образа и переназначил тег 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 rmi, указав тег, который вы хотите удалить:

docker rmi example-image:1.1.0-apache

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

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

Удаление тега имеет эффект только локально, даже если вы ссылаетесь на тег, содержащую URL реджестри:

docker rmi registry.example.com/example-image:latest

# Не удаляет тег из реджестри!
docker rmi registry.example.com/example-image:latest

В настоящее время вы не сможете удалить конкретный тег из реджестри.

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

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

Заключение

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

С тегами работать гораздо проще, чем с SHA-идентификаторами образов, которые вы можете просматривать в образах docker.

Теги также являются основным механизмом для взаимодействия с образами в удаленных реджестри.

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

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

Это поможет защитить ваших пользователей от нежелательных изменений при взломе.

Поделитесь статьей:

Добавить комментарий