репозиторий/тег — это после копирования образа Docker.

Вопрос или проблема

На моей старой машине с Ubuntu 16.04 есть следующий образ Docker:

sudo docker images

REPOSITORY                    TAG       IMAGE ID       CREATED         SIZE
php53s                        latest    c8a8315b4970   7 years ago     280MB

Я скопировал этот образ на новую машину с Ubuntu 22.04 с помощью следующих команд:

# Старая машина:
sudo docker save -o php53-image.tar c8a8315b4970

# Новая машина:
sudo docker load -i php53-image.tar

и даже смог запустить его по новому id образа, но на новой машине образ отображается без репозитория/тега:

$ sudo docker images
REPOSITORY               TAG       IMAGE ID       CREATED         SIZE
<none>                   <none>    c8a8315b4970   7 years ago     280MB

Как присвоить репозиторий/тег новому образу?

Ответ или решение

Когда вы переносите Docker-образ с одной машины на другую с использованием команды docker save и затем docker load, иногда теряются метаданные, такие как имя репозитория и теги. Это может стать источником путаницы, когда вы видите в списке загруженных образов <none> для репозитория и тега. Давайте рассмотрим это подробнее.

Теория

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

Команда docker save экспортирует образ в tar-архив, содержащий слои образа и метаданные. Однако, когда вы загружаете этот архив командой docker load, репозиторий и теги могут не загрузиться, что приводит к отображению <none> в команде docker images.

Пример

В вашем случае на старой машине Ubuntu 16.04 образ имел репозиторий php53s и тег latest. Вы создали архив этого образа с помощью команды:

sudo docker save -o php53-image.tar c8a8315b4970

После переноса архива на новую машину Ubuntu 22.04 вы его загрузили:

sudo docker load -i php53-image.tar

Однако, при проверке доступных образов с помощью команды docker images, вместо ожидаемого репозитория и тега вы увидели следующее:

REPOSITORY               TAG       IMAGE ID       CREATED         SIZE
<none>                   <none>    c8a8315b4970   7 years ago     280MB

Применение

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

  1. Найдите IMAGE ID загруженного образа. В вашем случае это c8a8315b4970.

  2. Присвойте новый репозиторий и тег. Например, если вы хотите восстановить оригинальный репозиторий php53s и тег latest, выполните команду:

    sudo docker tag c8a8315b4970 php53s:latest

Теперь, если вы снова выполните docker images, должно отображаться следующее:

REPOSITORY               TAG       IMAGE ID       CREATED         SIZE
php53s                   latest    c8a8315b4970   7 years ago     280MB

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

Общие рекомендации

  • Сохранение метаданных: Чтобы сохранить репозиторий и теги при переносе, можно не только использовать docker save, но и задействовать регистры образов как центральное хранилище, например, Docker Hub или локальный Docker Registry.

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

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

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

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

Капча загружается...