DockerでC#(.Net)+MySQLの環境を構築してみる(Windows)
目次
開発環境
- OS:Windows11
- Docker Desktopインストール済み
- VSCodeインストール済み
アプリケーションの定義ファイル(YAML)作成
type nul > docker-compose.yml下記の内容で編集。
services:
app:
build:
context: .
dockerfile: Dockerfile
volumes:
- ./app:/app
working_dir: /app
command: dotnet watch run --urls=http://0.0.0.0:5000
ports:
- "5000:5000"
depends_on:
db:
condition: service_healthy
db:
image: mysql:8.4
environment:
MYSQL_ROOT_PASSWORD: odaneko
MYSQL_DATABASE: odaneko
MYSQL_USER: odaneko
MYSQL_PASSWORD: odaneko
ports:
- "3306:3306"
volumes:
- mysql_data:/var/lib/mysql
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-podaneko"]
interval: 10s
timeout: 5s
retries: 10
volumes:
mysql_data:
Dockerファイル作成
type nul > Dockerfile下記の内容で編集。
FROM mcr.microsoft.com/dotnet/sdk:8.0
WORKDIR /app
CMD ["tail", "-f", "/dev/null"]
コンテナビルド・起動
docker compose up -d --buildプロジェクト作成
dotnet new webapi -n app
パッケージインストール
ディレクトリ移動。
cd appパッケージインストール。
dotnet add package Dapper
dotnet add package MySqlConnectorディレクトリを戻る。
cd ..
サンプルAPI作成
app\Program.csを下記の内容で編集。
APIを/db-testの1つ作成します。
using Dapper;
using MySqlConnector;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
app.UseSwagger();
app.UseSwaggerUI();
app.MapGet("/db-test", async () =>
{
var connectionString = "Server=db;Port=3306;Database=odaneko;User=odaneko;Password=odaneko;";
await using var connection = new MySqlConnector.MySqlConnection(connectionString);
var result = await connection.QueryAsync("SELECT 1;");
return result;
})
.WithName("db-test")
.WithOpenApi();
app.Run();コンテナ再起動
コンテナ停止。
docker compose downコンテナ起動。
docker compose up -dSwaggerでAPIを実行
下記を開く。
db-testを実行して1が返ってきたらOK。

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

