15
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Ateam Brides Inc.Advent Calendar 2019

Day 16

.NETCoreのWebAPIをDockerで実行する

Last updated at Posted at 2019-12-15

はじめに

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

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

TL;DR

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

準備

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

.NETCoreをインストール

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

image.png

image.png

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

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 でアクセスすると...

image.png

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

Dockerイメージをビルド

準備

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

docker --version
Docker version 19.03.5, build 633a0ea

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

image.png

Dockerfile作成

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

Dockerイメージをビルド

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

docker build -t my_docker_api_image -f Dockerfile .

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

Dockerイメージの確認

docker images

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

コンテナーを実行する

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を実行できることを確認できました。

image.png

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

感想

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

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

参考にした記事

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

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

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

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

15
11
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
15
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?