Dockerで、PythonのWEBフレームワーク『Flask』を動かす。
今回は、仮想化コンテナのDockerを使用して、Pythonで手軽に開発できるWEBフレームワーク『Flask』を立ち上げたいと思います。
・Pythonの魅力
・Dockerの魅力
が伝わるように、書いたつもりです。
▼Pythonって?
機械学習やデータサイエンスで有名なPythonですが、きっちりWEB制作もカバーしているんですよ。
例えば、YoutubeやInstagram、Dropboxなんかも、Pythonで作られています。
理由はさまざまだと思いますが、
1. 読みやすく、メンテナンスがしやすい。
2. 世界的に見るとシェアが高い。
3. ライブラリが充実していて、スケールしやすい。
と言うような特徴があります。
日本ではPHPやRuby(on Rails)に人気が集中している感がありますが、あくまでもそれは、WEB制作を生業にしている人のお話し。
Pythonは、アーティストやサイエンティスト、学生や、町のお店屋さんなどが気軽に自らのプロジェクトに組み込むことができる、とってもユーザーフレンドリな言語なんです。
もちろん、本格的で大規模な開発にも使えますけれど、
「日々のちょっとした業務を楽にしたい」
「自分で簡単なWEBアプリを作りたい」
「手軽にデータの解析をしたい」
といった、ライトなニーズにばっちり合う、強い味方です。
▼最難関はいちばん最初の環境構築
これ。
環境を作るのが、いちばんの難関なんです。
自分のパソコンを開いて、Pythonで何か作ろうとしても、どうやって起動すればいいかがわからなかったり、教科書通りにやってもうまく動かなかったり・・・。
本当に、やっかいです。
パソコンと言っても、OSだけでも大きく3つもあって、パーツやアプリケーションなどを見ていくと、その組み合わせは無限大です。
そもそも、環境を揃える、というのは、ほとんど不可能なんですね。
だから、手順通りにやってもうまくいかない。
それに、環境構築ってめちゃめちゃ奥が深いんです。
本業にするか、パソコンやITオタクでもない限り、それを習得するのは難しいし、あんまり生産性もない。
だって、自分のサイトを作りたいだけのパン屋さんが、Ubuntuをカスタマイズしたり、複雑に入り混じった環境変数をきっちり合わせる必要なんて、あると思いますか?(趣味にしたり、転職したいならともかく)
個人的には、本業のエンジニアさんでさえ、その必要はないと思っています。
もちろん、それを仕事にしている人であれば別ですけれど。(ニーズもありますし、僕は尊敬しています)
エンジニアリングの生み出す価値って、「素早く、思いついたことを実現できる」というところにあると思うんです。(本音を言えば、顧客の問題が解決された時、というのが正しいとは思いますけれど)
▼そのソリューションがDocker
Dockerは、誰でも、無料で、簡単に使える、仮想化技術のツールです。
『パソコンの中にスペースを作って、その中でプログラムを動かす』
というようなイメージです。
何がすごいって、ほとんどの場合、コマンド一発で環境が作られてしまうんです。
しかも、いろんな言語やツールをインストールしまくっても、競合しない。
誰かが作った便利な環境を、手軽に引っ張ってきて再現できて、簡単に捨てることができる。
そのまま、アップロードすれば、アプリとしてデプロイもできちゃうんです。
やっていることは、いつもの環境構築と変わらない上に、もしかしたら、もっと難しいことをしているかも知れません。
でも、ほとんどのものは、すでに誰かが作ってくれています。
初心者のうちは、それを思う存分使わせてもらって、興味があれば、少しずつ覚えていけばいい。
とにかく、プログラミング学習で挫折していく人は、環境構築に躓いたり、作ったものを公開して誰かに使ってもらえるイメージがわかずに萎えちゃう、そんな人が多いと思います。
Dockerですべて解決することはできないけれど、萎えポイントの半分くらいは解決してくれると思います。
せっかくですので、今回はその楽しさのエッセンスを味わいつつ、進めようと思います。
▼コード
▼Dockerfile
FROM python:3
RUN mkdir /opt/flask
COPY requirements.txt /tmp
RUN pip install --no-cache-dir -r /tmp/requirements.txt
WORKDIR /opt/flask
▼docker-compose.yml
version: '3.8'
services:
flask:
build: .
ports:
- "5000:5000"
volumes:
- "./flask:/opt/flask"
tty: true
environment:
TZ: Asia/Tokyo
command: flask run --host 0.0.0.0 --port 5000
▼app.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return 'hello world'
if __name__ == '__main__':
app.run()
▼requirements.txt
flask
▼ファイル構成
.
├── Dockerfile
├── docker-compose.yml
├── flask(フォルダ)
│ └── app.py
└── requirements.txt
▼起動(docker-compose.ymlのあるフォルダにcdで移動して)
docker-compose up -d
▼アプリ画面
localhost:5000 にアクセス。
画面にHello Worldと表示されるだけではありますが、Dockerがインストールされているパソコンで、上記のファイルを用意し、コマンドを打つだけで、誰でも全く同じ結果になるはずです。
Pythonがインストールされていないパソコンでも、Dockerが勝手に用意してくれます。
すごすぎる、Docker。
▼終わりに
今日のまとめを。
1. Dockerなら環境構築が楽にできる。
2. PythonでもWEB開発ができる。
DockerとPythonで、楽しくものづくりをしてもらえれば、幸いです。