0%

DashingとTreasure Data - Part4: Docker Registryへ登録

IDCFクラウドをDocker開発環境として、Treasure DataのサンプルアプリをPart1,Part2,Part3まで、Dashingのダッシュボードを作成するところまで開発しました。
次はプロダクションを想定してイメージを作成します。Gitリポジトリからgit pullしてなるべく実際のデプロイに近づけています。

プロダクションイメージは、後で、開発用のDockerホストとは別の、CoreOSのDockerホストへデプロイするために、以前IDCFオブジェクトストレージに構築したローカルのdocker-registryへ登録します。

自分のbaseimageを作成

Part3で作成した、[phusion/baseimage]がFROMのDockerfileから、自分のbaseimageを作成します。タグでバージョンを管理します。

$ cd ~/docker_apps/dashing/phusion
$ docker build -no-cache -t masato/baseimage:1.0 .

プロダクション用イメージの作成

プロダクション用イメージを作成するため、Dockerfileを書きます。

まずプロジェクトを作成します。

$ mkdir -p ~/docker_apps/dashing
$ cd !$

ソースコードをGitからSSHでpullするために、イメージに秘密鍵をコピーします。
この手順が適切なのか疑問ですが、とりあえずgit cloneした後は削除するようにします。

秘密鍵をプロジェクトのディレクトリにコピーします。

$ cp ~/.ssh/private_key

作成したDockerfileは次のようになります。

~/docker_apps/dashing/Dockerfile
FROM masato/baseimage:1.0

RUN mkdir -p /root/.ssh
ADD private_key /root/.ssh/id_rsa
RUN chmod 700 /root/.ssh/id_rsa
RUN echo "Host {Gitリポジトリ}\n\tStrictHostKeyChecking no\n" >> /root/.ssh/config

RUN git clone ssh://{Gitリポジトリ}/var/git/repos/dashing_apps/cloud_td.git /root/cloud_td
RUN rm /root/.ssh/id_rsa
RUN rm /root/.ssh/config

RUN cd /root/cloud_td && bundle install

RUN mkdir /etc/service/thin
ADD thin.sh /etc/service/thin/run
RUN chmod u+x /etc/service/thin/run

プロダクション用のイメージを作成します。

$ docker build -t masato/dashing:1.0.1 .

コンテナをイメージの起動して確認します。

$ cd ~/docker_apps/dashing
$ docker run --rm -p 80:80 --name dashing -e TD_API_KEY=xxx masato/dashing:1.0.1 /sbin/my_init

docker-registryへイメージの登録

ローカルのdocker-registryが起動していることを確認します。

$ curl localhost:5000
"docker-registry server (dev) (v0.7.0)"

プロダクション用イメージにタグをつけて、RiakCSをバックエンドにしているプライベートレジストリにpushします。
private registryの場合、/のところが、localhost:5000になります。

$ docker tag masato/dashing:1.0.1 localhost:5000/dashing
$ docker push localhost:5000/dashing

RiakCSにイメージが保存されていることを、s3cmdを使って確認します。

$ s3cmd -c ~/.s3cfg.idcf ls s3://docker-registry/images/repositories/library/dashing/
2014-06-06 04:25 4180 s3://docker-registry/images/repositories/library/dashing/_index_images
2014-06-06 04:25 150 s3://docker-registry/images/repositories/library/dashing/json
2014-06-06 04:25 64 s3://docker-registry/images/repositories/library/dashing/tag_latest
2014-06-06 04:25 150 s3://docker-registry/images/repositories/library/dashing/taglatest_json

まとめ

DockerレジストリのバックエンドはRiakCSを使っているので、容量を気にせずイメージdocker pushできます。
docker-regitryは5000ポートを開けていますが、VLAN以外のアクセスを拒否しているので、安全にプライベートなイメージを公開できます。

あとでGCEにもデプロイする場合、ベーシック認証とSSLを実装するためにフロントにHTTPサーバーが必要になりそうです。

次回はVLAN内に作成したCoreOSのインスタンス上で、docker-registryからdocker pullします。
CoreOSがrebootしてもコンテナが起動しているように、Dockerの本番環境を構築します。