Last active
February 18, 2024 02:32
-
-
Save virtualbeck/a635ef6701991f2087384eab7edbb18b to your computer and use it in GitHub Desktop.
copy n number of tagged docker images from one aws ecr account to another
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
set -e | |
################################# UPDATE THESE ################################# | |
LAST_N_TAGS=10 | |
SOURCE_REGION="us-west-1" | |
DESTINATION_REGION="us-east-1" | |
SOURCE_PROFILE="profile_1" | |
DESTINATION_PROFILE="profile_2" | |
SOURCE_BASE_PATH="123456.dkr.ecr.$SOURCE_REGION.amazonaws.com" | |
DESTINATION_BASE_PATH="567890.dkr.ecr.$DESTINATION_REGION.amazonaws.com" | |
################################################################################# | |
URI=($(aws ecr describe-repositories --query 'repositories[].repositoryUri' --output text --region $SOURCE_REGION)) | |
NAME=($(aws ecr describe-repositories --query 'repositories[].repositoryName' --output text --region $SOURCE_REGION)) | |
echo "Start repo copy: `date`" | |
# source account login | |
aws --profile $SOURCE_PROFILE --region $SOURCE_REGION ecr get-login-password | docker login --username AWS --password-stdin $SOURCE_BASE_PATH | |
# destination account login | |
aws --profile $DESTINATION_PROFILE --region $DESTINATION_REGION ecr get-login-password | docker login --username AWS --password-stdin $DESTINATION_BASE_PATH | |
for i in ${!URI[@]}; do | |
echo "====> Grabbing latest $LAST_N_TAGS from ${NAME[$i]} repo" | |
# create ecr repo if one does not exist in destination account | |
aws ecr describe-repositories --repository-names ${NAME[$i]} || aws ecr create-repository --repository-name ${NAME[$i]} | |
for tag in $(aws ecr describe-images --repository-name ${NAME[$i]} \ | |
--query 'sort_by(imageDetails,& imagePushedAt)[*]' \ | |
--filter tagStatus=TAGGED --output text \ | |
| grep IMAGETAGS | awk '{print $2}' | tail -$LAST_N_TAGS); do | |
echo "start pulling image ${URI[$i]}:$tag" | |
docker pull ${URI[$i]}:$tag | |
docker tag ${URI[$i]}:$tag $DESTINATION_BASE_PATH/${NAME[$i]}:$tag | |
echo "start pushing image $DESTINATION_BASE_PATH/${NAME[$i]}:$tag" | |
docker push $DESTINATION_BASE_PATH/${NAME[$i]}:$tag | |
echo "" | |
done | |
done | |
echo "Finish repo copy: `date`" | |
echo "Don't forget to purge you local docker images!" | |
#Uncomment to delete all | |
#docker rmi $(for i in ${!NAME[@]}; do docker images | grep ${NAME[$i]} | tr -s ' ' | cut -d ' ' -f 3 | uniq; done) -f |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment