「モバイルSuicaの利用履歴を経費精算に簡単に出せるように編集するサービスの作成」の第一歩
まずはPythonでの開発を行うのでPythonを実行できる環境を作る
筆者の環境
windows PC (Core i7-7600 / 16GB)
VS codeで編集
PythonとDockerの拡張機能は入れておくと便利
方針
Windows PCで開発しているので直接やるといろいろ面倒くさい
Pythonの実行環境はDockerでコンテナを立てる
準備
Docker for Windowsをインストールする
Hyper-Vの有効化など必要。
[docker-compose]もインストール
※[Docker] Windows 10 Pro 64bit に Docker と Docker Compose をインストールする
Dockerfileを作る
いろいろインストールするのでイメージをbuildしておく
どこか適当なディレクトリに以下のファイルをDockerfileという名前で保存
FROM centos/python-36-centos7:latest
USER root
RUN yum -y install java-1.8.0-openjdk
RUN pip install flask pandas tabula-py uwsgi
WORKDIR /src
ENV PYTHONUNBUFFERED=1
- FROM centos/python-36-centos7:latest
- Docker Hubのこのイメージをベースに使う
- USER root
- rootになる
- RUN yum -y install java-1.8.0-openjdk
- tabula-pyに必要なJavaをインストール
- RUN pip install flask pandas tabula-py uwsgi
- 必要なモジュールをインストール(flask,uwsgiは現時点では必要なし。後々利用)
- WORKDIR /src
- コンテナに入るとここになる
- ENV PYTHONUNBUFFERED=1
docker-compose.ymlを作る
Windows上でPythonファイルを編集してDocker上で動作させるので、コンテナからWindows上のPythonファイルが見える必要がある。これはコンテナを立ち上げるときに"-v"で指定できるが、Windowsは面倒くさいのと毎回コマンドを打ちたくないので、docker-composeでコマンドを一つにする
version: '3.7'
services:
testenv:
build:
context: ./app
dockerfile: Dockerfile
container_name: testenv
tty: true
command: /bin/sh -c "while :; do sleep 10; done"
volumes:
- ./app/src:/src
volumes:
temp:
- testenv
- 自由に変えてよい
- build
- コンテナをbuildする
- context: Dockerfileの場所
- dockerfile: Dockerfileの名前
- コンテナをbuildする
- container_name
- 自由に変えてよい
- tty: true
- コンテナを立ち上げたままにするおまじないだが効かなかった・・・
- command: /bin/sh -c "while :; do sleep 10; done"
- volumes:
- Windowsの./app/srcをコンテナ上の/srcとしてマウントする。これでVS Codeで編集したPythonファイルがそのままコンテナから見える
command:の部分が無いと一瞬でコンテナが落ちる
ググるとtty: trueで解決している人が殆どだが、なぜか筆者の環境だとダメ
先ほどのDockerfileとdocker-compose.ymlをこのように配置する
test.pyは実行するPythonファイル
│ docker-compose.yml
│
└─app
│ Dockerfile
│
└─src
test.py
コンテナを立ち上げる
$ docker-compose.exe up --build -d
Creating network "test_default" with the default driver
Building testenv
Step 1/6 : FROM centos/python-36-centos7:latest
---> 90c6a4022ee5
Step 2/6 : USER root
---> Using cache
---> 03e9f59a6dbc
Step 3/6 : RUN yum -y install java-1.8.0-openjdk
---> Using cache
---> 463337c7b050
Step 4/6 : RUN pip install flask pandas tabula-py PyPDF2 uwsgi crontab
---> Using cache
---> 26c28d2b838c
Step 5/6 : WORKDIR /src
---> Running in f5ab2a9b405e
Removing intermediate container f5ab2a9b405e
---> b998a42b8180
Step 6/6 : ENV PYTHONUNBUFFERED=1
---> Running in fd8d783f9e2f
Removing intermediate container fd8d783f9e2f
---> e1e0833bc33a
Successfully built e1e0833bc33a
Successfully tagged test_testenv:latest
立ち上がったかどうか見てみる
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3b7e97ef1fd5 test_testenv "container-entrypoin…" 4 seconds ago Up 2 seconds 8080/tcp testenv
コンテナに入ってみる
$ winpty docker exec -it testenv bash
(app-root) bash-4.2# pwd
/src
(app-root) bash-4.2# ls
test.py
(app-root) bash-4.2# cat test.py
print('Hello, World')
(app-root) bash-4.2# python3 test.py
Hello, World
これでやっとコードの作成を開始できます。