『Django + Docker 』でデータ分析の環境構築をしてみた!
はじめに
最近、転職サイトで 「データサイエンティスト募集」 をよく見かけます。回帰分析や統計モデルは難しそうに感じるかもしれませんが、まずは データ分析ができる開発環境 を用意するところから始めましょう。
このガイドでは、Docker を使って Python(Django)+ MySQL + Nginx の環境を最短で構築します。コピペで動くので、初心者の方も安心してください。
開発環境の概要
項目 | 内容 |
---|---|
ホスト OS | Windows + Docker Desktop(WSL2 推奨) |
FW | Django 3.2 以上 |
DB | MySQL 8.0 |
Web サーバー | Nginx 1.21 + uWSGI |
Tip: Mac や Linux でも同じ
docker compose
コマンドで動きます。
ディレクトリ・ファイル構成
ツリー表示例(tree
コマンド)
django-app/
│ .env
│ docker-compose.yml
│ README.md
│
├─mysql/
│ Dockerfile
│ my.cnf
│
├─nginx/
│ default.conf
│ uwsgi_params
│
└─python/
Dockerfile
requirements.txt
.idea/
や.vscode/
は IDE 用フォルダなので.gitignore
で除外しましょう。
環境構築ステップ
Python コンテナ用 Dockerfile
python/Dockerfile
# バージョンを固定したい場合は python:3.12 など指定
FROM python:3
ENV PYTHONUNBUFFERED=1
# ----- ロケール設定(日本語環境用) -----
RUN apt-get update && \
apt-get -y install locales && \
localedef -f UTF-8 -i ja_JP ja_JP.UTF-8
ENV LANG ja_JP.UTF-8 \
LANGUAGE ja_JP:ja \
LC_ALL ja_JP.UTF-8 \
TERM xterm
# ----- 作業ディレクトリ -----
RUN mkdir /workspace
WORKDIR /workspace
# ----- Python ライブラリ -----
ADD requirements.txt /workspace/
RUN pip install --upgrade pip setuptools && \
pip install -r requirements.txt
# ----- プロジェクトソース -----
ADD .. /workspace/
python/requirements.txt
Django>=3.2.7
uwsgi==2.0.20
mysqlclient
pandas # ★ データ分析に必須
autopep8
pip とは?
Python パッケージ管理ツールです。requirements.txt
に必要ライブラリを書いておけば、一括インストールできます。
Nginx で Web サーバーを立てる
Nginx フォルダには 2 つの設定ファイルを置きます。
nginx/uwsgi_params
Nginx から uWSGI(アプリケーションサーバー)へ渡すパラメータ定義です。
uwsgi_param QUERY_STRING $query_string;
uwsgi_param REQUEST_METHOD $request_method;
uwsgi_param CONTENT_TYPE $content_type;
uwsgi_param CONTENT_LENGTH $content_length;
uwsgi_param REQUEST_URI $request_uri;
uwsgi_param PATH_INFO $document_uri;
uwsgi_param DOCUMENT_ROOT $document_root;
uwsgi_param SERVER_PROTOCOL $server_protocol;
uwsgi_param REQUEST_SCHEME $scheme;
uwsgi_param HTTPS $https if_not_empty;
uwsgi_param REMOTE_ADDR $remote_addr;
uwsgi_param REMOTE_PORT $remote_port;
uwsgi_param SERVER_PORT $server_port;
uwsgi_param SERVER_NAME $server_name;
nginx/default.conf
Django アプリ(app
サービス)に 8001 番ポートでプロキシします。
upstream django {
server app:8001; # docker-compose 内のサービス名
}
server {
listen 8000;
server_name 127.0.0.1;
charset utf-8;
location / {
uwsgi_pass django;
include /etc/nginx/uwsgi_params;
}
}
uWSGI とは?
WSGI(Python Web サーバー標準)に準拠した アプリケーションサーバー です。Flask や FastAPI にも利用できます。
MySQL コンテナ用 Dockerfile
mysql/Dockerfile
FROM mysql:8.0
ENV MYSQL_DATABASE=django_local \
MYSQL_USER=django_user \
MYSQL_PASSWORD=secret \
MYSQL_ROOT_PASSWORD=secret \
TZ=Asia/Tokyo
COPY my.cnf /etc/mysql/conf.d/my.cnf
RUN chmod 644 /etc/mysql/conf.d/my.cnf
mysql/my.cnf
(抜粋)
[mysqld]
default-authentication-plugin = mysql_native_password
character_set_server = utf8mb4
collation_server = utf8mb4_0900_ai_ci
# timezone
default-time-zone = SYSTEM
log_timestamps = SYSTEM
# logs
slow_query_log = 1
slow_query_log_file = mysql-slow.log
long_query_time = 1
docker-compose.yml を作成
docker-compose.yml
version: "3.8"
services:
db:
build:
context: .
dockerfile: ./mysql/Dockerfile
command: --default-authentication-plugin=mysql_native_password
volumes:
- db-store:/var/lib/mysql
web:
image: nginx:1.21.3-alpine
ports:
- "8000:8000" # ホスト:コンテナ
volumes:
- ./src:/workspace # ソースコード
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf
- ./nginx/uwsgi_params:/etc/nginx/uwsgi_params
depends_on:
- app
app:
build:
context: .
dockerfile: ./python/Dockerfile
command: >
uwsgi --socket :8001 \
--module app.wsgi \
--py-autoreload 1 \
--logto /tmp/uwsgi.log
volumes:
- ./src:/workspace
expose:
- "8001"
depends_on:
- db
volumes:
db-store:
ポイント:
depends_on
で起動順序を制御し、volumes:
で DB データを永続化します。
起動手順
-
イメージをビルド & 起動
docker compose up -d --build
-
ブラウザで http://localhost:8000 にアクセス → Django が表示されれば成功
-
停止する場合
docker compose down # コンテナ停止 # データも初期化する場合 docker compose down -v # ボリューム削除
まとめ
- Docker により PC の環境差分を気にせず再現可能。
- Django + pandas で Web 開発とデータ分析を同一環境で実施。
- Nginx / uWSGI によって本番想定の構成をローカルで体験。
⭐ リポジトリはこちら。役立ったら Star をお願いします!
Discussion