rksoftware

Visual Studio とか C# とかが好きです

docker のイメージの中の sdk をコマンドとして使う。

まとめ

Windows 上に C:\Dev\app フォルダがあるとします。

docker run --rm -v "C:\Dev\app:/app"  -w /app  mcr.microsoft.com/dotnet/sdk dotnet new console
ls ./app
docker run --rm -v "C:\Dev\app:/app"  -w /app  mcr.microsoft.com/dotnet/sdk dotnet run

■ 以前の記事で Docker をインストールしたので動かしてみます

rksoftware.hatenablog.com

今回は .NET SDK のイメージを使って、dotnet コマンドを実行してみます。ホスト環境に .NET がインストールされていなくてもビルド等が行える、そういうやつを試します。

■ Docker Desktop の様子

先日インストールした Docker Desktop を起動してみます。起動にだいぶかかる......。じっと待ちます。

起動後。インストールして何もしていないのに何もありません。ここから始めてみます。

■ コマンドで操作

Docker Desktop から離れてコマンドで操作していきます。
まずは、docker コマンドがちゃんとあるか確認します。ちゃんとありますね。

公式の .NET SDK のイメージをインストールします。

docker pull mcr.microsoft.com/dotnet/sdk

参考: dotnet-docker/samples/build-in-sdk-container.md at main · dotnet/dotnet-docker · GitHub

pull に少し時間がかかります。進捗を見守ります。

終わりました。Docker Desktop を見ても追加されています。やったね!

■ コマンドを実行

今 pull したイメージの .NET SDK でプロジェクトを作って、実行してみます。
dotnet new console コマンドを実行します。

docker run --rm -v "C:\Dev\app:/app"  -w /app  mcr.microsoft.com/dotnet/sdk dotnet new console

続いてこれは、ホスト側でのコマンドです。作られたプロジェクトを見ています。もしかしたらこれやらない方が記事として分かりやすかったかもしれません。

ls ./app

そしてまた イメージの .NET SDK で実行。(.NET では run での実行時に必要であれば自動でビルドされます)

docker run --rm -v "C:\Dev\app:/app"  -w /app  mcr.microsoft.com/dotnet/sdk dotnet run


完璧ですね。

参考: dotnet-docker/samples/build-in-sdk-container.md at main · dotnet/dotnet-docker · GitHub

解説

--rm : 実行後にすぐに破棄する。今回はコマンドを実行してすぐに停止して再利用しない想定です。このオプションで実現しました。
-v : ホストのディレクトリをゲストにくっつけます。今回はホストの C:\Dev/app ディレクトリをゲストで /app でみられるようにしています。「:」 の前がホストのディレクトリ、後ろがゲストです。「:」 が二つ出てくるので微妙ですが。
-w : ゲスト内での作業ディレクトリです。-v で指定した /app を指定しています。
次は、イメージの指定です。先ほど pull した .NET SDK のイメージを指定しています。
最後の dotnet new console がイメージ上で実行するコマンドです。

実行結果の標準出力への出力も、ターミナルに表示されるのでわかりやすいですね。

docker: invalid reference format.

今回試している途中で

docker: invalid reference format.

というエラーで docker コマンドが実行できないことがありました。コマンドが間違っていたからなのですが、ちょっとどう間違えたか分かりにくいやつだったのでメモをしておきます。

■ -v "C:\Dev\app:/app"

エラーの場所は -v "C:\Dev\app:/app" でした。参考にした情報では -v C:\Dev\app:/app とダブルクォーテーションがなかったのですが、ホスト OS が Windows なので、パスにスペースが入ることを想定して勝手にダブルクォーテーションを追加してみました。
最初

-v "C:\Dev\app":/app

とホスト側の部分にだけダブルクォーテーションをつけていたら、docker: invalid reference format. いただきました。
今は

-v "C:\Dev\app:/app"

としたら動いています。

参考にさせていただきました。

qiita.com