LoginSignup
9
4

More than 5 years have passed since last update.

.NET Coreアプリをさくっと作ってコンテナにする

Last updated at Posted at 2019-05-03

概要

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"

インストール

基本的には本家ドキュメントを見てね
各ディストリビューション毎にあるよ

以下のように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にビルド構成(DebugRelease) を指定できるよ

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!
$
9
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
4