このページで解説している内容は、以下の 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 run | Docker Composeを使用してコマンドを実行するためのコマンド。 |
django | 実行するサービスの名前を指定します。 |
django-admin | Djangoのプロジェクト管理ツールであるdjango-adminを実行します。 |
startproject | 新しいDjangoプロジェクトを開始します。 |
myproject | 新しいDjangoプロジェクトの名前を指定します。 |
. | プロジェクトを作成するディレクトリを指定します。デフォルトでは現在のディレクトリに作成されます。 |
このコマンドは、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ページが表示されます。