Как использовать команду docker image tag для управления псевдонимами образов

DockerDockerBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом лабораторном занятии (LabEx) вы научитесь эффективно управлять псевдонимами Docker-образов с помощью команды docker image tag. Сначала мы разберем структуру и компоненты ссылок на Docker-образы, которые являются важными для идентификации и нахождения конкретных версий образов.

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") docker/ImageOperationsGroup -.-> docker/tag("Tag an Image") docker/ImageOperationsGroup -.-> docker/images("List Images") subgraph Lab Skills docker/pull -.-> lab-555163{{"Как использовать команду docker image tag для управления псевдонимами образов"}} docker/tag -.-> lab-555163{{"Как использовать команду docker image tag для управления псевдонимами образов"}} docker/images -.-> lab-555163{{"Как использовать команду docker image tag для управления псевдонимами образов"}} end

Понимание ссылок на Docker-образы

На этом этапе мы узнаем о ссылках на Docker-образы. Ссылка на Docker-образ - это имя, которое указывает на конкретную версию Docker-образа. Именно таким образом вы сообщаете Docker, какой образ вы хотите использовать при запуске контейнера или выполнении других операций, связанных с образами.

Полная ссылка на образ обычно состоит из нескольких частей:

[registry_hostname[:port]/]image_name[:tag]

Разберем эти части:

  • registry_hostname[:port]: Это имя хоста и, по желанию, порт Docker-реестра, где хранится образ. Если эта часть опущена, Docker по умолчанию использует Docker Hub (docker.io).
  • image_name: Это имя образа. Оно может включать пространство имен (например, library/ubuntu или myuser/myapp). Если для официальных образов на Docker Hub не указано пространство имен, подразумевается пространство имен library/ (например, ubuntu эквивалентно library/ubuntu).
  • tag: Это необязательный тег, который указывает конкретную версию или вариант образа. Если тег не указан, Docker по умолчанию использует тег latest.

Рассмотрим несколько примеров:

  • ubuntu: Это относится к тегу latest официального образа ubuntu на Docker Hub.
  • ubuntu:20.04: Это относится к тегу 20.04 официального образа ubuntu на Docker Hub.
  • myuser/myapp: Это относится к тегу latest образа myapp в репозитории myuser на Docker Hub.
  • myuser/myapp:v1.0: Это относится к тегу v1.0 образа myapp в репозитории myuser на Docker Hub.
  • myregistry.example.com:5000/myuser/myapp:v1.0: Это относится к тегу v1.0 образа myapp в репозитории myuser на частном реестре, расположенном по адресу myregistry.example.com на порту 5000.

Чтобы увидеть, как работают ссылки на образы на практике, давайте загрузим образ, используя его ссылку. Мы загрузим образ hello-world, который является очень маленьким образом, используемым для тестирования установки Docker.

docker pull hello-world

Вы должны увидеть вывод, указывающий, что Docker загружает образ.

Using default tag: latest
latest: Pulling from library/hello-world
...
Status: Downloaded newer image for hello-world:latest
docker.io/library/hello-world:latest

Эта команда загрузила тег latest образа hello-world с Docker Hub. Вывод подтверждает полную ссылку docker.io/library/hello-world:latest.

Теперь выведем список загруженных образов.

docker images

Вы должны увидеть образ hello-world в списке.

REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
hello-world   latest    <image_id>     <created_time>   <size>

Вывод показывает REPOSITORY (имя образа), TAG, IMAGE ID, время создания (CREATED) и размер (SIZE) образа. IMAGE ID - это уникальный идентификатор содержимого образа.

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

Создание тега для образа по его идентификатору (Image ID)

На этом этапе мы научимся создавать тег для Docker-образа, используя его идентификатор (Image ID). Создание тега для образа позволяет дать ему новое имя и/или тег, создав новую ссылку, которая указывает на то же самое содержимое образа. Это полезно для создания псевдонимов, управления версиями или подготовки образа для отправки в другой реестр.

Основная команда для создания тега для образа - docker tag. Синтаксис выглядит так:

docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]

Вы можете указать исходный образ, используя его идентификатор (Image ID), имя или имя и тег. На этом этапе мы будем использовать идентификатор (Image ID).

Сначала выведем список образов еще раз, чтобы получить идентификатор (Image ID) образа hello-world, который мы загрузили на предыдущем этапе.

docker images

Найдите образ hello-world в выводе и запишите его IMAGE ID. Это будет строка шестнадцатеричных символов, например, bf756fb1cdb1. Вам нужно использовать только первые несколько символов идентификатора, если они уникальны среди ваших образов.

Теперь создадим тег для образа hello-world, используя его идентификатор (Image ID). Мы создадим для него новый тег с именем my-hello-world и тегом v1.0. Замените <image_id> на фактический идентификатор (Image ID), который вы записали из вывода команды docker images.

docker tag < image_id > my-hello-world:v1.0

Если команда выполнится успешно, не будет никакого вывода.

Теперь выведем список образов еще раз, чтобы увидеть новый тег.

docker images

Теперь вы должны увидеть новую запись с репозиторием my-hello-world и тегом v1.0. Обратите внимание, что у него тот же IMAGE ID, что и у исходного образа hello-world. Это подтверждает, что новый тег - это просто ссылка на то же самое содержимое образа.

REPOSITORY       TAG       IMAGE ID       CREATED        SIZE
hello-world      latest    <image_id>     <created_time>   <size>
my-hello-world   v1.0      <image_id>     <created_time>   <size>

Вы успешно создали тег для образа, используя его идентификатор (Image ID). Это фундаментальная операция при управлении Docker-образами.

Создание тега для образа по его имени

На этом этапе мы научимся создавать тег для Docker-образа, используя его имя. Это еще один распространенный способ ссылаться на образ при создании тега. Когда вы используете только имя образа без тега, Docker предполагает, что вы ссылаетесь на образ с тегом latest.

Синтаксис создания тега с использованием имени образа остается тем же, что и раньше:

docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]

На этот раз наш SOURCE_IMAGE будет именем образа. Мы снова будем использовать образ hello-world. Поскольку мы не указываем тег для исходного образа, Docker будет использовать hello-world:latest.

Создадим тег для образа hello-world с новым именем another-hello-world и тегом v2.0.

docker tag hello-world another-hello-world:v2.0

Снова, если команда выполнится успешно, не будет никакого вывода.

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

docker images

Теперь вы должны увидеть новую запись с репозиторием another-hello-world и тегом v2.0. Как и на предыдущем этапе, этот новый тег также указывает на тот же IMAGE ID, что и исходный образ hello-world.

REPOSITORY          TAG       IMAGE ID       CREATED        SIZE
hello-world         latest    <image_id>     <created_time>   <size>
my-hello-world      v1.0      <image_id>     <created_time>   <size>
another-hello-world v2.0      <image_id>     <created_time>   <size>

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

Создание тега для образа по его имени и тегу

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

Синтаксис остается тем же:

docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]

На этот раз наш SOURCE_IMAGE будет указан как по имени, так и по тегу. Мы будем использовать образ my-hello-world:v1.0, который мы создали на предыдущем этапе.

Создадим тег для образа my-hello-world:v1.0 с новым именем yet-another-hello-world и тегом release.

docker tag my-hello-world:v1.0 yet-another-hello-world:release

Если команда выполнится успешно, не будет никакого вывода.

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

docker images

Теперь вы должны увидеть новую запись с репозиторием yet-another-hello-world и тегом release. Этот новый тег также указывает на тот же IMAGE ID, что и исходный образ hello-world и другие теги, которые мы создали.

REPOSITORY              TAG       IMAGE ID       CREATED        SIZE
hello-world             latest    <image_id>     <created_time>   <size>
my-hello-world          v1.0      <image_id>     <created_time>   <size>
another-hello-world     v2.0      <image_id>     <created_time>   <size>
yet-another-hello-world release   <image_id>     <created_time>   <size>

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

Создание тега для образа для приватного реестра

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

Синтаксис создания тега остается прежним:

docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]

Теперь TARGET_IMAGE будет включать информацию о реестре:

[registry_hostname[:port]/]image_name[:tag]

Предположим, что у нас есть приватный реестр, работающий по адресу myregistry.example.com на порту 5000. Мы создадим тег для образа hello-world (используя его тег latest), чтобы подготовить его к отправке в этот гипотетический реестр. Назовем его my-hello-world и добавим тег prod.

docker tag hello-world:latest myregistry.example.com:5000/my-hello-world:prod

Если команда выполнится успешно, не будет никакого вывода.

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

docker images

Теперь вы должны увидеть новую запись с репозиторием myregistry.example.com:5000/my-hello-world и тегом prod. Этот тег также указывает на тот же IMAGE ID, что и исходный образ hello-world.

REPOSITORY                                TAG       IMAGE ID       CREATED        SIZE
hello-world                               latest    <image_id>     <created_time>   <size>
my-hello-world                            v1.0      <image_id>     <created_time>   <size>
another-hello-world                       v2.0      <image_id>     <created_time>   <size>
yet-another-hello-world                   release   <image_id>     <created_time>   <size>
myregistry.example.com:5000/my-hello-world prod      <image_id>     <created_time>   <size>

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

Резюме

В этом практическом занятии (лабораторной работе) мы изучили ссылки на Docker-образы, поняли их структуру, включая необязательное имя хоста реестра, имя образа и тег. Мы увидели, как эти ссылки используются для уникальной идентификации и загрузки определенных версий образов из Docker-реестра.

Затем мы изучили, как использовать команду docker image tag для создания псевдонимов для существующих образов. Мы практиковались в создании тегов для образа с использованием его идентификатора (ID), существующего имени и комбинации существующего имени и тега. Наконец, мы научились создавать тег для образа с ссылкой, включающей имя хоста приватного реестра, чтобы подготовить его к отправке в пользовательский реестр.