.NETCoreのWebAPIをDockerで実行する


はじめに

昔使ってた.NETCoreを使って、WebAPIでDockerを動かしてみたいと思いました。ちなみに私、.NET環境触るの久しぶりだったり、Docker初心者なので、間違ってる〜とか今はこんなのが主流だよ〜とかあったらご指摘いただけると嬉しいです

また、Docker良く分からないけど、なんか動かしてみたい〜っていうMSフレンズも実際にやってもらえたら嬉しいです。

TL;DR

  • C#やWindowsServerを使っている方、.NETCoreやDockerを検討している方向けです。
  • この記事を読むと、.NETCoreのWebAPIをDockerコンテナで実行できるようになります。

準備

  • 環境
    • macOS Mojave バージョン 10.14.6
      ※Windows でも適宜読み替えればできると思います。

.NETCoreをインストール

.NETCore SDKからダウンロードします。

バージョンを確認すると...

dotnet --version
--version3.1.100

正常に.NETCore SDKのインストールが完了しました。

WebAPIのサンプルプロジェクトを作成

続いて、今回試すAPIのプロジェクトを作成します。

# プロジェクト作成 (my_docker_api は任意のプロジェクト名)
dotnet new webapi -o my_docker_api

動作確認

# プロジェクトに移動してlocalhost起動
cd my_docker_api/
dotnet run

サンプルとして用意されているWeatherForecast
https://localhost:5001/WeatherForecast でアクセスすると...

Command + C でlocalhostシャットダウン

Dockerイメージをビルド

準備

※Dockerをインストール(この記事では割愛)

docker --version
Docker version 19.03.5, build 633a0ea

VSCode拡張機能インストール(任意)

Dockerfile作成

Command + Shift + P でコマンドパレットを開き
Docker: Add Docker Files to Workspace... を選択
ASP.NET Core > Linux を選択すると自動で Dockerfile が作成されます。

Dockerイメージをビルド

my_docker_api_image は任意のイメージ名でOKです。

docker build -t my_docker_api_image -f Dockerfile .

数分かかりますが、最終的に Successfully が出ていればOKです。

Dockerイメージの確認

docker images

4つのイメージが作成されていることがわかります。

コンテナーを実行する

docker run --rm -p 5000:80 my_docker_api_image my_docker_api

--rm: このコンテナー実行後に自動的にコンテナを削除してくれます。不要なコンテナが残り続けるとストレージを圧迫します。
-p 5000:80: ローカル端末の5000番ポートをDockerコンテナー内の80番ポートに接続します。

実行後にhttp://localhost:5000/WeatherForecastにアクセスすると、Docker内のAPIを実行できることを確認できました。

先程、dotnet run でローカル実行したときと同様のことがDockerコンテナで実行できることが分かります。

感想

これだけではDockerの旨味は感じられにくいが、Dockerで開発することができれば、そのままAWS ECS/Fargateを使ってデプロイできるみたい。(でも今は、.NETCore2系まで対応で3系はまだかな?) マイクロサービスやサーバーレスアプリケーションを作成するなら使いたい技術だと感じました。

〜後日談〜
Dockerには様々な使い方があります。例えば、開発環境をメンバー全員で揃えたいとか、サービス運用を楽にしたいとか。つまり、解決したい課題を明確にして自分がどのようにDockerを使いたいか把握することが大事なんだと気づきました。

参考にした記事

私たちのチームで働きませんか?


エイチームは、インターネットを使った多様な技術を駆使し、幅広いビジネスの領域に挑戦し続ける名古屋の総合IT企業です。
そのグループ会社である株式会社エイチームブライズでは、一緒に働く仲間を募集しています!

上記求人をご覧いただき、少しでも興味を持っていただけた方は、まずはチャットでざっくばらんに話をしましょう。
技術的な話だけでなく、私たちが大切にしていることや、お任せしたいお仕事についてなどを詳しくお伝えいたします!

Qiita Jobsよりメッセージお待ちしております!