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

Djangoコンテナ(PostgrSQL)②

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

「Djangoコンテナ(PostgrSQL)」は次の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\django1> docker compose run django django-admin startproject myproject .
[+] Running 14/14
 ✔ postgres 13 layers [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿]      0B/0B      Pulled                                                       9.1s
   ✔ 214ca5fb9032 Pull complete                                                                                    1.4s
   ✔ e6930973d723 Pull complete                                                                                    0.9s
   ✔ aea7c534f4e1 Pull complete                                                                                    0.7s
   ✔ d0ab8814f736 Pull complete                                                                                    1.4s
   ✔ 648cc138980a Pull complete                                                                                    1.7s
   ✔ 7804b894301c Pull complete                                                                                    2.1s
   ✔ cfce56252c3f Pull complete                                                                                    2.1s
   ✔ 8cce7305e3b6 Pull complete                                                                                    2.3s
   ✔ 888f20eb5ec8 Pull complete                                                                                    4.1s
   ✔ c64f3c3a5ce3 Pull complete                                                                                    2.8s
   ✔ 35a23f8d0819 Pull complete                                                                                    3.0s
   ✔ ff967638fa85 Pull complete                                                                                    3.4s
   ✔ 95df4ec75c64 Pull complete                                                                                    3.7s
[+] Creating 2/2
 ✔ Network django1_default       Created                                                                           0.0s
 ✔ Container postgres_container  Created                                                                           0.3s
[+] Running 1/1
 ✔ Container postgres_container  Started                                                                           0.3s
2024/04/20 03:32:36 http2: server: error reading preface from client //./pipe/docker_engine: file has already been closed
2024/04/20 03:32:36 http2: server: error reading preface from client //./pipe/docker_engine: file has already been closed
[+] Building 17.8s (10/10) FINISHED                                                                      docker:default
 => [django internal] load build definition from Dockerfile                                                        0.0s
 => => transferring dockerfile: 194B                                                                               0.0s
 => [django internal] load metadata for docker.io/library/python:3.10                                              2.3s
 => [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:f68383667ffe53e85cc0fe4f5a604d303dfa364f238ac37a46759  10.8s
 => => resolve docker.io/library/python:3.10@sha256:f68383667ffe53e85cc0fe4f5a604d303dfa364f238ac37a4675980a2b93b  0.0s
 => => sha256:cf5cac6010f4caa5446516c18f48369215df2e912a12ff314ceb9a1d95a5fd60 2.01kB / 2.01kB                     0.0s
 => => sha256:7247ea8d81e671d079d67f3a9909315ef4641b45db90d62a1b18e3430c1937d4 24.05MB / 24.05MB                   1.5s
 => => sha256:f68383667ffe53e85cc0fe4f5a604d303dfa364f238ac37a4675980a2b93b1c5 1.65kB / 1.65kB                     0.0s
 => => sha256:08678661b65f014b9034af64927048ed49d60599377ca0f9a12afce7e232d40e 7.33kB / 7.33kB                     0.0s
 => => sha256:609c73876867487da051ad470002217da69bb052e2538710ade0730d893ff51f 49.56MB / 49.56MB                   1.8s
 => => sha256:be374d06f38273b62ddd7aa5bc3ce3f9c781fd49a1f5a5dd94a46d2986920d7a 64.14MB / 64.14MB                   3.0s
 => => sha256:b4580645a8e50b87a19330da289a9b1540022379f2c99d3f0112e3c5c4a8d051 211.14MB / 211.14MB                 6.0s
 => => extracting sha256:609c73876867487da051ad470002217da69bb052e2538710ade0730d893ff51f                          1.5s
 => => sha256:aa7e0aca67ddfc342e2afe83df590a0e228e34781e7206639ddd9da72a71a0af 6.39MB / 6.39MB                     2.3s
 => => sha256:9190bf2a489b4146b995c56f230856134d7a99fb232f66f44a13be9fb580362b 17.15MB / 17.15MB                   3.2s
 => => sha256:af55a6c6f99c4e6ecd2daccdd636f3a02b9cd48f9d30ad65830c91bcf012b3d5 245B / 245B                         3.2s
 => => sha256:188ef716c498535fed4b6325683ae0549788532ab60ddd5fca4a6ca7d021ce8b 3.08MB / 3.08MB                     3.5s
 => => extracting sha256:7247ea8d81e671d079d67f3a9909315ef4641b45db90d62a1b18e3430c1937d4                          0.4s
 => => extracting sha256:be374d06f38273b62ddd7aa5bc3ce3f9c781fd49a1f5a5dd94a46d2986920d7a                          1.8s
 => => extracting sha256:b4580645a8e50b87a19330da289a9b1540022379f2c99d3f0112e3c5c4a8d051                          3.9s
 => => extracting sha256:aa7e0aca67ddfc342e2afe83df590a0e228e34781e7206639ddd9da72a71a0af                          0.2s
 => => extracting sha256:9190bf2a489b4146b995c56f230856134d7a99fb232f66f44a13be9fb580362b                          0.3s
 => => extracting sha256:af55a6c6f99c4e6ecd2daccdd636f3a02b9cd48f9d30ad65830c91bcf012b3d5                          0.0s
 => => extracting sha256:188ef716c498535fed4b6325683ae0549788532ab60ddd5fca4a6ca7d021ce8b                          0.2s
 => [django internal] load build context                                                                           0.0s
 => => transferring context: 73B                                                                                   0.0s
 => [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                                                               3.6s
 => [django] exporting to image                                                                                    0.4s
 => => exporting layers                                                                                            0.4s
 => => writing image sha256:e06f3742187b53a7eccc90a894271bc564e843ef064475aced51fa9f5029bf87                       0.0s
 => => naming to docker.io/library/django1-django
・次のコマンドを入力して、コンテナを停止させて、削除します。
  • 「docker compose stop」コマンド
  • 「docker system prune -a」コマンド
PS C:\Users\joeac\Desktop\docker\django1> docker compose stop
[+] Stopping 1/1
 ✔ Container postgres_container  Stopped                                                                           0.3s
PS C:\Users\joeac\Desktop\docker\django1> 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: 429MB

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

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

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

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

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

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

・「code ./myproject/settings.py」コマンドを実行します。
PS C:\Users\joeac\Desktop\docker\django1> code ./myproject/settings.py

VSCodeが起動します。

・赤枠の「DATABASES」の内容を書き換えます。
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'test-db',
        'USER': 'test-user',
        'PASSWORD': 'test-pass',
        'HOST': 'postgres',
        'PORT': 5432,
    }
}

コンテナの作成と実行

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

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

PS C:\Users\joeac\Desktop\docker\django1> docker compose up -d
[+] Running 14/14
 ✔ postgres 13 layers [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿]      0B/0B      Pulled                                                       9.3s
   ✔ 214ca5fb9032 Pull complete                                                                                    1.3s
   ✔ e6930973d723 Pull complete                                                                                    0.9s
   ✔ aea7c534f4e1 Pull complete                                                                                    0.7s
   ✔ d0ab8814f736 Pull complete                                                                                    1.4s
   ✔ 648cc138980a Pull complete                                                                                    1.7s
   ✔ 7804b894301c Pull complete                                                                                    2.1s
   ✔ cfce56252c3f Pull complete                                                                                    2.0s
   ✔ 8cce7305e3b6 Pull complete                                                                                    2.4s
   ✔ 888f20eb5ec8 Pull complete                                                                                    4.4s
   ✔ c64f3c3a5ce3 Pull complete                                                                                    2.7s
   ✔ 35a23f8d0819 Pull complete                                                                                    3.1s
   ✔ ff967638fa85 Pull complete                                                                                    3.4s
   ✔ 95df4ec75c64 Pull complete                                                                                    3.7s
2024/04/20 04:04:10 http2: server: error reading preface from client //./pipe/docker_engine: file has already been closed
2024/04/20 04:04:10 http2: server: error reading preface from client //./pipe/docker_engine: file has already been closed
[+] Building 18.0s (10/10) FINISHED                                                                      docker:default
 => [django internal] load build definition from Dockerfile                                                        0.0s
 => => transferring dockerfile: 194B                                                                               0.0s
 => [django internal] load metadata for docker.io/library/python:3.10                                              2.3s
 => [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: 73B                                                                                   0.0s
 => [django 1/4] FROM docker.io/library/python:3.10@sha256:f68383667ffe53e85cc0fe4f5a604d303dfa364f238ac37a46759  10.9s
 => => resolve docker.io/library/python:3.10@sha256:f68383667ffe53e85cc0fe4f5a604d303dfa364f238ac37a4675980a2b93b  0.0s
 => => sha256:cf5cac6010f4caa5446516c18f48369215df2e912a12ff314ceb9a1d95a5fd60 2.01kB / 2.01kB                     0.0s
 => => sha256:7247ea8d81e671d079d67f3a9909315ef4641b45db90d62a1b18e3430c1937d4 24.05MB / 24.05MB                   1.3s
 => => sha256:f68383667ffe53e85cc0fe4f5a604d303dfa364f238ac37a4675980a2b93b1c5 1.65kB / 1.65kB                     0.0s
 => => sha256:08678661b65f014b9034af64927048ed49d60599377ca0f9a12afce7e232d40e 7.33kB / 7.33kB                     0.0s
 => => sha256:609c73876867487da051ad470002217da69bb052e2538710ade0730d893ff51f 49.56MB / 49.56MB                   1.7s
 => => sha256:be374d06f38273b62ddd7aa5bc3ce3f9c781fd49a1f5a5dd94a46d2986920d7a 64.14MB / 64.14MB                   3.0s
 => => sha256:b4580645a8e50b87a19330da289a9b1540022379f2c99d3f0112e3c5c4a8d051 211.14MB / 211.14MB                 6.1s
 => => sha256:aa7e0aca67ddfc342e2afe83df590a0e228e34781e7206639ddd9da72a71a0af 6.39MB / 6.39MB                     2.3s
 => => extracting sha256:609c73876867487da051ad470002217da69bb052e2538710ade0730d893ff51f                          1.5s
 => => sha256:9190bf2a489b4146b995c56f230856134d7a99fb232f66f44a13be9fb580362b 17.15MB / 17.15MB                   3.2s
 => => sha256:af55a6c6f99c4e6ecd2daccdd636f3a02b9cd48f9d30ad65830c91bcf012b3d5 245B / 245B                         3.2s
 => => sha256:188ef716c498535fed4b6325683ae0549788532ab60ddd5fca4a6ca7d021ce8b 3.08MB / 3.08MB                     3.5s
 => => extracting sha256:7247ea8d81e671d079d67f3a9909315ef4641b45db90d62a1b18e3430c1937d4                          0.4s
 => => extracting sha256:be374d06f38273b62ddd7aa5bc3ce3f9c781fd49a1f5a5dd94a46d2986920d7a                          1.8s
 => => extracting sha256:b4580645a8e50b87a19330da289a9b1540022379f2c99d3f0112e3c5c4a8d051                          3.9s
 => => extracting sha256:aa7e0aca67ddfc342e2afe83df590a0e228e34781e7206639ddd9da72a71a0af                          0.2s
 => => extracting sha256:9190bf2a489b4146b995c56f230856134d7a99fb232f66f44a13be9fb580362b                          0.3s
 => => extracting sha256:af55a6c6f99c4e6ecd2daccdd636f3a02b9cd48f9d30ad65830c91bcf012b3d5                          0.0s
 => => extracting sha256:188ef716c498535fed4b6325683ae0549788532ab60ddd5fca4a6ca7d021ce8b                          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                                                               3.6s
 => [django] exporting to image                                                                                    0.4s
 => => exporting layers                                                                                            0.4s
 => => writing image sha256:5c733cca3d247458688b9331d0afda35696a736e1d2fc04ff4fb3aac0ff1f650                       0.0s
 => => naming to docker.io/library/django1-django                                                                  0.0s
[+] Running 2/3
 - Network django1_default       Created                                                                           0.5s
 ✔ Container postgres_container  Started                                                                           0.3s
 ✔ Container django_container    Started

Djangoコンテナへの接続

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

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

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

関連コンテンツ