python環境を、dockerに移行してみた(Mac版) | SiTest (サイテスト) ブログ

メニューボタン閉じるボタン

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のオプションで、開発しやすい環境を整えていきます。それでは。

今すぐお気軽に
ご相談ください。

0120-315-465

(平日 10:00~19:00)

今すぐお気軽に
ご相談ください。

0120-315-465

(平日 10:00~19:00)

グラッドキューブは
「ISMS認証」を取得しています。

認証範囲:
インターネットマーケティング支援事業、インターネットASPサービスの提供、コンテンツメディア事業

「ISMS認証」とは、財団法人・日本情報処理開発協会が定めた企業の情報情報セキュリティマネジメントシステムの評価制度です。

いますぐ無料で
お試しください。

SiTest の革新的な機能を
お試しいただけます。
利用規約

お名前【必須】
メールアドレス【必須】
電話番号【必須】