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 |
プロダクション用イメージの作成
プロダクション用イメージを作成するため、Dockerfileを書きます。
まずプロジェクトを作成します。
$ mkdir -p ~/docker_apps/dashing |
ソースコードをGitからSSHでpullするために、イメージに秘密鍵をコピーします。
この手順が適切なのか疑問ですが、とりあえずgit clone
した後は削除するようにします。
秘密鍵をプロジェクトのディレクトリにコピーします。
$ cp ~/.ssh/private_key |
作成したDockerfileは次のようになります。
FROM masato/baseimage:1.0 |
プロダクション用のイメージを作成します。
$ docker build -t masato/dashing:1.0.1 . |
コンテナをイメージの起動して確認します。
$ cd ~/docker_apps/dashing |
docker-registryへイメージの登録
ローカルのdocker-registryが起動していることを確認します。
$ curl localhost:5000 |
プロダクション用イメージにタグをつけて、RiakCSをバックエンドにしているプライベートレジストリにpushします。private registry
の場合、
$ docker tag masato/dashing:1.0.1 localhost:5000/dashing |
RiakCSにイメージが保存されていることを、s3cmdを使って確認します。
$ s3cmd -c ~/.s3cfg.idcf ls s3://docker-registry/images/repositories/library/dashing/ |
まとめ
DockerレジストリのバックエンドはRiakCSを使っているので、容量を気にせずイメージdocker push
できます。
docker-regitryは5000ポートを開けていますが、VLAN以外のアクセスを拒否しているので、安全にプライベートなイメージを公開できます。
あとでGCEにもデプロイする場合、ベーシック認証とSSLを実装するためにフロントにHTTPサーバーが必要になりそうです。
次回はVLAN内に作成したCoreOSのインスタンス上で、docker-registryからdocker pull
します。
CoreOSがrebootしてもコンテナが起動しているように、Dockerの本番環境を構築します。