Slide 1

Slide 1 text

GitLab-CI で Private Registry を利用する話 USE TEMPLATE Click あさぎ(@_athagi)
 DockerCon 2021 & Docker Meetup Tokyo #35 (#dockertokyo)


Slide 2

Slide 2 text

GitLab-CI
 ● GitLab 8.0 で本体に統合されたCICDツール
 ● GitLab 12.x / 13.x で機能強化
 ● yaml で書ける
 


Slide 3

Slide 3 text

Runner Manager docker pull
 git push
 docker-machine create 


Slide 4

Slide 4 text

docker-machine
 ● 2018年 メンテナンスモードに
 ● GitLab ではFork して利用


Slide 5

Slide 5 text

Docker Hub rate limit が開始
 ● 2020年11月から
 ● anonymous: 100pulls/6h
 ● IPアドレスに対して制限
 ● authenticated: 200pulls/6h
 
 https://www.docker.com/blog/scaling-docker-to-serve-millions-more-developers-network-egress/ 


Slide 6

Slide 6 text

Docker Hub rate limit が開始
 ● 2020年11月から
 ● anonymous: 100pulls/6h
 ● IPアドレスに対して制限
 ● authenticated: 200pulls/6h
 
 https://www.docker.com/blog/scaling-docker-to-serve-millions-more-developers-network-egress/ 


Slide 7

Slide 7 text

Runner Manager docker pull
 git push


Slide 8

Slide 8 text

一瞬で rate limit 超過...


Slide 9

Slide 9 text

Runner Manager docker pull
 git push
 ecr public
 ecr 


Slide 10

Slide 10 text

Private registry にログインする必要がある
 ● docker login
 ● ecr-credential-helper


Slide 11

Slide 11 text

実現したかったこと
 ● CI を実行する際にECRのイメージを透過的に利用したい
 ● CIで docker イメージの build & push したい
 ● できる限り管理するものは減らしたい
 


Slide 12

Slide 12 text

Runner Manager metadata service gitlab-runner ecr-credential-helper .ecr/cache.json docker-machine docker-machine create
 dokcer run + payload
 config.toml (DOCKER_AUTH_CONFIG) docker.sock docker.sock awscli docker pull/push/login 
 ECR read (Instance Profile)

Slide 13

Slide 13 text

Runner Manager metadata service gitlab-runner ecr-credential-helper .ecr/cache.json docker-machine docker-machine create
 dokcer run + payload
 config.toml (DOCKER_AUTH_CONFIG) docker.sock docker.sock awscli docker pull/push/login 
 ECR read (Instance Profile) pull


Slide 14

Slide 14 text

Runner Manager metadata service gitlab-runner ecr-credential-helper .ecr/cache.json docker-machine docker-machine create
 dokcer run + token
 config.toml (DOCKER_AUTH_CONFIG) docker.sock docker.sock awscli docker pull/push/login 
 ECR read (Instance Profile) build & push


Slide 15

Slide 15 text

Point
 ● 利用者がイメージを利用する際は Credential を意識する必要 がない
 ● ECR の認証は ecr-credential-helper & Instance Profile
 ● Official Image が Docker Hub だけにあり、パブリックレジストリ にないイメージは運用を考える必要があるった


Slide 16

Slide 16 text

うれしいニュース!!!


Slide 17

Slide 17 text

まとめ
 ● docker-machine はメンテナンスモードなので GitLab-CI では Fork して利用
 ● client 側で token を取得して docker run 時に host に一緒に 渡している
 ● docker-credential-helper を利用することで透過的に利用でき るようになる


Slide 18

Slide 18 text

参考資料
 ● docker-machine
 ○ https://docs.docker.com/machine/ 
 ○ https://docs.docker.com/machine/drivers/aws/#options 
 ○ https://github.com/docker/machine/issues/4537#issue-341148889 
 ● amazon-ecr-credential-helper 
 ○ https://github.com/awslabs/amazon-ecr-credential-helper 
 ● Autoscaling GitLab Runner on AWS EC2 
 ○ https://docs.gitlab.com/runner/configuration/runner_autoscale_aws/ 
 ● Define an image from a private Container Registry 
 ○ https://docs.gitlab.com/ee/ci/docker/using_docker_images.html#define-an-image-from-a-privat e-container-registry