Docker×PythonでWebアプリの開発環境整えてみた
こんにちは、やすです。
今回は、「Docker×Pythonで開発環境整えてみた」についてお話したいと思います。
ぼくは現在、エンジニアとして働いていますが、ずっとテストばっかりの毎日です。
ほんとは開発がやりたい!
ということで、家でなにか開発できないかなと思い、まずは環境構築を始めることにしました。
会社では、Javaの環境構築をしました。
で、ソフトもエクリプスを使ってやっていますが、エクリプスがとにかく重い。
ということで、違う言語で、好きなVScodeを使って開発をやりたいということで、Python×Dockerにたどりつきました。
この記事では、Dockerの魅力について、そして実際の環境構築で作ったファイルを載せていきたいと思います。
ちなみにDockerについて初めは何もわからなかったですが、以下の1冊を買って読み、今はネットで調べながら勉強しています。
Dockerの魅力
1.自分のパソコンに色々ダウンロードしなくていい
1つ目の魅力としては、「自分のパソコンに色々ダウンロードしなくていい」ということ。
開発環境を整えるときは、基本的にパソコンに色々ダウンロードしないといけません。(今回でいえばPythonなど)
ただ、Dockerがあればパソコンではなく、Docker内にダウンロードできるため、パソコンをきれいに保つことができます。
2.同じ環境を再現しやすい
2つ目の魅力としては、「同じ環境を再現しやすい」ということ。
WindowsでもMacでも基本的には、Dockerをインストールして、Dockerfileやdocker-compose.ymlといったファイルを同じように作るだけで、同じ開発環境を整えることができます。
これって本当にすごくて、ぼくの会社だと環境構築にDockerは使わないため、同じ環境を作るにはいろいろなものをインストールや設定して、環境構築しないといけません。
その過程でミスが起こったり、なぜか動かないなんてこともしばしばあります。
Dockerを使えば、最初さえ乗り越えれたらあとは楽に環境構築できるというわけです。
Pythonの環境構築
ではここから実際のDockerfileを置いていきたいと思います。
ディレクトリ構成
まずはディレクトリ構成から。
ディレクトリ構成は以下のようになっています。
.
├── app
│ ├── __pycache__
│ │ ├── __init__.cpython-312.pyc
│ │ └── app.cpython-312.pyc
│ ├── static
│ │ ├── css
│ │ │ ├── common.css
│ │ │ ├── login.css
│ │ │ ├── ress.css
│ │ │ ├── reverseForLogin.css
│ │ │ └── signUp.css
│ │ └── js
│ │ ├── login.js
│ │ ├── reverseForLogin.js
│ │ └── signUp.js
│ ├── templates
│ │ ├── login.html
│ │ ├── reverseForLogin.html
│ │ ├── signup.html
│ │ └── top.html
│ ├── views
│ │ ├── __init__.
│ │ ├── login.py
│ │ └── registration.py
│ ├── __init__.
├── docker-compose.yml
├── Dockerfile
├── requirements.txt
├── run.py
└── 基本設計書
Staticの中には、CSSとJSのファイルを作ります。
templatesの中にはhtmlファイルを作ります。
そして、viewsの中にパイソンファイルを作っていくという感じです。
そして、Dockerfileとdocker-compose.ymlファイルは直下に置きます。
Dockerfile
Dockerfileは以下のようにします。
FROM python:3
# WORKDIRを使用して、必要なディレクトリを作成し、ワーキングディレクトリとして設定
WORKDIR /opt/flask-app
# requirements.txtをコピー
COPY requirements.txt /tmp
# 依存関係のインストール
RUN pip install --no-cache-dir -r /tmp/requirements.txt
# ワーキングディレクトリを指定することで、RUN mkdirは不要になります。
docker-compose.yml
docker-compose.ymlファイルは以下のようにします。
version: '3.9'
services:
flask-app:
build: .
ports:
- "8000:8000"
volumes:
- ".:/opt/flask-app" # プロジェクトディレクトリ全体をマウント
tty: true
environment:
TZ: Asia/Tokyo
FLASK_APP: /opt/flask-app/run.py # Flaskアプリケーションの起動ポイント
FLASK_ENV: development
command: flask run --host 0.0.0.0 --port 8000
depends_on:
- db
platform: linux/amd64
db:
image: mysql:5.7
volumes:
- db-data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_DATABASE: mydatabase
MYSQL_USER: user
MYSQL_PASSWORD: password
ports:
- "3306:3306"
platform: linux/x86_64
volumes:
db-data:
他のファイルの詳細は、
こちらに載せているので、ぜひ参考にしてください。
まとめ
以上、「Docker×PythonでWebアプリの開発環境整えてみた」についてでした。
ぼくもDockerは勉強中で、わからないことがたくさんありますが、とにかくDockerは魅力的なツールだなと感じています。
最後まで読んでいただきありがとうございました。
ではまた。