概要
- Docker compose で開発用の環境を構築します
- Djangoフレームワーク+django-allauthパッケージをインストールします
- MySQLもインストールして、Djangoから使えるようにします
準備
- Dockerを使うので、Docker Desktop(Windows)などをインストールしておきます
-
requirement.txt
を作成します
Django~=5.0.6
django-allauth~= 0.63.2
requests
mysqlclient~=2.1.1
-
Dockerfile
を作成します
# Pythonの公式イメージを使用。バージョン3.12を指定。
FROM python:3.12
# 作業ディレクトリを設定
WORKDIR /app
# 必要なパッケージをインストール(vimを入れるかはお好みで)
RUN apt-get update && apt-get install -y \
git \
default-libmysqlclient-dev \
build-essential \
vim \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
# 依存関係のあるPythonライブラリを記述したrequirements.txtをコンテナ内にコピー
COPY requirements.txt ./
# requirements.txtにリストされた依存関係をインストール
RUN pip install --no-cache-dir -r requirements.txt
# アプリケーションのソースコードをコンテナ内の作業ディレクトリにコピー
COPY . .
# ホストの5005番ポートをコンテナに公開
EXPOSE 5005
# デフォルトのシェルをbashに変更
SHELL ["/bin/bash", "-c"]
# コンテナが起動した際に実行されるコマンド
CMD ["bash"]
-
docker-comopse.yml
を作成します
services:
web:
build:
context:
./
volumes:
- .:/app
ports:
- "5005:5005"
tty: true
depends_on:
- db
environment:
DB_HOST: db
DB_PASSWORD: mypassword123456
db:
image: mysql:8.3.0
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: dj01
MYSQL_USER: dj01user
MYSQL_PASSWORD: mypassword123456
TZ: 'Asia/Tokyo'
command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci
- dockerコンテナをビルドして起動します
docker compose up -d --build
Djangoプロジェクトの作成
- Dockerコンテナ内で、Djangoプロジェクトを作成します
docker exec -it django-fb-login-web-1 django-admin startproject dj_fb_login
- Djangoが自動起動するように、Dockerfileを書き換えます
--- a/Dockerfile
+++ b/Dockerfile
@@ -2,7 +2,7 @@
FROM python:3.12
# 作業ディレクトリを設定
-WORKDIR /app
+WORKDIR /app/dj_fb_login
# 必要なパッケージをインストール
RUN apt-get update && apt-get install -y \
@@ -26,6 +26,4 @@ EXPOSE 5000
SHELL ["/bin/bash", "-c"]
# コンテナが起動した際に実行されるコマンド
-CMD ["bash"]
+CMD python manage.py runserver 0.0.0.0:5005
- Dockerコンテナを停止して、再作成します
docker compose down
docker compose up -d --build
MySQLへの接続設定
- MySQLを使えるように、
settings.py
にあるデータベースの設定を変更します
--- a/dj_fb_login/dj_fb_login/settings.py
+++ b/dj_fb_login/dj_fb_login/settings.py
@@ -75,8 +75,12 @@ WSGI_APPLICATION = "dj_fb_login.wsgi.application"
DATABASES = {
"default": {
- "ENGINE": "django.db.backends.sqlite3",
- "NAME": BASE_DIR / "db.sqlite3",
+ 'ENGINE': 'django.db.backends.mysql',
+ 'NAME': 'dj01',
+ 'USER': 'dj01user',
+ 'PASSWORD': 'admin1234',
+ 'HOST': 'db',
+ 'PORT': '3306',
}
}
- Dockerコンテナを停止して、再作成します
docker compose down
docker compose up -d --build
- DjangoのDBへのマイグレーションを行います
docker exec -it django-fb-login-web-1 python manage.py migrate
- Dockerコンテナを停止して、再作成します
docker compose down
docker compose up -d --build
WEBブラウザで表示を確認
- WEBブラウザで、
http://localhost:5005/
にアクセスし、ロケットの画像が出ればOKです
The install worked successfully! Congratulations!
You are seeing this page because DEBUG=True is in your settings file and you have not configured any URLs.
- webサービスよりdbサービスが先に立ち上がってしまい、接続エラーになる場合は、DBのヘルスチェックを使って起動を確認します。docker-compose.ymlを修正して再起動します。
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -10,7 +10,8 @@ services:
- "5005:5005"
tty: true
depends_on:
- - db
+ db:
+ condition: service_healthy
environment:
DB_HOST: db
DB_PASSWORD: mypassword123456
@@ -25,7 +26,11 @@ services:
MYSQL_PASSWORD: mypassword123456
TZ: 'Asia/Tokyo'
command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci
-
+ healthcheck:
+ test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost"]
+ interval: 20s
+ timeout: 10s
+ retries: 10
phpmyadmin:
image: phpmyadmin/phpmyadmin
Djangoの管理者ユーザーの作成
docker exec -it django-fb-login-web-1 python manage.py createsuperuser
パスワードが短いと赤文字でメッセージが出ますが、バイパスできます。
Username (leave blank to use 'root'): admin
Email address: admin@example.com
Password:
Password (again):
The password is too similar to the username.
This password is too short. It must contain at least 8 characters.
This password is too common.
Bypass password validation and create user anyway? [y/N]: y
Superuser created successfully.
WEBブラウザで管理者ユーザーでログインできることを確認
- WEBブラウザで、
http://localhost:5005/admin
にアクセスし、上記で作成したIDとパスワードでログインできればOKです