http://qiita.com/spesnova/items/658a47e40eaea5b5a5f4
ほぼこちらの手順をv2.0に置き換えた版+運用について+パフォーマンス改善について書いてみました。
動機
- Dockerプライベートレジストリが欲しくなった
- ウェブをみると、自前はつらいという話が多かったのでどのくらいつらいのか知りたかった
Docker Registry運用方法について
Docker Registry用のサーバは 持たない方針 で進める
持ってしまうと…
- 管理サーバが増える
- SPOFになる(冗長化考えるのめんどい)
- 認証考える必要ある
- つらい
個々のサーバにDokcer Registryコンテナを立てる方式を採用
かつバックエンドにs3を使う方式にすると、
インタフェースだけローカルのDocker Registryを通して
S3上のDockerイメージを共有することが出来る。
- 自前管理するバージョンと比べて、デメリットを考慮しなくて良くなる
- どの環境であっても同じコンフィグを指定しておくだけでDocker Registryを起動すれば動く
- ただし、全てのサーバでDocker Registryを起動するリソースは増えてしまうのでそこだけ注意
Docker Registry v2 を試してみる
必須環境
Docker Registry2.0では Dockerバージョン 1.6以上
が必要です。
これ未満だとDocker Registryにpushする時エラーが発生します。
前準備
イメージを保持するS3バケットを作っておきます。
空でOK。
起動コマンド
docker run -d \
--name registry \
-p 5000:5000 \
-e REGISTRY_STORAGE_S3_ACCESSKEY=xxxxx \
-e REGISTRY_STORAGE_S3_SECRETKEY=xxxxx \
-e REGISTRY_STORAGE_S3_BUCKET=xxxxx \
-e REGISTRY_STORAGE_S3_REGION=ap-northeast-1 \
-e REGISTRY_STORAGE_S3_ROOTDIRECTORY=/v2 \
-e REGISTRY_STORAGE=s3 \
registry:2.0
実運用時はパラメータをコンフィグファイル化しておいたほうが良いですね。
push/pullしてみる
# 適当なDockerコンテナをビルド
docker build -t localhost:5000/v2test .
# プライベートリポジトリにpush(指定したs3に保存される)
docker push localhost:5000/v2test
# プライベートリポジトリからpull
docker pull localhost:5000/v2test
これだけで行けた。意外と簡単。
ただ、実運用した時に問題が出るかまでは未確認なので
しばらく試してみたい。
パフォーマンス改善について(未検証)
まだ気になっていないが、
おそらくその内パフォーマンスも考える必要がありそう。
いくつか考えられる手段を上げてみる。
CloudFront経由にする
結構速くなるのでは(予想)。
この辺りの設定を指定すれば行けそう。
Redisキャッシュ使う
イミュータブルなblob情報などキャッシュしてくれるらしい。
この辺りの設定を指定すれば行けそう。
こちらを利用する時はRedisもコンテナ化すると良いかも?
(docker-compose 使ってDocker RegistryとRedis起動してゴニョゴニョすれば一発ですね)
この辺りは設定しておくと安定性も増しそうな感じするので
将来試してみたい。