このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

【Docker入門】Djangoコンテナ(MySQL)②

Djangoコンテナ(MySQL)①」の続きです。

「Djangoコンテナ(MySQL)」は次の2部に分けて解説しています。

ここでは、Djangoプロジェクトを作成して、Djangoコンテナへの接続を行っていきます。

Djangoプロジェクトの作成

 Djangoを起動させるには、Djangoプロジェクトが必要です。Djangoプロジェクトを作成後、データベースの接続するために設定ファイルを書き換えます。

 設定ファイルを取得するために「docker compose run サービス名」コマンドを使用して、Djangoコンテナを一時的に作成しておきます。

コマンドは次のとおりです。

docker compose run django django-admin startproject myproject .

「docker compose run」コマンドの解説

項目説明
docker compose runDocker Composeを使用してコマンドを実行するためのコマンド。
django実行するサービスの名前を指定します。
django-adminDjangoのプロジェクト管理ツールであるdjango-adminを実行します。
startproject新しいDjangoプロジェクトを開始します。
myproject新しいDjangoプロジェクトの名前を指定します。
.プロジェクトを作成するディレクトリを指定します。デフォルトでは現在のディレクトリに作成されます。
「docker compose run」コマンドの解説

 このコマンドは、Djangoのプロジェクト管理ツールであるdjango-adminを使用して、新しいDjangoプロジェクトを開始します。コマンドはDocker Composeを介して実行され、サービス名「django」のコンテナ内で実行されます。新しいプロジェクトの名前は「myproject」とし、カレントディレクトリに作成されます。

「docker compose run django django-admin startproject myproject .」コマンドを実行します。

コマンドの実行には、少し時間がかかります。

PS C:\Users\joeac\Desktop\docker\django2> docker compose run django django-admin startproject myproject .
[+] Running 12/12
 ✔ mysql Pulled                                                                 11.8s
   ✔ bd37f6d99203 Pull complete                                                  1.8s
   ✔ d2433cba0951 Pull complete                                                  0.6s
   ✔ 13702d9fe3c3 Pull complete                                                  0.8s
   ✔ 83bcc87284a1 Pull complete                                                  1.6s
   ✔ c38d8660e1fa Pull complete                                                  1.5s
   ✔ 7e1bc321f421 Pull complete                                                  2.2s
   ✔ bddd54b9c549 Pull complete                                                  3.4s
   ✔ 4eaae1e844ac Pull complete                                                  2.6s
   ✔ 5196e1e87d8f Pull complete                                                  4.1s
   ✔ 6586d096303c Pull complete                                                  3.4s
   ✔ cf55ff1c80af Pull complete                                                  4.1s
[+] Creating 3/3
 ✔ Network django2_default    Created                                            0.0s
 ✔ Volume "django2_db-data"   Created                                            0.0s
 ✔ Container mysql_container  Created                                            0.5s
[+] Running 1/1
 ✔ Container mysql_container  Started                                            0.3s
[+] Building 0.0s (0/0)  docker:default
2024/04/20 16:29:23 http2: server: error reading preface from client //./pipe/docker_e[+] Building 24.6s (10/10) FINISHED                                    docker:default
 => [django internal] load build definition from Dockerfile                      0.0s
 => => transferring dockerfile: 193B                                             0.0s
 => [django internal] load metadata for docker.io/library/python:3.10            2.5s
 => [django auth] library/python:pull token for registry-1.docker.io             0.0s
 => [django internal] load .dockerignore                                         0.0s
 => => transferring context: 2B                                                  0.0s
 => [django 1/4] FROM docker.io/library/python:3.10@sha256:f68383667ffe53e85cc  12.6s
 => => resolve docker.io/library/python:3.10@sha256:f68383667ffe53e85cc0fe4f5a6  0.0s
 => => sha256:be374d06f38273b62ddd7aa5bc3ce3f9c781fd49a1f5a5d 64.14MB / 64.14MB  3.2s
 => => sha256:f68383667ffe53e85cc0fe4f5a604d303dfa364f238ac37a4 1.65kB / 1.65kB  0.0s
 => => sha256:08678661b65f014b9034af64927048ed49d60599377ca0f9a 7.33kB / 7.33kB  0.0s
 => => sha256:609c73876867487da051ad470002217da69bb052e253871 49.56MB / 49.56MB  2.1s
 => => sha256:7247ea8d81e671d079d67f3a9909315ef4641b45db90d62 24.05MB / 24.05MB  1.9s
 => => sha256:cf5cac6010f4caa5446516c18f48369215df2e912a12ff314 2.01kB / 2.01kB  0.0s
 => => sha256:b4580645a8e50b87a19330da289a9b1540022379f2c99 211.14MB / 211.14MB  6.6s
 => => sha256:aa7e0aca67ddfc342e2afe83df590a0e228e34781e7206639 6.39MB / 6.39MB  2.6s
 => => extracting sha256:609c73876867487da051ad470002217da69bb052e2538710ade073  1.8s
 => => sha256:9190bf2a489b4146b995c56f230856134d7a99fb232f66f 17.15MB / 17.15MB  3.5s
 => => sha256:af55a6c6f99c4e6ecd2daccdd636f3a02b9cd48f9d30ad65830c9 245B / 245B  3.5s
 => => sha256:188ef716c498535fed4b6325683ae0549788532ab60ddd5fc 3.08MB / 3.08MB  3.8s
 => => extracting sha256:7247ea8d81e671d079d67f3a9909315ef4641b45db90d62a1b18e3  0.4s
 => => extracting sha256:be374d06f38273b62ddd7aa5bc3ce3f9c781fd49a1f5a5dd94a46d  2.0s
 => => extracting sha256:b4580645a8e50b87a19330da289a9b1540022379f2c99d3f0112e3  4.9s
 => => extracting sha256:aa7e0aca67ddfc342e2afe83df590a0e228e34781e7206639ddd9d  0.2s
 => => extracting sha256:9190bf2a489b4146b995c56f230856134d7a99fb232f66f44a13be  0.3s
 => => extracting sha256:af55a6c6f99c4e6ecd2daccdd636f3a02b9cd48f9d30ad65830c91  0.0s
 => => extracting sha256:188ef716c498535fed4b6325683ae0549788532ab60ddd5fca4a6c  0.2s
 => [django internal] load build context                                         0.0s
 => => transferring context: 69B                                                 0.0s
 => [django 2/4] WORKDIR /code                                                   0.9s
 => [django 3/4] ADD requirements.txt /code                                      0.1s
 => [django 4/4] RUN pip install -r requirements.txt                             8.1s
 => [django] exporting to image                                                  0.4s
 => => exporting layers                                                          0.4s
 => => writing image sha256:ad95b9a3c2e07e682d22354fd9c122a356e7905bd984eca6c54  0.0s
 => => naming to docker.io/library/django2-django                                0.0s
PS C:\Users\joeac\Desktop\docker\django2>

次のコマンドを入力して、コンテナを停止させて、削除します。

  • 「docker compose stop」コマンド
  • 「docker system prune -a」コマンド
PS C:\Users\joeac\Desktop\docker\django2> docker compose stop
[+] Stopping 1/1
 ✔ Container mysql_container  Stopped                                            1.5s
PS C:\Users\joeac\Desktop\docker\django2> docker system prune -a
WARNING! This will remove:
  - all stopped containers
  - all networks 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
Deleted Containers:
(省略)
Total reclaimed space: 647.1MB

設定ファイル(settings.py)の編集

Djangoのデフォルトの接続先のデータベースはSQLiteです。

PostgrSQLに変更します。settings.pyの「DATABASES」の内容を書き換えます。

 「docker compose run 」コマンドを実行するとローカルのカレントディレクトリに「myproject」フォルダと「manage.py」ファイルが作成されます。

「myproject」フォルダを確認します。

「settings.py」ファイルがあります。このファイルを編集していきます。

「code ./myproject/settings.py」コマンドを実行します。

PS C:\Users\joeac\Desktop\docker\django2> code ./myproject/settings.py

VSCodeが起動します。

赤枠の「DATABASES」の内容を書き換えます。

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'test-db',
        'USER': 'test-user',
        'PASSWORD': 'test-pass',
        'HOST': 'mysql',
        'PORT': '3306',
    }
}

コンテナの作成と実行

「docker compose up -d」コマンドを実行します。

このコマンドは、「compose.yaml」ファイルを配置した場所で実行する必要があります。

PS C:\Users\joeac\Desktop\docker\django2> docker compose up -d
[+] Running 12/12
 ✔ mysql Pulled                                                                 11.4s
   ✔ bd37f6d99203 Pull complete                                                  1.7s
   ✔ d2433cba0951 Pull complete                                                  0.8s
   ✔ 13702d9fe3c3 Pull complete                                                  0.8s
   ✔ 83bcc87284a1 Pull complete                                                  1.7s
   ✔ c38d8660e1fa Pull complete                                                  1.5s
   ✔ 7e1bc321f421 Pull complete                                                  2.2s
   ✔ bddd54b9c549 Pull complete                                                  3.5s
   ✔ 4eaae1e844ac Pull complete                                                  2.3s
   ✔ 5196e1e87d8f Pull complete                                                  4.2s
   ✔ 6586d096303c Pull complete                                                  8.1s
   ✔ cf55ff1c80af Pull complete                                                  3.6s
2024/04/20 16:47:51 http2: server: error reading preface from client //./pipe/docker_engine: file has already been closed
[+] Building 21.4s (10/10) FINISHED                                    docker:default
 => [django internal] load build definition from Dockerfile                      0.0s
 => => transferring dockerfile: 193B                                             0.0s
 => [django internal] load metadata for docker.io/library/python:3.10            2.5s
 => [django auth] library/python:pull token for registry-1.docker.io             0.0s
 => [django internal] load .dockerignore                                         0.0s
 => => transferring context: 2B                                                  0.0s
 => [django internal] load build context                                         0.0s
 => => transferring context: 69B                                                 0.0s
 => [django 1/4] FROM docker.io/library/python:3.10@sha256:f68383667ffe53e85cc  11.3s
 => => resolve docker.io/library/python:3.10@sha256:f68383667ffe53e85cc0fe4f5a6  0.0s
 => => sha256:f68383667ffe53e85cc0fe4f5a604d303dfa364f238ac37a4 1.65kB / 1.65kB  0.0s
 => => sha256:cf5cac6010f4caa5446516c18f48369215df2e912a12ff314 2.01kB / 2.01kB  0.0s
 => => sha256:08678661b65f014b9034af64927048ed49d60599377ca0f9a 7.33kB / 7.33kB  0.0s
 => => sha256:609c73876867487da051ad470002217da69bb052e253871 49.56MB / 49.56MB  1.9s
 => => sha256:7247ea8d81e671d079d67f3a9909315ef4641b45db90d62 24.05MB / 24.05MB  1.5s
 => => sha256:be374d06f38273b62ddd7aa5bc3ce3f9c781fd49a1f5a5d 64.14MB / 64.14MB  3.2s
 => => sha256:b4580645a8e50b87a19330da289a9b1540022379f2c99 211.14MB / 211.14MB  6.1s
 => => extracting sha256:609c73876867487da051ad470002217da69bb052e2538710ade073  1.7s
 => => sha256:aa7e0aca67ddfc342e2afe83df590a0e228e34781e7206639 6.39MB / 6.39MB  2.4s
 => => sha256:9190bf2a489b4146b995c56f230856134d7a99fb232f66f 17.15MB / 17.15MB  3.4s
 => => sha256:af55a6c6f99c4e6ecd2daccdd636f3a02b9cd48f9d30ad65830c9 245B / 245B  3.4s
 => => sha256:188ef716c498535fed4b6325683ae0549788532ab60ddd5fc 3.08MB / 3.08MB  3.7s
 => => extracting sha256:7247ea8d81e671d079d67f3a9909315ef4641b45db90d62a1b18e3  0.4s
 => => extracting sha256:be374d06f38273b62ddd7aa5bc3ce3f9c781fd49a1f5a5dd94a46d  1.9s
 => => extracting sha256:b4580645a8e50b87a19330da289a9b1540022379f2c99d3f0112e3  4.2s
 => => extracting sha256:aa7e0aca67ddfc342e2afe83df590a0e228e34781e7206639ddd9d  0.2s
 => => extracting sha256:9190bf2a489b4146b995c56f230856134d7a99fb232f66f44a13be  0.3s
 => => extracting sha256:af55a6c6f99c4e6ecd2daccdd636f3a02b9cd48f9d30ad65830c91  0.0s
 => => extracting sha256:188ef716c498535fed4b6325683ae0549788532ab60ddd5fca4a6c  0.2s
 => [django 2/4] WORKDIR /code                                                   0.7s
 => [django 3/4] ADD requirements.txt /code                                      0.0s
 => [django 4/4] RUN pip install -r requirements.txt                             6.4s
 => [django] exporting to image                                                  0.4s
 => => exporting layers                                                          0.4s
 => => writing image sha256:c0af48657d0fc16fcd9b43ace1e26e37a6f9608279760d519b0  0.0s
 => => naming to docker.io/library/django2-django                                0.0s
[+] Running 3/3
 ✔ Network django2_default     Created                                           0.0s
 ✔ Container mysql_container   Started                                           0.1s
 ✔ Container django_container  Started                                           0.0s
PS C:\Users\joeac\Desktop\docker\django2>

Djangoコンテナへの接続

Djangoコンテナに接続します。

・URLに「localhost:8000」と入力します。

DjangoのTOPページが表示されます。

関連コンテンツ