Docker
googlecomputeengine
GoogleCloudPlatform

Google Cloud Storage をバックエンドにした Docker Registry をセットアップ

More than 5 years have passed since last update.

Docker を本気で使うなら private docker registry の構築は必須です。Google Compute Engine (GCE) を使い始めたので、GCE 上に docker registry をセットアップすることにしました。

docker registry 自体を docker コンテナで動かすのは簡単ですが、ローカルディスクを使ってしまうと運用が面倒です。少しぐぐれば Amazon S3 を使った例がでてきますが、GCE を使うのでどうせなら Google Cloud Storage (GCS) を使いたい!

試してみたらあっさり成功したので、記録しておきます。


GCS のバケットを作成

docker イメージを格納する用のバケットを作成します。仮に名前を docker-bucket としますので、各自読み替えてください。バケット名は全ユーザで共有するリソースなので、名前が取られていたら諦めて別の名前にしましょう。

$ gsutil mb -l ASIA gs://docker-bucket

ASIA リージョンに作るよう指定しています。これを忘れると US リージョンに作成されてしまいますのでご注意ください。


GCE にインスタンスを追加

$ gcutil addinstance docker-registry

起動する OS イメージを聞かれるので、backports-debian-7 を選択します。

起動したら ssh して docker をインストールします。

$ gcutil ssh docker-registry

$ curl get.docker.io | bash

$ sudo update-rc.d docker defaults


認証用のコンテナを実行

Google Cloud Platform へアクセスするための認証情報を保持するためのコンテナが提供されているので、まずこれを実行します。

$ sudo docker run -ti --name gcloud-config google/cloud-sdk gcloud auth login

OAuth 認証のための URL が表示されるので、認証して verification code を入力します。


Docker Registry を実行

$ sudo docker run -d -e GCS_BUCKET=docker-bucket -e BOTO_PATH='/.config/gcloud/legacy_credentials/<email>/.boto' -p 5000:5000 --volumes-from gcloud-config google/docker-registry

<email> には Google アカウントのメールアドレスを入れてください。

以上で完了です。驚くほど簡単ですね。


docker push してみる

以下のようにイメージを push できます。

$ sudo docker tag <image_id> localhost:5000/<name>[:<tag>]

$ sudo docker push localhost:5000/<name>[:<tag>]


おわり

余談ですが、イメージ名の localhost:5000 の部分は push されるデータには含まれません。単に docker registry のアドレスを示しているだけです。なので、バックエンドを共有する複数の docker registry を構築して同時に運用することができます。

別に GCE 上の docker ホストである必要はありません。GCS にだけアクセスできればいいので、環境を問わないのがいいですね。