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

Как работают теги Docker?


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

Контейнер против изображения

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

Образ Docker — это то, что вы получаете, запуская docker build с файлом Docker. Он состоит из нескольких слоев для оптимизации использования диска и памяти. Изображение доступно только для чтения.

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

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

Теги Отслеживание версий встроенных образов

Всякий раз, когда вы запускаете docker build, вы создаете новый образ с уникальным идентификатором, например «38054d5e8a27».

Теги — это просто метки, которые обеспечивают лучший способ управления контролем версий и выпусками. Они похожи на метки, которые вы можете присвоить любой завершенной сборке. Вместо того, чтобы ссылаться на идентификатор сборки, вы можете пометить образ меткой в формате major.minor.patch и легко определить, какой образ какой, или любой другой формат, который предпочитает ваша организация.

Пометить довольно просто. Вы можете использовать тег docker, чтобы сделать это постфактум, но гораздо проще сделать это, когда вы создаете с использованием флага -t :

 docker build -t repository/image:tag .

Это создает образ из Dockerfile и помечает его указанным вами тегом. Тег — это часть [:TAG] после точки с запятой, даже если Docker скажет «Успешно помечен репозиторий/изображение:тег». Часть repository/image – это просто имя изображения, и если вы планируете отправить его в репозиторий, вы должны пометить его тегом repository/image:tag. формат.

Для Docker Hub имя репозитория — это просто ваше имя пользователя, поэтому команда будет выглядеть примерно так:

 docker build -t anthonyheddings/nginx:tag .

Если вы не укажете конкретный тег, Docker автоматически пометит его как «последний».

Другой распространенной практикой является пометка образа идентификатором фиксации git, тем самым связывая контроль версий со встроенными образами. Вы можете легко автоматизировать это с помощью git rev-parse:

docker build -t vicerust/core:$(git rev-parse --verify HEAD) .

После того как образ помечен, вы можете отправить его в реестр с помощью docker push, указав имя repository/image :

docker push repository/image

Оттуда вы можете получить к нему доступ в docker run как обычно. Если вы не укажете тег, docker run автоматически использует latest.

Последнее не всегда означает «последнее»

Тег \Latest\ сбивает с толку. Несмотря на то, как звучит название, оно не всегда указывает на последнюю версию. Это просто специальный тег, который назначается автоматически всякий раз, когда вы не указываете тег. Это приводит к тому, что теги вообще избегаются и просто выдвигается «последняя» версия.

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

 docker build -t repository/image .

Или вручную пометив изображение как latest:

 docker build -t repository/image:latest .

который хорошо работает, если вы используете только последний тег. Но если вы хотите также использовать теги идентификатора версии, вам нужно каждый раз ставить двойные теги на изображения, что может привести к тому, что «последний» не всегда означает последний созданный образ. Во избежание путаницы рекомендуется избегать использования latest вместе с другими тегами. Просто обновляйте свои теги каждый раз, либо с номерами исправлений вручную, либо с идентификаторами коммитов git.