データベースコンテナの作成

MySQLデータベースコンテナを作成します。

ディレクトリとファイルを作成します。

mkdir -p docker/db
mkdir -p docker/db/conf.d
mkdir -p docker/db/data
touch docker/db/conf.d/my.conf
touch docker/.env.dev
docker/db/conf.d/my.conf
 1[mysqld]
 2character_set_server=utf8mb4
 3collation_server=utf8mb4_bin
 4default_time_zone=SYSTEM
 5log_timestamps=SYSTEM
 6default_authentication_plugin=caching_sha2_password
 7[mysql]
 8default_character_set=utf8mb4
 9[client]
10default_character_set=utf8mb4
docker/.env.dev
1TZ='Asia/Tokyo'
2MYSQL_DATABASE=mysite
3MYSQL_USER=django
4MYSQL_ROOT_PASSWORD=root
5MYSQL_PASSWORD=django
6SECRET_KEY=django
7DEBUG=True

docker-compose.dev.yml に11-20行目を追加します。

docker-compose.dev.yml
 1version: '3.9'
 2services:
 3  app:
 4    container_name: django
 5    build:
 6      dockerfile: ./docker/app/Dockerfile
 7    ports:
 8      - 8000:8000
 9    env_file: ./docker/.env.dev
10    command: poetry run python manage.py runserver 0.0.0.0:8000
11  db:
12    container_name: mysql
13    image: mysql:8
14    volumes:
15      - ./docker/db/data:/var/lib/mysql
16      - ./docker/db/conf.d:/etc/mysql/conf.d
17    env_file: ./docker/.env.dev
18    ports:
19      - "3306:3306"
20    privileged: true

データベースのコンテナを起動します。

docker compose -f docker-compose.dev.yml up -d db

コンテナが起動していることを確認します。

docker compose -f docker-compose.dev.yml ps
NAME                IMAGE                      COMMAND                  SERVICE             CREATED             STATUS                   PORTS
mysql               mysql:8                    "docker-entrypoint.s…"   db                  6 minutes ago       Up 6 minutes (healthy)   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp

ログにエラーがないことを確認します。

docker compose -f docker-compose.dev.yml logs

MySQLのデータベースに接続できることを確認します。

docker compose -f docker-compose.dev.yml exec db mysqladmin ping -h 127.0.0.1 -uroot -p

コンテナを終了します。

docker compose -f docker-compose.dev.yml down