dockerで自作のPython Webアプリを動かすまでの流れ
※事前にdocker環境を準備する前提
dockerイメージは全てdockerfileで記述する方が理想的だが、手動でセッティングしたイメージで作成してみる。
##1) ベースとなるイメージをpullして起動
docker run -t -i centos /bin/bash
-i -tオプションと/bin/bashは、標準入力で起動したコンテナへログインするため。
centosをベースにする。
このコマンドでcentosコンテナに入れる
※exitで出ると、コンテナが停止してしまう。
コンテナ内でpython -Vコマンドでpythonがすでにインストールされている事を確認。
##2) サンプルWebアプリを作成
コンテナ内の任意の場所でサンプルWebアプリを作成
vi sampleweb.py
import SimpleHTTPServer
SimpleHTTPServer.test()
##3) 編集したコンテナイメージを保存(commit)
起動中のコンテナをdocker commitコマンドで、docker imageとして出力できる。
docker commit [編集したコンテナID] [保存するコンテナ名]
例)
docker commit aeijdire845 simpleweb
##4) コンテナを起動時にWebアプリを起動する
ここでハマった。
linuxであればrc.localにコマンドを記述すれば、起動時に意図するコマンドを実行してくれるかと思いきや、コンテナでは反映されない模様。
dockerfileのENTRYPOINT(またはCMD)で記載が必要。
ここまできてdockerfileでやり直しかと思ったが、3までで作成したイメージをベースにENTRYPOINTだけ追加すればよい。
例)
from simpleweb
ENTRYPOINT python /home/hoge/simpleweb.py
※ENTRYPOINTの後に実行したいコマンドを記載。
引き続き作成したdockerfileをもとにdocker buildでイメージ作成
docker build -t [イメージ名]:[タグ名] [Dockerfileのあるディレクトリパス]
例)
docker build -t simpleweb2:latest ./
##5) ポートフォワード設定してコンテナを起動する
Webアプリなので外部からコンテナ内のWebアプリへアクセスできるようオプション設定して起動する必要がある。
docker run -p 80:8000 simpleweb2
-pオプションで、[外部ポート]:[コンテナ内ポート]でポートフォワードを指定する。
例では外部から80でアクセスすると、コンテナ内の8000に接続される。
2で作成したWebアプリは8000で待ち受けるのでこのように設定。
##6) 接続確認
ローカルからであれば http://localhost/、外部IPがあればそのIPに指定してアクセスすると、Directory listingが応答される。