Docker RegistryでS3を使ってDockerのプライベートリポジトリをたてる

AWSの設定

まずS3のバケットを作成して、以下のポリシーを設定したユーザーを作成します。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket",
        "s3:GetBucketLocation",
        "s3:ListBucketMultipartUploads"
      ],
      "Resource": "arn:aws:s3:::registry-bucket-name"
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:DeleteObject",
        "s3:ListMultipartUploadParts",
        "s3:AbortMultipartUpload"
      ],
      "Resource": "arn:aws:s3:::registry-bucket-name/*"
    }
  ]
}

ローカルの設定

これでAWS側の設定が完了したので、ローカル側での設定をします。

docker pull registry:latest

まずRegistoryをpullして、config.ymlに以下の設定をします。

version: 0.1
log:
  fields:
    service: registry
storage:
  s3:
    accesskey: AKXXXXXXXXXXXXXXXXXXX
    secretkey: xxxxxxxxxxxxxxxxxxxxxxxx
    region: ap-northeast-1
    bucket: registry-bucket-name
    secure: true
    v4auth: true
    chunksize: 5242880
    multipartcopychunksize: 33554432
    multipartcopymaxconcurrency: 100
    multipartcopythresholdsize: 33554432
http:
  addr: :5000
  headers:
    X-Content-Type-Options: [nosniff]
health:
  storagedriver:
    enabled: true
    interval: 10s
    threshold: 3

設定ファイルを指定してdocker runします。

docker run -d -p 5000:5000 --restart=always -v `pwd`/config.yml:/etc/docker/registry/config.yml registry:latest

push

localhost:5000を指定してpushします。

docker push localhost:5000/userid/appname