プライベートDockerリポジトリサービスのQuay.ioを使ってみた
はじめに
カスタマイズしたDockerイメージを使ってサービスを運用し続けていく場合、Dockerイメージのバージョン管理をプライベートな環境で行う必要が出てきます。プライベートDockerリポジトリとしては、Docker Hubのプライベートリポジトリを使うか、あるいはDocker Registoryを使ってローカルな環境にプライベートリポジトリを構築する形になるでしょう。
今回はプライベートDockerリポジトリの選択肢としてQuay.ioをご紹介します。
Quay.ioはプライベートDockerリポジトリをホストするサービスです。2014年8月にCoreOSに買収されたことで一気に注目されました。Quay.ioのは複数の有料プランが用意されています。料金プランのページにある通り、Dockerfileをアップロードすることでbuildしたり、ロボットアカウントがあったり、複数のユーザでチームとしてリポジトリの管理ができたりと、面白い機能がたくさんあります。
ということで、Free Trialを使って、Quay.ioを試してみました!
やってみた
リポジトリを作成する
ログイン直後の画面。リポジトリが何もありません。右上の[Create New Repository]をクリックします。
リポジトリ作成画面になります。今回は「myapp」という名前のリポジトリを作ります。以下に警告が出ている通り、フリートライアルだと自アカウントのネームスペース内にプライベートリポジトリを作ることは出来ません。
仕方が無いのでパブリックリポジトリを選択します。
リポジトリ作成画面の下部です。以下のようにDockerfileをアップロードするだけで初期イメージを作成することができますので、今回はその方法でやってみます。Dockerfileを指定して、[Create Public Repository]ボタンをクリックします。
なお、Dockerfileは以下1行だけのものです。
FROM centos
そしてしばらく待つと、右上の[Recent Repo Builds]のところが緑マークになりますので、クリックします。
すると以下のように、ログが表示されます。Buildがcompleted and pushedと、正常完了していますね。
Dockerイメージをpullする
ローカルPCにDockerリポジトリからDockerイメージをpullしてきます。今回はパブリックなリポジトリなので特にログインすることなくpullできちゃいますが、プライベートDockerリポジトリな場合は事前ログインが必要です。
$ docker pull quay.io/smokeymonkey/myapp Pulling repository quay.io/smokeymonkey/myapp Status: Downloaded newer image for quay.io/smokeymonkey/myapp:latest $ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE quay.io/smokeymonkey/myapp latest fd44297e2ddb 4 weeks ago 215.7 MB
新しいバージョンのDockerイメージを作成する
pullしてきたmyappイメージを編集して、新しいバージョンのDockerイメージを作成します。myappイメージからコンテナを起動して、yumでhttpdをインストールしました。
$ docker run -it quay.io/smokeymonkey/myapp:latest /bin/bash [root@38faf0710b95 /]# yum install -y httpd [root@38faf0710b95 /]# exit
起動したDockerコンテナを確認し、1.1というタグをつけてコミットします。
$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 38faf0710b95 quay.io/smokeymonkey/myapp:latest "/bin/bash" About a minute ago Exited (0) 3 seconds ago sleepy_morse $ docker commit 38faf0710b95 quay.io/smokeymonkey/myapp:1.1 a6a1cd790fadaede88429fa20c7ec0fd622e4335622cdb76c0de32cee7ed7ee3
以下の通り、1.1というタグがついたDockerイメージが作成されています。
$ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE quay.io/smokeymonkey/myapp 1.1 a6a1cd790fad 2 minutes ago 301.5 MB quay.io/smokeymonkey/myapp latest fd44297e2ddb 4 weeks ago 215.7 MB
作成したDockerイメージをpushする
作成したDockerイメージをQuay.ioにpushします。pushはログインが必要です。
$ docker login quay.io Username: smokeymonkey Password: Email: hoge@foo.bar WARNING: login credentials saved in /Users/smokeymonkey/.dockercfg. Login Succeeded
ではタグ付きでpushします。
$ docker push quay.io/smokeymonkey/myapp:1.1 The push refers to a repository [quay.io/smokeymonkey/myapp] (len: 1) Sending image list Pushing repository quay.io/smokeymonkey/myapp (1 tags) a6a1cd790fad: Image successfully pushed Pushing tag for rev [a6a1cd790fad] on {https://quay.io/v1/repositories/smokeymonkey/myapp/tags/1.1}
再度Quay.ioのリポジトリの画面を確認するとpullとpushがそれぞれ1回ずつカウントされています。pushが2回なのはリポジトリ作成時のDockerfileのアップロードがあるからです。
Repository Tags画面を表示すると、ちゃんと1.1というタグが増えてますね!
Visualize Tags画面では、タグの遷移が確認できます。以下のようにlatestから派生して1.1ができたことがわかります。
Usage Logs画面では、いつ誰が何をしたのかが視覚的に分かります。
さいごに
複数のユーザでDockerイメージをメンテナンスしていくとき、チームでリポジトリを管理したり、派生が管理できたり、アクティビティが視覚化されたりと、Quay.ioの機能は非常に有意だと思います。独自にDocker Registoryを運用管理するのはなかなか大変ですし、こういったプライベートDockerリポジトリサービスの費用対効果は高いのではないでしょうか。