ASP.NET(.NET Core)の開発環境をDockerで構築する
.NET Core
の開発環境をDocker
で構築する手順を紹介します。
Linux
の開発マシンに.NET Core
の開発環境を構築します。
細かい設定は省略して最低限の開発環境を構築します。
Docker
とDocker Compose
はインストール済みとします。
DockerFileの作成
以下のDockerFile
を作成します。
ベースイメージはmcr.microsoft.com/dotnet/core/sdk:3.1
を使用しています。
Node.js
のインストールは必要ない場合は省略可能です。
DockerFile
FROM mcr.microsoft.com/dotnet/core/sdk:3.1
# install nodejs
RUN curl -sL https://deb.nodesource.com/setup_12.x | bash - \
&& apt-get install -y nodejs
# source
RUN mkdir /code
WORKDIR /code
# host user
ARG UID=1000
ARG GID=1000
RUN useradd -m -u ${UID} docker
USER ${UID}:${GID}
docker-composeの作成
コンテナを起動するためのdocker-compose.yml
ファイルを作成します。
docker-compose.yml
version: '3'
services:
app:
build: ./docker
tty: true
volumes:
- ./app:/code
ports
の設定はしなくても、なぜかコンテナ内のWEBページにアクセスできました。
コンテナが内部的に設定してくれているのか、原因はよくわかりません。。
VSCodeで開くための設定
今回作成する開発環境をVSCode
で開くために、devcontainer.json
ファイルを作成します。
設定方法はDocker コンテナをVSCodeで開いて開発環境を構築するで詳しく紹介しています。
必要な拡張機能をインストールするようにここで記載しておきます。
devcontainer.json
{
"name": "dotnet container",
"dockerComposeFile": [
"../docker-compose.yml"
],
"service": "app",
"remoteUser": "docker",
"workspaceFolder": "/code",
"extensions": [
"ms-dotnettools.csharp",
"msjsdiag.debugger-for-chrome",
"editorconfig.editorconfig"
],
"shutdownAction": "none"
}
以下のフォルダ構成になります。appフォルダはソースは配置するメインのフォルダになるのでコンテナを起動する前に作成しておいてください。
- .devcontainer
- devcontainer.json
- app
- docker
- DockerFile
- docker-compose.yml
VSCodeでコンテナを開く
VSCodeでコンテナを起動します。
VSCodeのターミナルでdotnet --version
のコマンドを実行して、dotnet
がインストールされていることを確認します。
$ dotnet --version
3.1.402
プロジェクトの作成
以下のコマンドでプロジェクトを作成します。
$ dotnet new webapi
MVC
のプロジェクトの場合は以下のコマンドになります。
$ dotnet new mvc
デバッグ実行
F5でデバッグ実行を開始します。
初回のみ必要なファイルをダウンロードするため、少し時間がかかります。
以下のダイアログが表示される場合は「.NET Core」を選択します。
launch.json
ファイルが自動で作成されますが、内容はそのままで再度F5をクリックしてデバッグ実行を開始します。
ブラウザが自動で立ち上がり、以下の画面が表示されます。
「詳細情報」ボタンをクリックして「localhostにアクセスする(安全ではありません)」のリンクをクリックします。
「この localhost ページが見つかりません」と表示されます。webapi
のプロジェクトなので画面はない状態なので、問題ありません。
プロジェクト作成時にデフォルトで作成されているサンプルのAPIを実行してみます。
「https://localhost:5001/WeatherForecast
」にアクセスすると、APIのデータが表示されることを確認できます。
以下のようにブレークポイントを設定して上記URLでリロードすると、ブレークポイントで止まることを確認できます。