python環境を、dockerに移行してみた(Mac版)
最近pythonを使ってwebアプリの開発を行っています。Webアプリのフレームワークには、軽量でそこそこ高機能のflaskを使用しております。
これまで、pythonを使う人にはおなじみの、virtualenvを使った仮想環境で開発を行ってきたのですが、この度、学習もかねて開発環境をdockerに移すことにしました。
移行の準備
まずは今virtualenv環境にインストールされているモジュール一覧が記述されたファイルを作成します。
$ pip freeze > requirements.txt
上記コマンド一発で作成できます。これがある状態で
$ pip install -r requirements.txt
というコマンドをvirtualenv内で打てば、新しい環境でも、これまで使っていたライブラリがまとめてインストールされます。ただ、今回はdockerで作ったマシンの中からこのコマンドを 自動実行します。
これからdockerの中にpythonをインストールしないといけないかというと、そんなことはありません。
dockerの利点は、すでにdockerhubにアップロードされているイメージを元に、それに対してアレンジを加え、自分のマシンとして使えるという点にあります。
ここでは何も考えず、公式のpythonイメージを使います。
今回はhttps://hub.docker.com/_/python/
に紹介されているものの中から、現在vierutalenvで使っているのとバージョンが同じ3.5、かつ、同じフォルダにrequirements.txtがあれば、その内容を自動的にビルドしてくれる「on-build」のものを選びました。
Dockerfileを作成する
さて、ファイルの準備です。
Webアプリケーションフレームワークのflaskを使っていますので、アプリケーションをたちあげるためのinit.pyファイルがあります。動いているものにテスト用のアクセスポイントを加えてこんな感じで用意しました
from flask import Flask, jsonify, abort, make_response, request, url_for, abort, Response
# (中略)
app = Flask(__name__)
# (中略)
@app.route('/test/')
def test():
title = "test"
return 'dockerでpythonのテストです!'
# (中略)
if __name__ == '__main__':
app.run(host='0.0.0.0', port=3000)
更にアプリケーションが入っているフォルダ(myapp)の並びに
init.pyを起動するための
start.shを作ります
python3 myapp/init.py
Dockerfileを作ります
from python:3.5.3-onbuild
cmd ["sh","start.sh"]
全体としては下記のようなディテクトリ構成になります。
┌ myapp/
│ ├(アプリ動作に必要なファイル)
│ └ init.py
│
├ Dockerfile
├ start.sh
└ requirements.txt
dockerイメージの作成
さて、私の環境ではすでにdocker-machineが入っているので以前作った「default」という名前の仮想マシンを立ち上げます。
“`$ docker-machine start default
Starting "default"…
(default) Check network to re-create if needed…
(default) Waiting for an IP…
Machine "default" was started.
Waiting for SSH to be available…
Detecting the provisioner…
Started machines may have new IP addresses. You may need to re-run the <code>docker-machine env</code> command.
<pre><code>docker-machineの設定を確認します。
“`$ docker-machine env default
export DOCKER_TLS_VERIFY=”1″
export DOCKER_HOST=”tcp://192.168.99.100:2376″
export DOCKER_CERT_PATH=”/Users/xxxxxxxx/.docker/machine/machines/default”
export DOCKER_MACHINE_NAME=”default”
# Run this command to configure your shell:
# eval $(docker-machine env default)
指示通りに
$ eval $(docker-machine env default)
を行ってdockerコマンドが使えるようにします。
コンテナを作るもとになるdockerイメージの作成を行います。
先程書いたDockerfileのあるディテクトリに移動して下記コマンドを実行します。
-tオプションでdockerイメージに名前をつけることができます。
$ docker build ./ -t pythonflask
(中略)
Removing intermediate container 851396f76f39
Successfully built 9bcebb91c9b7
無事できたので、結果を確認しましょう。
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
pythonflask latest 9bcebb91c9b7 18 minutes ago 714 MB
python 3.5.3-onbuild 38202ab7f963 9 days ago 687 MB
dockerイメージを起動してみます
さて、イメージが完成したので、実際にdockerコンテナを起動してみましょう。
立ち上げるのは「pythonflask」イメージです。-pオプションでdocker-machineの3000ポートと、コンテナの3000ポートを対応付けて、アクセスできるようにします。
$ docker run -p 3000:3000 pythonflask
* Running on http://0.0.0.0:3000/ (Press CTRL+C to quit)
立ち上がりましたのでアクセスします。コンテナは0.0.0.0で立ち上がりましたがdocker-machineのIPが先程見たように192.168.99.100なので、192.168.99.100:3000/test/ にアクセスします。
無事docker環境での構築が完了しました。あとはdocker runのオプションで、開発しやすい環境を整えていきます。それでは。
-
お問い合わせ
SiTest の導入検討や
他社ツールとの違い・比較について
弊社のプロフェッショナルが
喜んでサポートいたします。 -
コンサルティング
ヒートマップの活用、ABテストの実施や
フォームの改善でお困りの方は、
弊社のプロフェッショナルが
コンサルティングいたします。
今すぐお気軽にご相談ください。
今すぐお気軽に
ご相談ください。
(平日 10:00~19:00)
今すぐお気軽に
ご相談ください。
0120-315-465
(平日 10:00~19:00)
グラッドキューブは
「ISMS認証」を取得しています。
認証範囲:
インターネットマーケティング支援事業、インターネットASPサービスの提供、コンテンツメディア事業
「ISMS認証」とは、財団法人・日本情報処理開発協会が定めた企業の情報情報セキュリティマネジメントシステムの評価制度です。