このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。
【Docker入門】Djangoコンテナ(MySQL)①
Docker Composeコマンドを使ったDjangoコンテナの構築例を紹介します。データベースにはMySQLを使用します。
「Djangoコンテナ(MySQL)」は次の2部に分けて解説していきます。
ここでは、主にコンテナの作成に必要な「Dockerfile」と「compose.yaml」などのファイルを作成していきます。
Djangoとは
まず、はじめにDjangoについて解説します。
Djangoとは、プログラミング言語の一種であるPythonを使って記述されたWebアプリケーションフレームワークです。 フルスタックのため品質の高いWebアプリケーションを簡単に、かつシンプルなコードで作れることで、Pythonフレームワークの中でも最も人気があります。
DjangoはMTV(Model-Template-View)アーキテクチャを採用しており、データベースのモデル(Model)、ユーザーインターフェースのテンプレート(Template)、ビジネスロジックのビュー(View)を分離しています。これにより、アプリケーションの各部分を独立して開発し、保守することができます。
URL:https://www.djangoproject.com/
MySQLとは
MySQLは、オープンソースのリレーショナルデータベース管理システム(RDBMS)であり、世界中の多くのウェブサイトやアプリケーションで使用されています。1995年にMichael WideniusとDavid Axmarkによって開発され、その後MySQL AB(現在はOracle Corporationが所有)によってサポートされています。
Django コンテナの作成
「compose.yaml」を作成して、DjangoとMySQLコンテナを作成します。
Djangoイメージを利用したいところですが、適当なイメージがDocker Hub上にありません。厳密にいえばあるのですが、結構古いDjangoイメージです。
そこで、オリジナルイメージを作成することにします。Djangoは、PythonでWebアプリケーションを作るためのフレームワークであるため、Pythonイメージをベースイメージを使うことにします。
Pythonイメージだけでは、Djangoは実行できません。Pythonイメージに以下をインストールしてDjangoイメージを作成します。
①Djangoのインストール
「pip install Django」コマンド
②MySQLに接続するためのライブラリのインストール
「pip install mysqlclient」コマンド
オリジナルイメージを使用するにはDockerfileを定義する必要があります。
Dockerfileとcompose.yamlファイルを作成して、Djangoイメージを作成していきます。
不要なDockerオブジェクトの削除
まず、不要なDockerオブジェクトをすべて削除しておきます。
以下のコマンドを実行します。
「docker system prune -a」コマンドを実行します。
Are you sure you want to continue? [y/N] の質問には「y」と入力します。
PS C:\Users\joeac> 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:
(略)
・「docker system prune -a」コマンドで削除されなかったDockerオブジェクトは、個別に削除しておきます。
環境によって削除されずに残っているDockerオブジェクトは異なります。
ディレクトリの作成と移動
Docker Composeでコンテナを作成するには、「compose.yaml」ファイルが必要になります。
デフォルトでは、カレントディレクトリにある「compose.yaml」ファイルが読み込まれるため、作業ディレクトリに移動しておきます。
「cd desktop/docker」コマンドを実行します。
PS C:\Users\joeac> cd desktop/docker
PS C:\Users\joeac\Desktop\docker>
「compose.yaml」ファイルを保存する「django2」ディレクトリを作成して、作成したディレクトリに移動します。
次のコマンドを実行します。
- 「mkdir django2」コマンド
- 「cd django2」コマンド
PS C:\Users\joeac\Desktop\docker> mkdir django2
Directory: C:\Users\joeac\Desktop\docker
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 2024/04/20 15:53 django2
PS C:\Users\joeac\Desktop\docker> cd django2
PS C:\Users\joeac\Desktop\docker\django2>
「Dockerfile」の作成
VSCodeで「Dockerfile」ファイルを作成します。
「code Dockerfile」コマンドを実行します。
PS C:\Users\joeac\Desktop\docker\django2> code Dockerfile
VSCodeが起動します。
「Dockerfile」ファイルを以下のように編集して保存します。
FROM python:3.10
WORKDIR /code
ADD requirements.txt /code
RUN pip install -r requirements.txt
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
定義内容の解説
「Dockerfile」ファイルの定義を解説します。
項目 | 説明 |
---|---|
FROM python:3.10 | Python 3.10の公式Dockerイメージをベースにします。 |
WORKDIR /code | 作業ディレクトリを /code に設定します。 |
ADD requirements.txt /code | ローカルの requirements.txt ファイルをコンテナ内の /code ディレクトリに追加します。 |
RUN pip install -r requirements.txt | requirements.txt ファイルに記載されたPythonパッケージをインストールします。 |
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"] | コンテナが起動した際に実行されるデフォルトのコマンドを指定します。 |
このDockerfileは、Python 3.10のイメージをベースにして、Djangoアプリケーションを実行するための設定を行っています。まず、作業ディレクトリを 「/code
」 に設定し、ローカルの「 requirements.txt
」 ファイルをコンテナ内に追加します。次に、「requirements.txt
」 ファイルに記載されたPythonパッケージをインストールします。最後に、コンテナが起動した際にDjangoアプリケーションを起動するためのデフォルトのコマンドを指定しています。
インストールしたいパッケージやライブラリが複数ある場合には、「requirements.txt」にまとめておくと便利です。複数のパッケージやライブラリを一括してインストールできます。
ただし、コンテナ内に追加しておく必要があります。
この機能は、Dockerの機能ではなくPythonの機能です。
「requirements.txt」ファイルの作成
VSCodeで「requirements.txt」ファイルを作成します。
「code requirements.txt」コマンドを実行します。
PS C:\Users\joeac\Desktop\docker\django2> code requirements.txt
VSCodeが起動します。
・「requirements.txt」ファイルを以下のように編集して保存します。
Django==4.0.2
mysqlclient
「compose.yaml」ファイルの作成
VSCodeで「compose.yaml」ファイルを作成します。
「code compose.yaml」コマンドを実行します。
PS C:\Users\joeac\Desktop\docker\django1> code compose.yaml
VSCodeが起動します。
「compose.yaml」ファイルを以下のように編集して保存します。
services:
mysql:
image: mysql:8.0
container_name: mysql_container
environment:
MYSQL_ROOT_PASSWORD: root-pass
MYSQL_DATABASE: test-db
MYSQL_USER: test-user
MYSQL_PASSWORD: test-pass
volumes:
- db-data:/var/lib/mysql
django:
build: .
container_name: django_container
depends_on:
- mysql
ports:
- "8000:8000"
volumes:
- ./:/code
volumes:
db-data:
定義内容の解説
「compose.yaml」ファイルの定義を解説します。
サービス名 | 内容 |
---|---|
mysql | - MySQLデータベースのコンテナを定義します。 |
- イメージは mysql:8.0 を使用します。 | |
- コンテナの名前は mysql_container に設定されます。 | |
- 環境変数はMySQLのルートパスワード、データベース名、ユーザー名、およびパスワードが設定されます。 | |
- データベースデータは db-data という名前の永続ボリュームにマウントされます。 | |
django | - Djangoアプリケーションのコンテナを定義します。 |
- ビルドはカレントディレクトリ「. 」 を使用します。 | |
- コンテナの名前は django_container に設定されます。 | |
- MySQLサービス (mysql ) に依存します。 | |
- ホストのポート 8000 をコンテナのポート 8000 にマッピングします。 | |
- カレントディレクトリが /code にマウントされます。 | |
ボリューム | - db-data という名前の永続ボリュームが定義されます。 |
この 「docker compose.yml
」 ファイルは、MySQLとDjangoの2つのサービスを定義し、それぞれのサービスに関する詳細な設定を提供しています。MySQLサービスはMySQL 8.0の公式イメージを使用し、データは永続ボリュームに保存されます。Djangoサービスは、カレントディレクトリ内のDjangoアプリケーションをビルドし、ホストのポート8000を通じてアクセスできるようにします。
この続きは「Djangoコンテナ(MySQL)②」で、Djangoプロジェクトを作成して、Djangoコンテナを作成していきます。