Сохранить длинные теги Docker в локальном реестре после перехода на удаленный?

#docker

Вопрос:

Чтобы переместить изображение Docker с моей локальной машины в удаленное хранилище (в моем случае на ECR Amazon), я понимаю, что оно должно быть помечено именем хоста репозитория, чтобы Docker знал, куда его отправить. Типичная последовательность выглядит так

     $ docker tag myimage:v1 400000000000.dkr.ecr.us-east-1.amazonaws.com/myimage:v1
    $ docker push 400000000000.dkr.ecr.us-east-1.amazonaws.com/myimage:v1
 

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

Есть ли какая-то ценность в сохранении этих длинных имен в моем локальном реестре, или разумно просто удалить их после нажатия? Я понимаю, что я не экономлю никакого реального дискового пространства, удаляя длинное имя (так как изображение все еще называется коротким), но в интересах удаления беспорядка я бы предпочел не хранить их, если нет веской причины. Я всегда могу использовать консоль ECR или другие инструменты для просмотра изображений, находящихся в удаленном хранилище.

Заранее спасибо за любые рекомендации, которые вы можете предложить!

Ответ №1:

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

Даже если вы используете обычные команды Docker, вы можете установить переменную оболочки в имя репозитория ECR, чтобы сэкономить время ввода:

 ECR=400000000000.dkr.ecr.us-east-1.amazonaws.com
docker build -t "$ECR/myimage:20210708" .
docker push "$ECR/myimage:20210708"
 

Если вы используете такой инструмент, как Docker Compose , вы можете записать полное имя репозитория в docker-compose.yml , но сделав это, вам нужно сделать это только один раз; нет особой необходимости в коротком имени.

В контексте Kubernetes, если вы используете Helm для развертывания, оказывается очень полезным разделить «репозиторий», «изображение» и «тег» на три отдельных значения. Это вдвойне верно с тех пор, как было введено ограничение скорости Docker Hub, поскольку оно позволяет настроить репозиторий на локальное зеркало.

 image: {{ .Values.repository }}/{{ .Values.image }}:{{ .Values.tag }}
 
 repository: docker-mirror.example.com # chart default: docker.io
image: my/image
tag: '20210708'
 

Комментарии:

1. Большое спасибо за неожиданный, но разумный совет! Мне придется подумать об использовании только длинных имен, так как большая часть работы выполняется локально и людьми, у которых даже нет доступа к ресурсам AWS. Возможно, в таких ситуациях мы могли бы просто установить глобальный префикс (например, ваш $ECR), который был бы какой-то строкой, не относящейся к Amazon, при работе вне контекста ECR. Еще раз спасибо!