Маркировка изображений Docker в ECR - PullRequest
0 голосов
/ 04 ноября 2019

Я отправляю изображение докера в AWS ECR с помощью Jenkins.

При отправке изображения я предоставляю тег как $ Build_Number.Так в репозитории ECR у меня есть изображения с тегами, подобными 1,2,3,4.

Но когда я пытаюсь получить изображение из EC2 с помощью приведенной ниже команды из задания Jenkins

       docker pull 944XXX.dkr.ecr.us-east-1.amazonaws.com/repository1:latest

Я получаю сообщение об ошибке, так как нет изображения с тегом как последний.

Здесь я хочу получить последнее изображение (с тегом 4). Я не могу здесь жестко кодировать номер тега, поскольку команда docker pull автоматически запускается из задания Jenkins. Так, каким образом я могу получить последнее изображение?

Ответы [ 3 ]

3 голосов
/ 04 ноября 2019

Я считаю, что правильным подходом здесь было бы дважды нажать одно и то же изображение с разными тегами. Одно нажатие будет включать изображение без тега, а затем второе нажатие будет таким же изображением после того, как вы отметили его.

Обратите внимание, что вам не нужно создавать изображение дважды. Вам нужно всего лишь выдать docker push дважды.

ECR достаточно «умный», чтобы распознать, что дайджест изображения не изменился, и он не будет пытаться загрузить изображение дважды. При втором нажатии только тег будет отправлен в ECR.

Теперь, когда у вас есть версия без тега и версия с тегом, вы можете извлечь изображение без спецификации тега, и вы получите изображение :latest. Вот ссылка на документацию AWS , где говорится, что тег :latest будет добавлен, если пользователь не отправил тег.

Поток будет выглядеть примерно так:

# Build the image
docker build -f ./Dockerfile -t my-web-app
# Push the untagged image (will become the ":latest")
docker push my-web-app
# Tag the image with your build_number
docker tag my-web-app my-web-app:build_number
# Push the tagged image 
docker push my-web-app:build_number

Теперь вы сможете:

docker pull my-web-app:build_number
docker pull my-web-app

, что приведет к 2 одинаковым изображениям с разграничением только тега.

2 голосов
/ 04 ноября 2019

@Lix предлагает одно решение, которое вы можете попробовать, или, если вас интересует только последнее нажатое изображение и какой бы тег у него не было, вы можете получить последнее изображение из AWS-CLI.

Таким образом, ваша команда задания Дженкинса будет

TAG=$(aws ecr describe-images --output json --repository-name stage/redis --query 'sort_by(imageDetails,& imagePushedAt)[-1].imageTags[0]' | jq . --raw-output)
docker pull 944XXX.dkr.ecr.us-east-1.amazonaws.com/repository1:$TAG

aws-cli-ecr-list-images-get-newest

0 голосов
/ 04 ноября 2019

Если вам нужен тег latest в ECR, вам нужно добавить его и вставить туда при создании образа. Вы можете использовать от -t до docker build несколько раз (см. https://docs.docker.com/v17.09/engine/reference/commandline/build/);, просто обязательно нажмите их все.

...