Docker Registry

在 AWS 上面有幾個方式可以架自己的 registry

ec2 container registry
ec2 & s3

以下是簡單的比價結果,可以看出 EC2 Container Registry 上面儲存費用大約是 S3 的 4 倍。 如果在 registry 上不打算放很多大容量的 image 可以考慮直接用 EC2 Container Registry。

但考慮擴充性問題 (X) 手賤想自己架 Server (O),所以嘗試 S3 的方式架設。

Amazon EC2 Container Registry
https://aws.amazon.com/tw/ecr/pricing/
儲存的價格為每月每 GB 0.10 USD

Amazon S3 定價
https://aws.amazon.com/tw/s3/pricing/
第一個 50 TB/月 $0.025 每 GB

傳輸費都是:
前 1 GB / 月 $0.000 每 GB
最多 10 TB / 月 $0.120 每 GB

流程

https://codepen.io/tsabat/post/s3-backed-docker-private-registry-on-aws

  1. 開台 s3 
    name: your-docker-registry
  2. 開台 ec2
    build redis
    build registry

Redis 是拿來給 docker registry 做快取用的

Trouble shooting:

  1. Build a Registry Image

ENV AWS_REGION=us-west-2
ENV AWS_BUCKET=your-docker-registry
ENV AWS_KEY=your_key
ENV AWS_SECRET=your_secret

AWS_REGION 可以參考 http://docs.aws.amazon.com/general/latest/gr/rande.html 底下,看自己的 ec2 開在哪
AWS_KEY 是要連上 s3 的帳號
AWS_SECRET 是對應上面帳號的密碼

如果沒特別設定權限問題,可以直接輸入 aws 帳號密碼。

2. SSL 問題
https://docs.docker.com/registry/insecure/#using-self-signed-certificates

當 docker client 要登入時,預設會走 https 443 port。這邊支援幾種不安全的連線方式

  • Deploying a plain HTTP registry

EC2 是選用 aws 自己的 image, Amazon Linux AMI。看文章討論是 RHEL/CentOS 開出來的 branch。
 在 /etc/sysconfig/docker 底下加入

DOCKER_OPTS=” — insecure-registry myregistrydomain.com:5000"

之後重啟服務還是用 https 走 443,這邊爬了蠻久的文章,還是沒找到解法。

  • Using self-signed certificates

自己簽 ssl 之後,按照官方文件
 https://docs.docker.com/registry/deploying/#get-a-certificate 
跑 registry 沒意外的話再次執行會發現 server 已經不是 http 回應,而是 509,不信任憑證。
 
 我跑的是 Docker version 1.12.6, build 7392c3b/1.12.6,docker login 
 docker — insecure-registry xxxxx.com login xxxxx.com
 會得到回應 flag provided but not defined: — insecure-registry
 
 看文件發現 — insecure-registry 參數被移到 dockerd 底下,
改用 dockerd — insecure-registry xxxxx.com 之後
 docker login xxxxx.com 就可以。
 這邊其實沒有弄的很清楚,如果有大神可以指點的話就太感謝了。
 
 另外在 mac 上面要接受 self-signed ssl 的話,可以直接透過 GUI 設定。
 右上角的 docker 圖案 > Preferences > Daemon > Insecure registries 加入 server

3. 帳號密碼設定
走過上面設定之後,為 registry 加上基本的認證
 https://docs.docker.com/registry/deploying/#restricting-access

完成設定後發現,覺得花了很多時間在驗證上,為了解決 ssl 的問題。
也因為對 docker 還有 AMI 以及 Linux 的不熟悉,才會搞了半天。
不過一口氣把 docker registry & jenkins 架起來,大大提昇了自動化發佈的能力。

想像可以在把 source code 推上 gitlab 之後,自動做完 unit test & build & deploy image,省下的時間相當可觀阿!

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.