0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

mac docker c# aspの環境を作成する

Posted at

mac docker c# aspの環境を作成する

table of contents

  1. dotnet cliを利用できるdocker環境を作成する
  2. dotnet cli を利用して、applicationを準備する
  3. Host OSのブラウザからアクセスする

1. doctnet cliを利用できるdocker環境を作成する

microsoft/dotnetで複数のimageは、cliを利用を想定しているので、imageは、.NET SDKを利用する。

1-1. compose.yaml と dockerfileを作成する

現状のdirectoryは、何もないので compose.yamldockerfile を利用する。

$ mkdir project
$ cd project
$ touch compose.yaml dockerfile
compose.yaml
services:
  api_container:
    container_name: api_container
    build:
      context: .
      dockerfile: dockerfile
    tty: true
    restart: always
    volumes:
      - .:/app
    ports:
      - 8080:5291
FROM mcr.microsoft.com/dotnet/sdk:8.0

WORKDIR /app

1-2. dockerを立ち上げる

% docker compose up -d
[+] Building 0.0s (0/0)                                                                        docker:desktop-linux
[+] Running 1/0
 ✔ Container XXX  Running            0.0s

execも利用するので、Makefile を利用して作業を単純化する。

% touch Makefile
compose := @docker compose -f compose.yaml
api_container_id = $(shell docker ps --format json --filter name=api_container | jq -r '.ID')

.PHONY: local.up

local.up:
	$(compose) up -d

local.up.build:
	$(compose) up -d --build

local.api.exec:
	@docker exec -it $(api_container_id) bash
% make local.up
% make local.api.exec

現状のdirectory構成は以下。

% tree . -L 2
.
├── Makefile
├── README.md
├── compose.yaml
└── dockerfile

2. dotnet cli を利用して、applicationを準備する

1 で作成した環境を利用して、applicationを作成します。

% make local.api.exec
# dotnet --verson
8.0.406

dotnet cliを利用してアプリケーションを立ち上げる。

# dotnet new webapi -o MyWebApi

上記を実施すると、dotnetのsample applicationが作成されます。

# tree . -L 2
.
├── Makefile
├── README.md
├── WebApi
│   ├── Makefile
│   ├── Program.cs
│   ├── Properties
│   ├── WebApi.csproj
│   ├── WebApi.http
│   ├── appsettings.Development.json
│   ├── appsettings.json
│   ├── bin
│   └── obj
├── compose.yaml
└── dockerfile

3. Host OSのブラウザからアクセスする

2で作成した環境を立ち上げて、HostOSからアクセスする。
docker container内に入り、debug runする。

# cd WebApi
# dotnet watch
dotnet watch
dotnet watch ⌚ Polling file watcher is enabled
dotnet watch 🔥 Hot reload enabled. For a list of supported edits, see https://aka.ms/dotnet/hot-reload.
  💡 Press "Ctrl + R" to restart.
dotnet watch 🔧 Building...
  Determining projects to restore...
  All projects are up-to-date for restore.
  WebApi -> /app/WebApi/bin/Debug/net8.0/WebApi.dll
dotnet watch 🚀 Started
warn: Microsoft.AspNetCore.Hosting.Diagnostics[15]
      Overriding HTTP_PORTS '8080' and HTTPS_PORTS ''. Binding to values defined by URLS instead 'http://localhost:5291'.
info: Microsoft.Hosting.Lifetime[14]
      Now listening on: http://localhost:5291
dotnet watch 🌐 Unable to launch the browser. Navigate to http://localhost:5291
info: Microsoft.Hosting.Lifetime[0]
      Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
      Hosting environment: Development
info: Microsoft.Hosting.Lifetime[0]
      Content root path: /app/WebApi

ホストOSから、アクセスしてみる。

localhost:8080/weatherforecastにアクセスするとできない。
hostが0.0.0.0向けになっていないためなので、hostとportをとりあえず記載する。

WebApi/Program.cs
using System.Net; // 追記

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

// ここから追記
// host and port
builder.WebHost.UseKestrel(options =>
{
    options.Listen(IPAddress.Parse("0.0.0.0"), 5291);
});
// ここまで追記

再度debug run を実施する

# dotnet watch

localhost:8080/weatherforecast

スクリーンショット 2025-03-09 17.46.18.png

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?