Google AppEngine 開発用の Docker Container を公開しました。
docker-gae-python の方は、GAE sdk for python + ライブラリやコンパイラで、docker-gae-python-extra はそれに加えて、自分が使っているツールを詰めこんでいます。
使い方
どちらも、以下のように起動して、
sudo docker run -d -p 2022:22 -p 8080:8080 -v (プロジェクトルートへの絶対パス):/home/gae:rw essa/gae-python-extra /usr/sbin/sshd -D
以下のようにログインして使います。初期パスワードは python です。
ssh -p 2022 gae@localhost
下記のコマンドで、サンプルのアプリが起動します。
python /usr/local/google_appengine/dev_appserver.py /usr/local/google_appengine/demos/python/guestbook --port 8080 --host 0.0.0.0
ホストから、http://localhost:8080/ でアクセスできます。
ホストのfirewallで 8080を公開していれば、外部からアクセスできます。パスワードが書かれたDockerfileを公開していますので、ssh用ポートの 2022 を外部に公開する場合は、パスワードを変更するようにしてください。
Dockerの感想
Dockerを初めて使ってみましたが、確かに便利だと思います。
GAE SDK for python の環境は割と簡単に作れますが、今やってるプロジェクトでは、closureCompilerやSASSやcasper.js(phantom.js) を使っているので、rubyやjavaやnode.jsの実行環境も必要になります。これが全部動く環境を一から作るのが大変で、説明をどう書くか悩んでいたのですが、Dockerのイメージとして公開すれば、すぐ揃いますね。
イメージを公開できなくても、Dockerfileをプロジェクトに添付しておけば、時間は少しかかるけど、docker build コマンド一発で、同じ環境を作ることができます。
今の所は、Dockerの実行環境を作るのが大変かもしれませんが、coreosを使えるクラウドが広まれば、それもすぐできますからね。
Dockerfileの作成は、環境構築用のshell script を書くのとほとんど同じですが、RUN コマンド一行ごとに実行結果のファイルシステムイメージをcommitしてくれるので、再実行した時、自動的に修正した行から再開してくれるのがありがたい。
実際に使ってみて、いい方向に予想と違ったのは、この機能のおかげでDockerfileを書くのが思ったより簡単だったことです。
この手のスクリプトや環境構築用のツールは、
- ひととおり書いてみてテスト実行
- 時間のかかる処理があって、そこはうまく行く
- 最後の方に些細なミスがあって修正
- 全部再実行すると時間がかかるので、修正した部分だけ実行して確認
- その時はうまく行くが、最初から実行するとエラーになる
で、愚直に全部最初からやっていると、時間がかかるのであせって、環境を初期化する処理を間違えて書きかけのスクリプトも消してしまって涙、なんてパターンになりがちです。
Dockerのメインの使用目的は、本番運用用のマシンをさくっと立ちあげることだと思いますが、開発環境を整えて共有することにも使えそうな気がします。
TIPS
まだ、あんまりわかってないですが、自分がつまづいた所をメモしておきます。
- -v (ホスト側のパス):(Container内のパス):rw で簡単に、ホスト上のディレクトリをマウントできる。ソースやDBのように残しておきたいファイルは、この方法でホストに残しておけば、仮想イメージを消しても大丈夫。
- 仮想イメージがたくさんできてわからなくなったら、docker images --tree を見て、シッポのIDを docker rmiで消すとそこにつながっているイメージが全部消える
- docker rm はコンテナの削除、docker rmi はイメージの削除、最初混同していた。
- buildの時は、docker build ... - < Dockerfile でやった方が速く終わる (カレントディレクトリにファイルが一杯ある時)