概要
Ubuntu に .NET Core SDK をさくっとインストールし
簡単な.NET Coreアプリを作り、
ついでにコンテナイメージにしたよ
環境
$ uname -a
Linux hoge 4.13.0-46-generic #51-Ubuntu SMP Tue Jun 12 12:36:29 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=17.10
DISTRIB_CODENAME=artful
DISTRIB_DESCRIPTION="Ubuntu 17.10"
インストール
基本的には本家ドキュメントを見てね
各ディストリビューション毎にあるよ
-
Install .NET Core SDK on Linux Ubuntu 16.04 - x64
- aptで入れるよ
-
Install .NET Core SDK on Linux CentOS / Oracle - x64
- yumで入れるよ
以下のようにsnapコマンドでもインストールできたよ
$ sudo snap install dotnet-sdk --classic
2019-04-07T17:24:48+09:00 INFO Waiting for restart...
dotnet-sdk 2.2.202 from 'dotnetcore' installed
$
バージョン確認。コマンド名が長いのでaliasを設定したよ。
$ dotnet-sdk.dotnet --version
2.2.203
$ sudo snap alias dotnet-sdk.dotnet dotnet
$ dotnet --version
2.2.203
$
新規プロジェクト作成
dotnet new {TEMPLATE}コマンドを使うよ
今回はコンソールアプリケーションを作るので、TEMPLATE
にはconsole
を指定しているよ。
その他のテンプレートはここにあるよ
-n
でプロジェクトの名前を指定するよ
$ dotnet new console -n my-app
The template "Console Application" was created successfully.
Processing post-creation actions...
Running 'dotnet restore' on my-app/my-app.csproj...
Restore completed in 101.17 ms for /home/loft/dev/dotnet-apt-test/my-app/my-app.csproj.
Restore succeeded.
$ ls -Fla my-app
total 20
drwxrwxr-x 3 loft loft 4096 ./
drwxrwxr-x 3 loft loft 4096 ../
-rw-rw-r-- 1 loft loft 221 my-app.csproj
drwxrwxrwx 2 loft loft 4096 bj/
-rw-rw-r-- 1 loft loft 188 Program.cs
$
ビルド&起動
dotnet build
でビルド、dotnet run
でビルド&起動するよ
$ cd my-app/
$ dotnet run
Hello World!
$
# ちなみにDebugビルドで、成果物はここにある
$ dotnet bin/Debug/netcoreapp2.2/my-app.dll
Hello World!
$
新規プロジェクト作成時点でHello World!が実装されているよ。
あとは必要な機能を実装するだけだね!
NuGetパッケージを追加する
dotnet add packageコマンドで追加できるよ
# やべえ! jsonの処理を実装したんだけど、Newtonsoftパッケージがねえ!
$ dotnet run
error CS0246: The type or namespace name 'Newtonsoft' could not be found (are you missing a using directive or an assembly reference?) [/home/loft/hoge/my-app/hoge.csproj]
The build failed. Please fix the build errors and run again.
# 追加しよう
$ dotnet add package Newtonsoft.Json
# 無問題!
$ dotnet run
Hello World!
$
リリース構成で出力する
dotnet publish コマンドで出力できるよ
-c
にビルド構成(Debug
やRelease
) を指定できるよ
bin/Release/netcoreappx.x/publish/
配下が配布用の成果物一式だよ
$ dotnet publish -c Release
$ dotnet bin/Release/netcoreapp2.2/publish/my-app.dll
Hello World!
$
コンテナイメージにする
ベースイメージは.NET Core Runtime
Dockerfile
FROM mcr.microsoft.com/dotnet/core/runtime:2.2
LABEL maintainer "your-name <your@email.hoge>"
# dotnet publishした一式を配置
ENV APP=my-app
WORKDIR /root/${APP}
COPY ./bin/Release/netcoreapp2.2/publish/* ./
# 起動コマンド
CMD dotnet ${APP}.dll
コンテナイメージビルド、コンテナ起動
$ sudo docker build -t my-app .
$ sudo docker run -d --name my-app -h my-app my-app
$ sudo docker ps -a | grep my-app
38a2e6a3704e my-app "/bin/sh -c 'dotne..." 9 seconds ago Exited (0) 7 seconds ago my-app
$ sudo docker logs my-app
Hello World!
$