このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。
Docker超入門:開発環境コンテナ:Django+MySQL①

🐳 開発環境コンテナ:Django+MySQL①
今回は Docker Compose を使って、Django+MySQLの開発環境コンテナを構築していきます。
この構成は「Webアプリ(Django)」+「データベース(MySQL)」という、王道のセットアップです!
記事は2部構成になっています👇
- 開発環境コンテナ:Django+MySQL①(今回)… Dockerfile と compose.yaml の準備
- 開発環境コンテナ:Django+MySQL②(次回)… Django プロジェクトの作成と接続設定
🐍 Djangoとは?

Django(ジャンゴ)は、Pythonで書かれた人気の高いWebアプリケーションフレームワークです。
「フルスタック型」と呼ばれるタイプで、Webアプリに必要な機能がすべてそろっています。
| 特徴 | 説明 |
|---|---|
| フルスタック構成 | 認証、管理画面、テンプレートなどを標準で装備。 |
| 高速開発 | 最小限のコードで動くWebアプリをすぐ作れる。 |
| MTVアーキテクチャ | Model(データ構造)、Template(見た目)、View(処理)を分離して開発しやすい。 |
Django公式サイトはこちら:
🔗 https://www.djangoproject.com/

🐬 MySQLとは?

MySQLは、世界中で最も利用されているオープンソースのデータベースです。
WordPressやYouTubeなど、多くの有名サービスでも採用されています。
| 特徴 | 説明 |
|---|---|
| 高速・軽量 | 大規模なデータ処理でも安定した性能。 |
| オープンソース | 無料で利用でき、商用利用もOK。 |
| 高い信頼性 | Oracle社のサポートにより継続的に更新。 |
MySQL公式サイトはこちら:
🔗 https://www.mysql.com/jp/

⚙️ Djangoコンテナの作成
ここからは、DjangoとMySQLのコンテナをDocker Composeで構築していきます。
「compose.yaml」を作成して、DjangoとMySQLコンテナを作成します。

今回はDocker Hub上に新しいDjangoイメージがなかったため、Pythonベースの独自イメージを作成します。
DjangoはPythonで動作するため、Pythonイメージをベースにして必要なライブラリを追加します👇
| 手順 | コマンド | 内容 |
|---|---|---|
| ① | pip install Django | Djangoをインストール |
| ② | pip install mysqlclient | MySQL接続用ライブラリをインストール |
この2つを自動的に導入する オリジナルDockerイメージ を作成していきます。
🧹 作業前のクリーンアップ
古いコンテナや未使用のイメージが残っていると、思わぬトラブルの原因になります。
まずはDocker環境を整理して、スッキリした状態から始めましょう。
docker system prune -a --volumes| コマンド | 説明 |
|---|---|
| docker system prune | 不要なコンテナやネットワーク、キャッシュを削除します。 |
| -a | すべての未使用イメージを含めて削除します。 |
| --volumes | 未使用のボリュームも削除します。 |
💬 ワンポイント
「思い切ってリセットしたいとき」に便利です。
ただし、必要なイメージも消える可能性があるので注意してくださいね。
実行結果
PS C:\Users\joeac> docker system prune -a --volumes
WARNING! This will remove:
- all stopped containers
- all networks not used by at least one container
- all anonymous volumes not used by at least one container
- all images without at least one container associated to them
- all build cache
Are you sure you want to continue? [y/N] y📁 作業用ディレクトリを作成しよう
Docker Composeを使うには、compose.yaml があるディレクトリで作業する必要があります。
まずはプロジェクト用フォルダを作って、そこに移動します。
cd desktop/docker
mkdir django2
cd django2実行結果
PS C:\Users\joeac> cd desktop/docker
PS C:\Users\joeac\Desktop\docker> mkdir django2
Directory: C:\Users\joeac\Desktop\docker
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 2025/10/18 22:19 django2
PS C:\Users\joeac\Desktop\docker> cd django2
PS C:\Users\joeac\Desktop\docker\django2>このディレクトリに、Dockerfile と compose.yaml を作成していきます。
🧱 Dockerfileの作成
VSCodeを開いて、新しく Dockerfile を作りましょう。
code Dockerfile以下の内容を入力して保存します👇
FROM python:3.10
WORKDIR /code
ADD requirements.txt /code
RUN pip install -r requirements.txt
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]| 指定項目 | 説明 |
|---|---|
| FROM python:3.10 | Python 3.10の公式イメージをベースにする。 |
| WORKDIR /code | 作業ディレクトリを /code に設定。 |
| ADD requirements.txt /code | 依存関係リストをコンテナにコピー。 |
| RUN pip install -r requirements.txt | DjangoやMySQLライブラリをインストール。 |
| CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"] | Django開発サーバーを起動。 |
💬 ポイント
requirements.txtに必要なライブラリをまとめておくと、後で環境を再現しやすくなります。
📦 requirements.txt の作成
次に、Pythonで使うライブラリをまとめた requirements.txt を作成します。
code requirements.txt内容は以下の通りです👇
Django==4.0.2
mysqlclient| ライブラリ | 説明 |
|---|---|
| Django | Webアプリケーションフレームワーク。 |
| mysqlclient | PythonからMySQLへ接続するためのライブラリ。 |
⚙️ compose.yaml の作成
次に、DjangoとMySQLを一緒に動かすための compose.yaml を作ります。
ここでは、Docker Composeを使って Django+MySQL の開発環境を構築します。
特にコンテナ間の連携を安定させるために重要なhealthcheck、depends_on、command の3つの設定を詳しく解説します。
code compose.yaml以下のように編集して保存します👇
version: "3.9"
services:
mysql:
image: mysql:8.0
container_name: mysql_container
environment:
MYSQL_ROOT_PASSWORD: root-pass
MYSQL_DATABASE: test-db
MYSQL_USER: test-user
MYSQL_PASSWORD: test-pass
volumes:
- db-data:/var/lib/mysql
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 5s
timeout: 3s
retries: 5
start_period: 5s
django:
build: .
container_name: django_container
depends_on:
mysql:
condition: service_healthy
ports:
- "8000:8000"
volumes:
- ./:/code
command: >
python manage.py runserver 0.0.0.0:8000
volumes: # 👈 services: と同じ階層に置く(ここが重要)
db-data:この設定では、
「MySQLコンテナ → Djangoコンテナ」の順で確実に起動し、
MySQLが正常に稼働したことを確認してからDjangoを起動するようになっています。
その鍵を握るのが healthcheck と depends_on の連携です。
🩺 healthcheck とは?
healthcheck は、コンテナの内部状態を自動的に確認するための機能です。
単にコンテナが“起動している”だけでなく、“アプリが実際に動作可能か”を監視します。
DjangoとMySQLを連携させる際、MySQLの起動が完全に完了する前にDjangoが接続を試みると失敗します。
そのため、healthcheck によって「MySQLが応答可能な状態かどうか」を定期的にチェックします。
🧠 設定内容の詳細解説
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 5s
timeout: 3s
retries: 5
start_period: 5s| 項目 | 説明 |
|---|---|
| test | ヘルスチェックで実行するコマンド。MySQLに ping を送って応答を確認します。 |
| interval | チェックの間隔(5秒ごとに実行)。 |
| timeout | 応答が返るまでの待ち時間。3秒以内に応答がなければ失敗とみなします。 |
| retries | 失敗を何回繰り返したら「不健康」と判断するか。ここでは5回。 |
| start_period | 初回起動時の猶予期間。MySQLが立ち上がるまで5秒待ってからチェックを開始。 |
💡 ポイント
mysqladmin pingはMySQLサーバに軽い通信を行い、「mysqld is alive」という応答が返ってくれば正常です。
これが失敗した場合、Composeは「このコンテナはまだ健康状態ではない」と判断します。
🔗 depends_on とは?
depends_on は、コンテナの起動順序や依存関係を指定する設定です。
DjangoがMySQLに依存しているため、MySQLが「起動してから」Djangoを起動させる必要があります。
Composeの旧仕様(v2以前)では、
「MySQLコンテナの起動完了=Django起動OK」と判断されていましたが、
実際にはMySQLが応答可能(healthy)になるまで数秒かかることがあります。
この問題を解決するために、depends_on に condition: service_healthy を追加します。
🧠 設定内容の詳細解説
depends_on:
mysql:
condition: service_healthy| 項目 | 説明 |
|---|---|
| depends_on | Djangoが依存するサービスを定義します。 |
| mysql | 依存対象のサービス名(MySQLコンテナ)。 |
| condition: service_healthy | MySQLコンテナが healthy 状態になるまで待機。 |
💡 ポイント
service_healthyはhealthcheckの結果と連動します。
MySQLがまだ「unhealthy」の場合、Djangoの起動は待機状態となります。
これにより、Djangoが「接続エラー」で落ちることを防ぎます。
🔁 動作の流れ
| ステップ | コンテナ | 状態 | 説明 |
|---|---|---|---|
| ① | MySQL | starting | 起動中。healthcheck開始まで待機。 |
| ② | MySQL | healthy | 応答確認済み。「mysqld is alive」応答あり。 |
| ③ | Django | starting | MySQLがhealthyになった時点で起動開始。 |
| ④ | Django | running | 正常稼働。DB接続成功。 |
💬 command とは?
command は、コンテナ起動時に実行されるコマンドの上書き設定です。
Dockerfile内で CMD を定義していても、Composeファイルの command に記述した内容が優先されます。
Djangoの場合、開発用サーバを起動するために以下を指定します。
command: >
python manage.py runserver 0.0.0.0:8000| コマンド要素 | 説明 |
|---|---|
| python manage.py | Djangoプロジェクトの管理コマンドを実行するツール。 |
| runserver | Djangoの開発用Webサーバを起動するサブコマンド。 |
| 0.0.0.0:8000 | コンテナ内の全てのネットワークインターフェースでポート8000を待ち受け。 |
💡 補足
これを指定することで、ホスト(WindowsやMac)から
http://localhost:8000にアクセスしてDjangoを確認できます。
🖥️ 動作の仕組み
コンテナが起動すると、次の流れで処理されます。
- MySQLコンテナが
healthcheckで監視される。 - MySQLが
healthy状態になる。 - Djangoコンテナが起動(
depends_onにより制御) - Djangoが
python manage.py runserver 0.0.0.0:8000を実行 - ブラウザから
localhost:8000にアクセスするとDjangoのTOPページが表示
✅ 要約
| 設定項目 | 役割 | 主な効果 |
|---|---|---|
| healthcheck | MySQLの動作状態を定期確認 | DBが完全に起動するまでの待機制御 |
| depends_on | DjangoとMySQLの起動順序制御 | Django起動をMySQLの健康状態に連動 |
| command | Djangoサーバの起動コマンド指定 | ブラウザから即アクセス可能にする。 |
これら3つを組み合わせることで、
MySQLが確実に起動→Djangoが安全に接続→Webサーバが正常動作
という安定した開発環境が構築できます。
✅ まとめ
ここまでで、以下の準備が完了しました👇
| ステップ | 内容 |
|---|---|
| ① | Docker環境をクリーンアップ |
| ② | プロジェクトディレクトリを作成 |
| ③ | Django用 Dockerfile を作成 |
| ④ | 依存関係ファイル requirements.txt を準備 |
| ⑤ | Django+MySQL の compose.yaml を定義 |
この続きは「開発環境コンテナ:Django+MySQL②」で、
Djangoプロジェクトを実際に作成して、Djangoコンテナを作成して接続していきます。
