Closed4
docker × Django 環境構築
やりたいこと
- ローカルのPythonに依存せずにDocker × Django の開発環境を作成する
- できた環境をもとにDjango チュートリアルを進める
実装したリポジトリはこちら↓
1. DockerfileとDjangoプロジェクト作成
django_tutorial_with_docker
という名前でルートディレクトリを作成
mkdir django_tutorial_with_docker && cd django_tutorial_with_docker
Docker環境に必要なファイルをプロジェクト内に作成する(いったん下記2ファイルのみ)
- Dockerfile
- requirements.txt
Dockerfile
# ベースイメージの設定
FROM python:3.12
# Pythonの標準出力のバッファリングを解除して、出力を即座に表示できるよう設定
ENV PYTHONUNBUFFERED=1
# 作業ディレクトリの設定
WORKDIR /code
# pipの最新バージョンにアップグレード
RUN pip install --upgrade pip
# 依存関係のインストール
COPY requirements.txt /code/
RUN pip install --no-cache-dir -r requirements.txt
# ソースコードをコンテナ内にコピー
COPY . /code/
requrements.txt
Django==4.2.5
- Dockerイメージのビルド
- イメージに
django-tutorial
というタグを付ける
- イメージに
terminal
docker image build -t django-tutorial .
- コンテナ起動
- 現在のディレクトリ
$(pwd)
をコンテナ内のディレクトリcode
にマウントさせる - コンテナ内で作成したdjangoプロジェクトをローカル側に反映させたい意図がある
- 現在のディレクトリ
terminal
docker run -it --name django-tutorial-container -v $(pwd):/code django-tutorial /bin/bash
- コンテナ内でDjangoプロジェクト作成
-
code
ディレクトリへ移動して、下記コマンド実行 - 第1引数にプロジェクト名となる
config
を指定 - 第2引数に
.
を渡すことで、現在のディレクトリ直下に雛形となるモジュール群を作成する
-
コンテナ内
cd code && django-admin startproject config .
- ディレクトリ構造の確認
- ローカルの
django_tutorial_with_docker
の中身が下記のようになっていればOK
- ローカルの
terminal
tree .
.
├── Dockerfile
├── config
│ ├── __init__.py
│ ├── asgi.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── manage.py
└── requirements.txt
1 directory, 9 files
2. docker-composeでアプリ起動できるようにする
djangoプロジェクトは作成できたので、
docker compose up
でコンテナ起動→Djnagoプロジェクトが自動で立ち上がる状態を作りたい。
まずは、docker-compose.yml
ファイルを作成する
- docker-compose.yml
-
command
:Django開発サーバーを8000番ポートで起動するコマンドを指定する -
volumes
:ホストPC側のカレントディレクトリをコンテナ内の/code
にマウントする -
ports
:コンテナ内の8000番ポートをホストPCの8000番ポートにマッピングする
-
docker-compose.yml
version: '3'
services:
web:
build: .
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8000:8000"
-
docker-compose
コマンドでコンテナ起動する
terminal
docker compose up
- localhost:8000にアクセスして、Djangoサーバーが立ち上がればOK(下記イメージ)
3. Django Tutorialスタート
公式チュートリアルを進める
このスクラップは2ヶ月前にクローズされました