.NET 開発基盤部会 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。

目次

概要

生成AIを活用しスクラッチでコンテナ化する際の手順をメモ

詳細

Dockerファイルの作成

プロジェクト・ルートに Dockerfile を作成

ソース

dockerfile# ビルドステージ
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /src

# プロジェクト・ファイルをコピーして依存関係を復元
COPY ["MyApp.csproj", "."]
RUN dotnet restore "./MyApp.csproj"

# ソースコードをコピーしてビルド
COPY . .
RUN dotnet build "MyApp.csproj" -c Release -o /app/build

# 発行ステージ
FROM build AS publish
RUN dotnet publish "MyApp.csproj" -c Release -o /app/publish /p:UseAppHost=false

# 実行ステージ(軽量イメージ)
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS final
WORKDIR /app
EXPOSE 8080
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "MyApp.dll"]

解説

※ マルチステージ・ビルドという手法を使っている。

※ COPYコマンドのポイント

.dockerignoreの作成

ソース

**/bin/
**/obj/
**/out/
.git/
.vs/
*.user

解説

不要なファイルをビルドコンテキストから除外。

Dockerコマンドで実行

準備

実行

Dockerコンポーズ

プロジェクト・ルートに docker-compose.yml を作成

例1

最も簡潔な例

version: '3.8'

services:
  ap:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - "8080:8080"
    environment:
      - ASPNETCORE_ENVIRONMENT=Production
      - ConnectionStrings__Default=Server=db;Database=MyDb;...
    depends_on:
      - db

  db:
    image: mcr.microsoft.com/mssql/server:2022-latest
    environment:
      - SA_PASSWORD=YourPassword123!
      - ACCEPT_EULA=Y
    ports:
      - "1433:1433"

例2

2つのファイルを使用する場合

※ ネットワークはコマンドで作成してファイル中は全て「external: true」にすると起動順は任意になる。

docker network create --driver bridge shared-net

ホストビルド方式

ホストビルド方式では、コンテナ内部ではなく、ホストOS(WindowsやLinux上)でビルドした生成物をコンテナに詰める方式。

Dockerファイル

# 実行ステージ(軽量イメージのみ)
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS final
WORKDIR /app
EXPOSE 8080
COPY ./publish .
ENTRYPOINT ["dotnet", "MyApp.dll"]

ビルド&イメージ作成の手順


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS