やりたかった事:
Macに.Net SDKを入れずにASP.NET Core 2.1のWebアプリを開発したい。
試した事:
Docker(Version 18.03.1-ce-mac64)でMS公式の.NET 2.1 SDKイメージを動かしてみました。
まずは、SDKの公式イメージからコンテナを起動します。
docker run --rm -it \これを実行すると、Mac側のカレントディレクトリがコンテナの/app/ディレクトリにマウントされて、かつコンテナ内のカレントディレクトリが/app/aspnetapp になった状態でシェルが起動します。
-v `pwd`:/app/ \
-w /app/aspnetapp \
microsoft/dotnet:2.1-sdk
ここから、
dotnet new webapiを実行すればWeb APIのひな形のコードが生成されます。
さらに、
dotnet runを実行すればデフォルトの5000番ポートでWeb APIが実行されますが、このままだとポートマッピングの設定をしていないのでホスト側からはアクセス出来ません。
とりあえずこれはCtrl+Cで終了してコンテナを終了し、次にdocker runコマンドに -p オプションを付けた上で、シェルを開くのではなく「dotnet watch run」コマンドを実行してみます。
使ったコマンドはこちら。
PORT=8080任意のポート番号でアプリを動かせるように、事前にProgram.csファイルにちょっと細工をしておきました。
docker run --rm -it --name watcher \
-p $PORT:$PORT \
-v `pwd`:/app/ \
-w /app/aspnetapp \
microsoft/dotnet:2.1-sdk \
dotnet watch run $PORT
#########
#########
起動後、指定したポート番号でアプリが動いているのが分かります。
分かった事:
docker runでコンテナを起動する際に -v オプションでカレントディレクトリをコンテナ内のディレクトリにマウントしておけば、ソースコードはホスト(Mac本体)側で編集し、BuildやPublishはコンテナ内で行うという事が出来ました。
コンテナ内で動かすコマンドを「dotnet watch run」としておけばコードを変更したら自動でアプリを再起動してくれます。
これでMac本体に.Net SDKを入れずにASP.NET Core 2.1のWebアプリを開発するという目的が達成出来ました!
参考URL:
dotnet-docker/aspnet-docker-dev-in-container.md at master
https://github.com/dotnet/dotnet-docker/blob/master/samples/aspnetapp/aspnet-docker-dev-in-container.md
MS公式Dockerイメージを使って.NET Core開発を行う(Mac) - ryuichi111stdの技術日記
http://ryuichi111std.hatenablog.com/entry/2016/11/07/020326
.