Dockerを本気で使いはじめると必ず出てくるregistry選定問題。
御多分に洩れず、うちも同じようにハマったので、選択肢と現時点での自分たちの最適解をまとめてみます。
※この記事は2015-03-25公開時点での情報です。
Docker Registryの選択肢
自分たちが検討して、実際に試した選択肢は以下のとおりです。
- Docker Hub
- Quay.io
- CoreOS Enterprise Registry(以下CoreOS Registry)
- Docker Registry(ややこしいので以下docker-registry)
日本からの転送速度 | サービス月額 | 運用コスト | |
---|---|---|---|
DockerHub | ✕ | $7〜/month | ◯ |
Quay.io | ✕ | $12〜/month | ◯ |
CoreOS Registry | ◯ ※1 | $10〜/month | △ |
docker-registry | ◯ ※1 | $0 ※2 | ✕ |
各サービスではなく、要件軸に絞って1つずつ見ていきます。
日本からの転送速度
Registry選定にあたって自分たちが重要視したのはここでした。
DockerHub、Quay.ioはネットワークの物理的距離があるのでDocker Push/Pull共に致命的に遅く、
- Docker Push→8分
- Docker Pull→10分弱
と、Docker周りのデプロイプロセスだけで20分弱掛かってしまう状態でした。
個人サービスなどであれば20分程度のデプロイ時間が気にならない場合もあると思いますが、さすがに数十回/日 デプロイするサービスの場合、リリースがボトルネックになってしまうことは避けたかったのでDockerHubとQuay.ioは選択肢から外しました。
サービス月額
ミニマムプライスは大体横並びです。が、CoreOS Registryとdocker-registryはそれぞれインストール型なので、自前で別途サーバを用意する必要はあります。
個人だと$5の差は痛いですが、会社で使う場合はほぼ誤差の範囲かと思うので好きなものを選べば良いと思います。
CoreOS Registryだけは注意が必要で、 立ち上がっているコンテナ数単位の月額課金 になっています。
(Quay.io, DockerHubは登録上限イメージ数単位)
$10/monthの場合だと上限が20コンテナなので、1ホストに4コンテナ立ち上げる構成の場合は5ホストで上限に達します。
また、コンテナが落ちたことを検知する仕組みが弱い(?)らしく、コンテナを落とした後もなぜかカウントが下がらず、あっという間に上限に行ってしまいます。
さらに、プラン変更やクレカ変更もCoreOS Registryの管理画面から変更できないので、セールスにメールで問い合わせて対応してもらう必要があります。
ツールとしての表側が良く出来ている反面、裏側のツメが甘い思ったので、これから使う方はそこらへんに気をつけると良いと思います。
ちなみにDockerHubとQuay.ioは値段が倍近く違いますが、個人的にはQuay.ioの方がオススメです。
Quay.ioはブランチ指定でのAutomated Buildとか、イメージの差分や中身確認もWebからできたりします。
あと、DockerHubの方はビルドが詰まって始まらないこととかも稀にあるので。公式なのに。
運用
ここでいう運用とはdocker-registryサービスの運用コストや、時前運用の必要があるサーバの話です。
DockerHubやQuay.ioはSaaSなのでサービスもサーバも自前運用しなくていいので一番ラクです。
CoreOS Registryは上記のコンテナ数カウントが減らない問題はありますが、
ビルドワーカーの機構が付いているので、自前でDocker Build -> Docker Pushする機構を持つ必要がないので運用は多少楽です。
docker-registryは上述のビルドワーカーなどは付属せず、シンプルにRegistryとしてのインターフェースを提供するだけなので、GitHub Pushなどの契機でのDocker Build, Docker Pushなどの一連の流れは自前で持つ必要があります。
なので、docker-registryを運用するためには現実的にはJenkinsなどをビルドサーバとして一緒に運用する必要があります。運用面がかなり高コストになりがちです。
結局どれを選ぶか?
それぞれメリット・デメリットがあって、優位性が高いものはまだ出てきてないように感じます。個人的には
- OSSなどPublicRegistryで問題ない場合や、ミニマムコストで抑えたい→DockerHub
- 企業で普通に使う場合(PUSH/Pull遅いのは許容)→Quay.io
- 月額コスト($100~/month)掛かっても良いから快適なネットワーク環境下で運用したい → CoreOS Registry
- 運用チームがあるが、サービス月額コストを抑えつつ快適なネットワーク環境下で運用したい→docker-registry
それぞれ触った感じではこんな感じの個人的見解です。
ツールとしてはQuay.ioが圧倒的に使いやすいので、multi-region対応してくれないかなーと思う最近です。