Git Product home page Git Product logo

docker-mirror's Introduction

docker-mirror

build

This project will copy public DockerHub, Quay or GCR repositories to a private registry.

Install / Building

  • make sure you got Go 1.15 or newer
    • OSX: brew install go
  • make sure you have CGO enabled
    • export CGO_ENABLED=1
  • clone this repository to $HOME/src/github.com/seatgeek/docker-mirror
  • change your working directory to $HOME/go/src/github.com/seatgeek/docker-mirror
  • run go install to build and install the docker-mirror binary into your $HOME/go/bin/ directory
    • alternative: go build to build the binary and put it in the current working directory

Using

Make sure that your local Docker agent is logged into to ECR.

  • To login to ECR private registries:
    aws ecr get-login-password --region us-east-1 | docker login -u AWS --password-stdin ACCOUNT_ID.dkr.REGION.amazonaws.com
  • To login to ECR public registries:
    aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws/YOUR_ECR_PUBLIC_SUFFIX
    Note that the region must be us-east-1 for ECR public registry authentication.

See AWS ECR documentation for more details

docker-mirror will automatically create the ECR repository on demand, so you do not need to login and do any UI operations in the AWS Console.

docker-mirror will look for your AWS credentials in all the default locations (env, ~/.aws/ and so forth like normal AWS tools do)

Configuration File

There are several configuration options you can use in your config.yaml below. Please see the config.yaml file in the repository for a full example.

  • ignore_tag: This option sets tags that can be ignored on pulls. (i.e. ignore_tag: - "*-alpine")

  • match_tag: This option sets the tags that you want to match on for pulls. (i.e. match_tag: - "3*")

  • max_tag_age: This option sets the max tag age you wish to pull from. (i.e. max_tag_age: 4w)

  • name: This option sets the name of your repository. (i.e. name: elasticsearch)

  • host: This options sets where do you want to mirror repositories from. Accepted values include hub.docker.com, quay.io and gcr.io. If not set, images will be pulled from Docker Hub.

  • private_registry: This option allows you to set a private Docker registry prefix for docker pulls. It will prefix any of your name: options with the private_registry name and a slash to allow you to customize where your images are being pulled through. This is particularly useful if you use a proxy to dockerhub. i.e. (private_registry: "private-registry-name")

Adding new mirror repository

  • add the new repository to the config.yaml file
    • TIP: omit the max_tag_age for the initial sync to mirror all historic tags (match_tag is fine to use in all cases)
  • run PREFIX=${reopsitory_name} docker-mirror to trigger a sync for the specific new repository (you probably don't want to sync all the existing repositories)
  • add the max_tag_age filter to the newly added repository so future syns won't cosider all historic tags

Updating / resync an existing repository

  • run PREFIX=${reopsitory_name} docker-mirror to trigger a sync for the specific repository
    • TIP: Consider if the tags you want to sync fits within the max_tag_age and other filters

Update all repositories

  • run docker-mirror and wait (for a while)

Example config.yaml

---
cleanup: true # (optional) Clean the mirrored images (default: false)
target:
  # where to copy images to
  # Below is an example of the ECR private registry.
  # To mirror repositories to a ECR public registry, replace this value with public.ecr.aws/YOUR_ECR_PUBLIC_ALIAS
  registry: ACCOUNT_ID.dkr.REGION.amazonaws.com

  # (optional) prefix all repositories with this name
  # ACCOUNT_ID.dkr.REGION.amazonaws.com/hub/jippi/hashi-ui
  prefix: "hub/"

# what repositories to copy
repositories:
    # will automatically know it's a "library" repository in dockerhub
  - name: elasticsearch
    match_tag: # tags to match, can be specific or glob pattern
      - "5.6.8" # specific tag match
      - "6.*"   # glob patterns will match
    ignore_tag: # tags to never match on (even if its matched by `tag`)
      - "*-alpine" # support both glob or specific strings

  - name: yotpo/resec
    host: hub.docker.com # mirror the repository from Docker Hub
    max_tag_age: 8w # only import tags that are 8w or less old

  - name: jippi/hashi-ui
    max_tags: 10 # only copy the 10 latest tags
    match_tag:
      - "v*"
        
  - name: kubebuilder/kube-rbac-proxy
    host: gcr.io # mirror the repository from Google Container Registry 

  - name: jippi/go-metadataproxy # import all tags

Environment Variables

Environment Variable Default Description
CONFIG_FILE config.yaml config file to use
DOCKERHUB_USER unset optional user to authenticate to docker hub with
DOCKERHUB_PASSWORD unset optional password to authenticate to docker hub with
LOG_LEVEL unset optional control the log level output
PREFIX unset optional only mirror images that match the defined prefix

docker-mirror's People

Contributors

ad7six avatar burdandrei avatar ctbur avatar dependabot-preview[bot] avatar dependabot[bot] avatar druwadi avatar ferca-celonis avatar inverse avatar jippi avatar josegonzalez avatar peterdavehello avatar ppejovic avatar sampointer avatar thomasf avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.