TL;DR
ElasticBeanstalkのDockerrun.aws.jsonからAmazon ECRに docker image をpushする
PrimaryなDocker Registryは docker hubなり quay.io なり、ECR以外のRegistryを利用している場合に
SecondaryなDocker RegistryとしてECRを利用するときにdocker imageをsyncする
script
# Docker image sync quay.io to Amazon ECR
# require docker login over aws cli
# command here :
# aws ecr get-login --region ap-northeast-1
# and exec display docker login command
# $(aws ecr get-login --region ap-northeast-1)
#
require 'json'
def targets
# Dockerrun.aws.json
json = open('./Dockerrun.aws.json') do |file|
JSON.load(file)
end
images = []
json['containerDefinitions'].each do |caontainer|
images << caontainer['image']
end
images
end
def docker_pull(image)
`docker pull #{image}`
end
def tag_change(image)
new_tag = replace_repository(image)
`docker tag #{image} #{new_tag}`
end
def docker_push(image)
new_tag = replace_repository(image)
`docker push #{new_tag}`
end
def replace_repository(image)
repository, tag = image.split(':')
repository.gsub!(%r{quay.io/hogehoge}, ecr_host)
return "#{repository}:latest" if ARGV[0] == 'latest'
"#{repository}:#{tag}"
end
def ecr_host
'xxxxxxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com'
end
targets.each do |image|
docker_pull(image)
tag_change(image)
docker_push(image)
end