LoginSignup
3
3

More than 5 years have passed since last update.

ElasticBeanstalkのDockerrun.aws.jsonから ECRにdocker imageをpush するscript

Posted at

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
3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3