.NET Coreのdotnetコマンドを試そうとしたら試せなかった

2016年3月19日土曜日

ASP.NET 5(現ASP.NET Core)を追っている方々には旧聞ですが、Kコマンド群がdnvmやら何やらになった(C#でのクロスプラットフォームなコマンドラインツール開発に良いかもと考えながら最近のASP.NET 5事情を調べた)と思ったら半年も経たないうち(2015年のうち)にまた変わりました。
公式の導入手順を見ると、従来通りのコマンド群だけでなくdotnet newなる環境新規作成コマンドが増えたようです。
ひとまずさっと試してみましょうか。

Docker環境でサクッと試・・・せない

さっそく公式Dockerイメージを利用して簡単に使ってみます。環境はいつもどおり、MacBook 12"上のdocker-machine(+VMware Fusion)です。
$ docker run -it microsoft/dotnet:latest
Unable to find image 'microsoft/dotnet:latest' locally
latest: Pulling from microsoft/dotnet
33f2093de5ed: Pull complete
e9e1e0eafa26: Pull complete
9b3cff7cff0e: Pull complete
3bf9da1b9bd0: Pull complete
0944fb75f38c: Pull complete
e81712b127cd: Pull complete
93e08f996847: Pull complete
86a4030bdcde: Pull complete
Digest: sha256:5128c18cc89d9bb8b3619f3ad3437d173d1d311ea317268a8398be140bf48096
Status: Downloaded newer image for microsoft/dotnet:latest
しばし待って完了です。
root@2afc10bf759a:/# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@2afc10bf759a:/# mkdir hello
root@2afc10bf759a:/# cd hello/
root@2afc10bf759a:/hello# ls
root@2afc10bf759a:/hello# dotnet new
Created new C# project in /hello.
コンテナ環境内でチュートリアルに従ってnewをおこないますが、なかなか終わりません。気持ち的には一瞬で終わってほしいコマンドで、特にprogressが表示されるわけでもないので不安になります。

状況

15分ぐらい待ち、諦めてコンテナごとdocker killを試みるも反応なし。結局docker-machine stopコマンドでホストVMごと停止して再起動しました。
dotnet restoreなどを叩いても同様(VMware FusionのVMがシステム時間を食い尽くして応答しなくなる)なので、何かおかしそうです。
ひとまず環境情報を書いておきましょう。
$ docker version
Client:
 Version:      1.9.1
 API version:  1.21
 Go version:   go1.5.1
 Git commit:   a34a1d5
 Built:        Sat Nov 21 00:49:19 UTC 2015
 OS/Arch:      darwin/amd64

Server:
 Version:      1.9.1
 API version:  1.21
 Go version:   go1.4.3
 Git commit:   a34a1d5
 Built:        Fri Nov 20 17:56:04 UTC 2015
 OS/Arch:      linux/amd64

Linuxホスト上で実行してみる

原因を切り分けるために適当なコンテナホスト上で作業をしてみます。
なお、対象のビルドは現時点でlatestタグの打たれているhttps://hub.docker.com/r/microsoft/dotnet/builds/btl9c2jpeyehe89ivzdvfcr/です。
unameの結果は
3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt20-1+deb8u3 (2016-01-17) x86_64 GNU/Linux
$ docker version
Client:
 Version:      1.9.1
 API version:  1.21
 Go version:   go1.4.2
 Git commit:   a34a1d5
 Built:        Fri Nov 20 12:59:02 UTC 2015
 OS/Arch:      linux/amd64

Server:
 Version:      1.9.1
 API version:  1.21
 Go version:   go1.4.2
 Git commit:   a34a1d5
 Built:        Fri Nov 20 12:59:02 UTC 2015
 OS/Arch:      linux/amd64
はい。
$ docker run -it microsoft/dotnet:latest
Unable to find image 'microsoft/dotnet:latest' locally
latest: Pulling from microsoft/dotnet
33f2093de5ed: Pull complete
e9e1e0eafa26: Pull complete
9b3cff7cff0e: Pull complete
3bf9da1b9bd0: Pull complete
0944fb75f38c: Pull complete
e81712b127cd: Pull complete
93e08f996847: Pull complete
86a4030bdcde: Pull complete
Digest: sha256:5128c18cc89d9bb8b3619f3ad3437d173d1d311ea317268a8398be140bf48096
Status: Downloaded newer image for microsoft/dotnet:latest
root@880ccf5e3177:/# mkdir hello_world
root@880ccf5e3177:/# ls
bin   dev  hello_world  lib    media  opt   root  sbin  sys  usr
boot  etc  home         lib64  mnt    proc  run   srv   tmp  var
root@880ccf5e3177:/# cd hello_world/
root@880ccf5e3177:/hello_world# dotnet new
Created new C# project in /hello_world.
固まりました。
docker killでも殺せません。

結果

issue作りました。Docker 1.10系を使えばよさそうな雰囲気ですね。

雑感

せっかく関連コマンド群を1つに集約したのだから、Docker環境内へdotnetコマンドを隔離しつつホスト側環境のファイルをいじるのをデフォにしたいところですね。本来はこっちの話を書きたかったのですが、存外まともに動いていなかったので1回休みの格好です。
あと、チュートリアルとしてはDockerコンテナ作成時に--rmオプションを付けて終了即削除にしておいたほうが何かと楽(Dockerをよく知らない状態だと、大量にたまってきたコンテナの残骸に気付かず厄介事になりやすい)かなと思いました。感想ですが。

0 件のコメント:

コメントを投稿