【C#】DockerでC#.NET+MySQLのコンソールアプリ環境を構築してみる

目次
開発環境
- OS:Windows11
- Docker Desktopインストール済み
- VSCodeインストール済み
アプリケーションの定義ファイル(YAML)を作成する
下記のコマンドを実行し、YAMLファイルを作成します。
type nul > docker-compose.yml
エラーメッセージが表示されますが、YAMLファイルが作成されていれば問題ありません。
下記の内容でYAMLファイルを編集します。
version: '3'
services:
app:
build: ./infra/c#
ports:
- 5000:5000
tty: true
volumes:
- ./src:/src
db:
build: ./infra/mysql
volumes:
- db-store:/var/lib/mysql
ports:
- "3306:3306"
volumes:
db-store:

アプリケーションコンテナ(C#)を作成する
c#フォルダを作成する
mkdir -p infra/c#

Dockerファイルを作成する
下記のコマンドを実行し、Dockerファイルを作成します。
type nul > infra/c#/Dockerfile
エラーメッセージが表示されますが、Dockerファイルが作成されていれば問題ありません。
下記の内容でDockerファイルを編集します。
FROM mcr.microsoft.com/dotnet/core/sdk:3.1
RUN mkdir /src
WORKDIR /src

DBコンテナ(MySQL)を作成する
mysqlフォルダを作成する
下記のコマンドを実行して、mysqlフォルダを作成します。
mkdir -p infra/mysql

Dockerファイルを作成する
下記のコマンドを実行して、Dockerファイルを作成します。
type nul > infra/mysql/Dockerfile
エラーメッセージが表示されますが、Dockerファイルが作成されていれば問題ありません。
下記の内容でDockerファイルを編集します。
FROM mysql/mysql-server:8.0
ENV MYSQL_DATABASE=test_db \
MYSQL_USER=user \
MYSQL_PASSWORD=pass \
MYSQL_ROOT_PASSWORD=pass \
TZ=Asia/Tokyo
COPY ./my.cnf /etc/my.cnf
RUN chmod 644 /etc/my.cnf

confファイルを作成する
下記のコマンドを実行して、confファイルを作成します。
type nul > infra/mysql/my.cnf
エラーメッセージが表示されますが、confファイルが作成されていれば問題ありません。
下記の内容でconfファイルを編集します。
[mysqld]
# default
skip-host-cache
skip-name-resolve
datadir = /var/lib/mysql
socket = /var/lib/mysql/mysql.sock
secure-file-priv = /var/lib/mysql-files
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
# character set / collation
character_set_server = utf8mb4
collation_server = utf8mb4_ja_0900_as_cs_ks
# timezone
default-time-zone = SYSTEM
log_timestamps = SYSTEM
# Error Log
log-error = mysql-error.log
# Slow Query Log
slow_query_log = 1
slow_query_log_file = mysql-slow.log
long_query_time = 1.0
log_queries_not_using_indexes = 0
# General Log
general_log = 1
general_log_file = mysql-general.log
[mysql]
default-character-set = utf8mb4
[client]
default-character-set = utf8mb4

コンテナをビルド・立ち上げ
下記のコマンドを実行して、コンテナをビルド・立ち上げます。
docker compose up -d --build

下記の3つのコンテナがStartedになっていればOKです。
- db
- app
Dockerの画面で2つのコンテナがRunningになっていればOKです。


プロジェクトを作成する
下記のコマンドを実行して、appコンテナに入る。
docker compose exec app bash

下記のコマンドを実行して、.NETのプロジェクトを作成します。
dotnet new console
成功するとsrcフォルダにいくつかのファイルとフォルダが作成されます。

コンソールアプリを実行する
下記のコマンドを実行してアプリを実行します。
dotnet run
デフォルトでは「Hello World!」と表示されるようになっています。

以上になります。
お読み頂き、ありがとうございました。