アレがアレでアレ

(できれば)プログラミング関係のことを書きたい

Raspberry PiにDockerで.NET Core環境を構築してみた

ラズパイでC#を動かしたくて ラズパイ内に.NET Core環境をDockerで構築してみました。

バージョン

  • .NET Core SDK 2.1

ラズパイの環境

Dockerインストール

まずはDockerをインストールします。

以下のコマンド1つでインストールできました。

$ curl -sSL https://get.docker.com | sh
$ docker --version
Docker version 18.06.0-ce, build 0ffa825

これでDockerはインストールできましたが、dockerコマンドがroot権限がないと使えないので以下のコマンドでdockerグループにユーザーを追加します。

$ sudo usermod -aG docker ユーザー名

これでsudoを打たなくてもdockerコマンドを実行することができます。

.NET Coreが動作するコンテナの準備

次は.NET Coreが動作するDockerコンテナを立てます。

色々調べてたらラズパイで動きそうなarm32v7対応のDockerfileが公式にありましたのでこれを使いました。

※追記 Dockerfileのリンクが切れていたので更新しました。
バージョンは3.1です。

github.com

Dockerfileのビルド

先程のURLのDockerfileを使ってビルドし、イメージを作ります。

$ docker build -t dotnet .

コンテナの起動

$ docker run -it --name my-dotnet dotnet

コンテナを起動できたらdotnetコマンドを実行してみます。

# dotnet --version
2.1.302

.NET Coreがちゃんとインストールできているのが確認できました。

サンプルプログラムを動かす

.NET Coreの環境ができたのでサンプルプログラムを動かしてみます。

プロジェクト作成

dotnet newコマンドでプロジェクトを新規作成します。

-oオプションで出力するプロジェクトの配置場所を指定。

今回はコンソールアプリケーションを実行したいのでconsoleを指定しました。
作成できるテンプレートはdotnet new -lで確認できます。

# dotnet new console -o Sample
The template "Console Application" was created successfully.

Processing post-creation actions...
Running 'dotnet restore' on Sample/Sample.csproj...
  Restoring packages for /root/Sample/Sample.csproj...
  Installing Microsoft.NETCore.DotNetAppHost 2.1.0.
  Installing Microsoft.NETCore.DotNetHostResolver 2.1.0.
  Installing Microsoft.NETCore.DotNetHostPolicy 2.1.0.
  Installing NETStandard.Library 2.0.3.
  Installing Microsoft.NETCore.Platforms 2.1.0.
  Installing Microsoft.NETCore.Targets 2.1.0.
  Installing Microsoft.NETCore.App 2.1.0.
  Generating MSBuild file /root/Sample/obj/Sample.csproj.nuget.g.props.
  Generating MSBuild file /root/Sample/obj/Sample.csproj.nuget.g.targets.
  Restore completed in 18.24 sec for /root/Sample/Sample.csproj.

Restore succeeded.

実行すると-oで指定したディレクトリの中にこんな感じでファイルができています。

# ls
Program.cs  Sample.csproj  obj

Program.csの中身

using System;

namespace Sample
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
        }
    }
}

それではdotnet runコマンドでプログラムを実行してみましょう。
コマンドを実行する前に.csprojファイルがあるディレクトリまで移動します。
もしくは--projectオプションでプロジェクトを指定することもできます。

# cd Sample
# dotnet run
Hello World!

実行までに多少時間がかかるけど正常に動いてくれました!