プライベートDockerリポジトリサービスのQuay.ioを使ってみた

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

カスタマイズしたDockerイメージを使ってサービスを運用し続けていく場合、Dockerイメージのバージョン管理をプライベートな環境で行う必要が出てきます。プライベートDockerリポジトリとしては、Docker Hubのプライベートリポジトリを使うか、あるいはDocker Registoryを使ってローカルな環境にプライベートリポジトリを構築する形になるでしょう。

今回はプライベートDockerリポジトリの選択肢としてQuay.ioをご紹介します。

Quay_io_·_Quay_io

Quay.ioはプライベートDockerリポジトリをホストするサービスです。2014年8月にCoreOS買収されたことで一気に注目されました。Quay.ioのは複数の有料プランが用意されています。料金プランのページにある通り、Dockerfileをアップロードすることでbuildしたり、ロボットアカウントがあったり、複数のユーザでチームとしてリポジトリの管理ができたりと、面白い機能がたくさんあります。

Quay_io_·_Quay_io 2

ということで、Free Trialを使って、Quay.ioを試してみました!

やってみた

リポジトリを作成する

ログイン直後の画面。リポジトリが何もありません。右上の[Create New Repository]をクリックします。

Quay_io_·_Quay_io 3

リポジトリ作成画面になります。今回は「myapp」という名前のリポジトリを作ります。以下に警告が出ている通り、フリートライアルだと自アカウントのネームスペース内にプライベートリポジトリを作ることは出来ません。

Quay_io_·_Quay_io_1

仕方が無いのでパブリックリポジトリを選択します。

Quay_io_·_Quay_io_2

リポジトリ作成画面の下部です。以下のようにDockerfileをアップロードするだけで初期イメージを作成することができますので、今回はその方法でやってみます。Dockerfileを指定して、[Create Public Repository]ボタンをクリックします。

Quay_io_·_Quay_io 4

なお、Dockerfileは以下1行だけのものです。

FROM centos

そしてしばらく待つと、右上の[Recent Repo Builds]のところが緑マークになりますので、クリックします。

smokeymonkey_myapp_·_Quay_io 5

すると以下のように、ログが表示されます。Buildがcompleted and pushedと、正常完了していますね。

Build_f1440cf_·_Quay_io

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のアップロードがあるからです。

smokeymonkey_myapp_·_Quay_io

Repository Tags画面を表示すると、ちゃんと1.1というタグが増えてますね!

smokeymonkey_myapp_·_Quay_io 2

Visualize Tags画面では、タグの遷移が確認できます。以下のようにlatestから派生して1.1ができたことがわかります。

smokeymonkey_myapp_·_Quay_io 3

Usage Logs画面では、いつ誰が何をしたのかが視覚的に分かります。

smokeymonkey_myapp_·_Quay_io 4

さいごに

複数のユーザでDockerイメージをメンテナンスしていくとき、チームでリポジトリを管理したり、派生が管理できたり、アクティビティが視覚化されたりと、Quay.ioの機能は非常に有意だと思います。独自にDocker Registoryを運用管理するのはなかなか大変ですし、こういったプライベートDockerリポジトリサービスの費用対効果は高いのではないでしょうか。