#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. Еще раз спасибо!