Django

2026年版 Django アプリを Docker・Gunicorn・Nginxで本番デプロイする手順

ⓘ本ページはプロモーションが含まれています

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


スポンサードリンク

はじめに

このガイドは、Docker 化した Django アプリケーションを 安全かつ自動化されたフローで本番環境へデプロイ するための実践的手順をまとめたものです。
ローカル開発から CI/CD パイプライン構築、運用監視までを一貫して扱うことで、セットアップにかかる時間とミスを大幅に削減できます。
以下では、前提条件・Dockerfile のベストプラクティス・docker‑compose 設定・CI/CD 実装・運用上の注意点を順に解説します。


前提条件と環境準備

本セクションでは、本ガイド全体で必要となるツールやバージョン、そして快適に開発・テストできるハードウェア要件について説明します。
正しいバージョンを揃えておくことで、予期せぬ依存関係エラーやパフォーマンス低下を防げます。

必要なツールとインストール手順

ツール 推奨バージョン インストール方法の概要
Python 3.12(pyenv 推奨) curl https://pyenv.run \| bashpyenv install 3.12.0pyenv global 3.12.0
Docker Engine 最新版 https://docs.docker.com/engine/install/ の公式手順に従う(Linux は apt-get、macOS は Docker Desktop)
Docker Compose v2 系プラグイン形式 docker compose version で確認。v2.x が表示されれば OK
Git 2.45+ パッケージマネージャまたは公式サイトから取得
make 任意(ビルド自動化用) 多くの Linux ディストリビューションに同梱

ポイント:Python と Docker のバージョンが揃っていれば、ローカル環境と CI 環境で挙動が一致しやすくなります。

推奨ハードウェアリソース

開発・テスト時に快適に作業できる最低要件と、実際の負荷を想定した推奨設定を表にまとめました。
※本表は Docker Desktop のデフォルトメモリ上限やマルチステージビルドのキャッシュ利用を考慮しています。

項目 最低要件 推奨設定
CPU 2 コア 4 コア以上
メモリ 4 GB 8 GB 以上(Docker Desktop のメモリ上限を超えないように)
ストレージ SSD 推奨 空き領域 20 GB 以上

機密情報の取り扱いと .env ファイルの注意点

開発時に環境変数を手軽に管理できる .env は便利ですが、誤ってリポジトリへコミットするとシークレットが漏洩する危険があります。
以下の対策を必ず実施してください。

  1. .gitignore に追加*.env を必ず除外し、リモートにプッシュされないようにします。
  2. .env.example の活用 – 本番で使用するキーは空欄またはプレースホルダーにして配布し、実際の値はローカルだけで保持します。
  3. アクセス権限の最小化 – 開発マシン上でもファイルパーミッションを 600(所有者のみ読み書き)に設定します。

開発チームへの共有方法:Slack のプライベートチャネルや社内秘密管理ツールでキーを配布し、.env は各自がローカルで作成するフローを推奨します。


Dockerfile のベストプラクティス

この章では、イメージサイズ削減・ビルド高速化・ランタイムのセキュリティ向上を実現する マルチステージ構築レイヤ最適化、さらに 非 root 実行 の具体的手順を示します。

マルチステージビルド例

以下は、依存関係のインストールとアプリケーションコードだけをランタイムイメージへコピーする典型的な構成です。
builder ステージでキャッシュを活用し、最終イメージに不要なツールチェーンが残らないようにしています。

重要ポイントの解説

項目 説明
--target=/install 依存関係だけを別ディレクトリにインストールし、ランタイムイメージへコピーすることでビルドツールが残らない
chown -R django:django /app ボリュームマウント先や static/media ディレクトリの書き込み権限を事前に付与しておくと、コンテナ起動後のエラーを防げる
USER django root 権限で実行するリスクを排除し、最小権限の原則(Principle of Least Privilege)を遵守

レイヤキャッシュ活用と不要ファイル削除

  • 依存関係は分割 – 変更頻度が低い requirements-base.txt とアプリ固有の requirements.txt に分け、COPY requirements-base.txt . && pip install -r requirements-base.txt を先に実行すると、ソースコード変更時でもキャッシュが効き続けます。
  • APT キャッシュのクリアapt-get update && apt-get install -y <pkg> && rm -rf /var/lib/apt/lists/* のように、インストール直後にリポジトリ情報を削除してイメージサイズを最小化します。
  • ビルドコンテキストの肥大化防止.dockerignore を正しく設定し、不要なファイルが送られないようにします(次節参照)。

.dockerignore の推奨例

効果.dockerignore により Docker デーモンへ送信されるコンテキストが数十 MB から数百 KB に削減され、ビルド時間とネットワーク帯域の無駄遣いを防げます。


docker‑compose によるサービス定義

このセクションでは、ローカル開発・ステージング・本番で共通に利用できる docker‑compose.yml の構成要素と、機密情報管理のベストプラクティスを紹介します。
web, nginx, db, redis の四つのサービスを例示し、環境ごとのオーバーライド方法も併せて解説します。

基本構成(docker‑compose.yml)

以下のファイルは 開発本番 で同一に利用できるベースです。
env_file により .env の内容が自動的に注入され、機密情報は Docker secret へ切り替えるだけで安全に扱えます。

説明ポイント

  • env_file は開発時に便利ですが、本番では secrets: と組み合わせて使用することで、.env が漏洩しても機密情報は保護されます。
  • expose は内部ポートだけを宣言し、外部からの直接アクセスは Nginx のみ許可します。

開発向けオーバーライド(docker‑compose.override.yml)

開発時にコード変更を即座に反映させるためのボリュームマウントと、runserver への切り替え例です。

注意docker-compose.override.yml は自動的に docker compose up に組み込まれますが、CI 環境では明示的に除外してください。

.env と Docker secret の併用例

本番環境では次のように secret を作成します。

docker‑compose.ymlsecrets: に登録したら、コンテナ内部では /run/secrets/<name> から値を取得できます。


エントリポイントスクリプトと起動フロー

Docker コンテナが起動するたびに行うべき初期化処理は entrypoint.sh にまとめます。
以下のサンプルでは、シークレット読み込み・DB 接続待機・マイグレーション・static 収集を順序立てて実行しています。

  • set -euo pipefail によりエラー時に即座にスクリプトが停止し、コンテナの不正状態での稼働を防ぎます。
  • exec "$@" で Dockerfile の CMD(Gunicorn)へ制御を渡すため、シグナル転送が正しく機能します。

Dockerfile への組み込み例


CI/CD パイプライン構築(GitHub Actions + Docker Buildx)

本章では、マルチプラットフォーム対応イメージを自動でビルド・テスト・レジストリへ push し、Swarm スタックへデプロイするまでのフローを解説します。
CI が失敗した場合は即座にロールバックできるようタグベースの戦略も併せて示します。

ワークフロー全体像

  1. コードチェックアウト → 変更があればビルドトリガーへ進む
  2. QEMU と Buildx のセットアップ(マルチアーキテクチャ対応)
  3. レジストリ認証(GHCR または ECR)
  4. イメージビルド & プッシュdocker buildx build --platform ... --push
  5. Swarm へデプロイ(SSH 経由で docker stack deploy 実行)

GitHub Actions ワークフロー例

重要な設定ポイント

  • --with-registry-auth はプライベートレジストリの認証情報を自動で渡すため必須です。
  • --resolve-image changed により、イメージが更新されたときだけサービスが再起動します。

ロールバック戦略(タグベース)

  1. デプロイ時に Git コミット SHA をタグ付けし、同じタグをイメージ名に使用。
  2. 障害発生時は docker service update --image ghcr.io/yourorg/django-app:<前のSHA> prod_web で即座にロールバック。

ブルー/グリーンデプロイの実装例(Swarm)

手順 内容
1 stack-blue.ymlstack-green.yml を別々に用意し、サービス名にサフィックス (web_blue, web_green) を付与
2 外部ロードバランサ(例:AWS ALB)のターゲットグループを切り替えてトラフィックを移行
3 新スタックがヘルスチェック通過後、旧スタックを docker stack rm で削除

監視・ログ収集とトラブルシューティング

本章では、運用時に必須となる ログの集中管理メトリクス可視化 の手順、および頻出エラーへの対処法をまとめます。

ログの標準出力化と集約

  • Gunicornaccesslog = '-'errorlog = '-' と設定し、すべて Docker の stdout に流す。
    python
    # gunicorn.conf.py
    accesslog = '-'
    errorlog = '-'
  • Nginx はコンテナ内部で /var/log/nginx を作成し、docker run -v $(pwd)/nginx_logs:/var/log/nginx でホストに永続化。
  • ELK / Loki + Grafana:Docker の JSON ログ形式をそのまま収集エージェント(Filebeat or Promtail)へ流し、検索・可視化を実現。

メトリクス取得とダッシュボード構築

コンポーネント Exporter エンドポイント
Django アプリ django-prometheus /metrics/
Nginx nginx-prometheus-exporter http://nginx:9113/metrics
PostgreSQL postgres_exporter localhost:9187

docker‑compose.yml に追加する例

  • Prometheus の設定ファイル prometheus.yml に上記エクスポーターをジョブとして登録し、Grafana で公式テンプレート(Django, Nginx)をインポートすれば即時に可視化できます。

よくある障害と対処フロー

障害シナリオ 主な原因 確認手順 推奨解決策
コンテナ起動失敗 (exit code 1) SECRET_KEY 未設定、ポート競合 docker logs <コンテナ> → エラーメッセージ確認 .env・Docker secret を再確認し、EXPOSE とホストポートの重複を解消
static ファイル 404 collectstatic が実行されていない、STATIC_ROOT パス違い コンテナ内で ls /app/static/ 確認 entrypoint.sh に必ず collectstatic --noinput を入れる
DB 接続エラー 環境変数ミスマッチ、ネットワーク未接続 docker exec -it <web> ping db .envPOSTGRES_* 系を統一し、networks: 設定が正しいか確認
Gunicorn workers 過多で OOM CPU コア数に対して過剰な workers を設定 docker stats でメモリ使用率監視 workers = min((CPU*2)+1, 8) 程度に抑える

記事のまとめ(約260文字)

本稿では、Python 3.12 と Docker の最新版を前提にした開発環境構築から、マルチステージ Dockerfile・非 root 実行・.dockerignore によるビルド最適化までのベストプラクティスを解説しました。
docker‑compose.yml では 機密情報は .env と Docker secret のハイブリッドで安全に管理し、エントリポイントでマイグレーション・static 収集を自動化します。
CI/CD は GitHub Actions + Buildx でマルチプラットフォームイメージを GHCR/ECR に push、Swarm の docker stack deploy で本番へデプロイし、タグベースのロールバックやブルー/グリーン構成も実装可能です。
運用フェーズでは Prometheus+Grafana と ELK/Loki によるログ・メトリクス集中管理と、典型的な障害への対処手順を提供することで、Docker 化 Django アプリの安全かつ高速な本番移行を実現します。

スポンサードリンク

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


-Django