LoginSignup
1
4

More than 5 years have passed since last update.

.NET Coreコンソールアプリのコンテナ化について手法図示

Posted at

はじめに

.Net coreのコンソールアプリをコンテナ化しようといろいろ調べたんですが

自分的にイメージしにくかったので図示してみます。

image.png

①ベースイメージ取得

Docker Hubからベースとなるイメージを取得してくる。
SDKやらRuntimeやらいろいろある。

例えばsdk2.1
docker pull mcr.microsoft.com/dotnet/core/sdk:2.1

②コンテナを起動して中に入る

GitHubからソースコードを取得する想定
docker run -itd --name tmp mcr.microsoft.com/dotnet/core/sdk:2.1 /bin/bash
docker exec -it tmp /bin/bash

共有フォルダからソースコードを取得しようと思ったら--mountで設定必要

③.net coreソースコード取得

例えば.NetCoreのサンプルアプリのソースコードを取得
mkdir -p /src; cd $_
git clone https://github.com/dotnet/core.git
cd core/samples/helloworld

④dotnet publishでdll作成

mkdir /helloworld
dotnet publish -c Release -o /helloworld
dotnet /helloworld/helloworld.dll

で実行可能な状況になる。
配置には

  • フレームワークに依存する展開(Framework-dependent deployment、FDD)
  • 自己完結型の展開(Self-contained deployment、SFD)

があるらしい。
コンソールアプリを外部から呼びやすくする方法として.NET Core CLI を使用して .NET Core グローバル ツールを作成するとかも。

⑤ docker commitでimage化

コンテナから抜け出てから

docker commit tmp helloworld

とするとmcr.microsoft.com/dotnet/core/sdk:2.1をベースとしたhelloworld.dllが実行可能なhelloworldというイメージが新たに出来上がる。
tmpは②で指定したコンテナ名。helloworldはイメージ名。

DockerFile

こんなことを毎回手動ではやってられないのでDockerFileで自動化する。
解説はいきなりDockerFileの記述から始まるので根本的なところがわからなかった。

dockerfile
FROM mcr.microsoft.com/dotnet/core/sdk:2.1
WORKDIR /src
RUN git clone https://github.com/dotnet/core.git
WORKDIR core/samples/helloworld
RUN mkdir /helloworld
RUN dotnet publish -c Release -o /helloworld
ENTRYPOINT ["dotnet", "/helloworld/helloworld.dll"]

上記ファイルがある場所で

docker build -t helloworld .

を実行すればイメージが出来上がる。

docker run helloworld


Hello World!
が出力される。

イメージの配置

  • 実行環境でdocker build
  • 出来上がったイメージを実行環境にエクスポート

とかすれば使えるようになるはず。

参考

1
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
1
4