ASP.NET Core の Docker アプリケーションを Kubernetes にデプロイする

オウルです。
今回は、Visual Studio 2017 Community を使って ASP.NET CoreDockerアプリケーションを Kubernetes にデプロイしてみます。
ローカル環境
IDE
Visual Studio 2017 Community
言語
ASP.NET Core 2.1
PC
Windows10
Docker for Windows
ローカルに Kubernetes 環境がない場合は、こちらの記事を参考に準備してください。

ASP.NET Core

ASP.NET Core は、インターネットに接続された最新のクラウド ベース アプリケーションを構築するための、クロス プラットフォームで高パフォーマンスのオープン ソース フレームワークです。
今後は ASP.NETASP.NET Core を選択する必要がでてきそうです。個人的に新規の場合は ASP.NET Core で良い気がしています。
※別の機会に ASP.NET Core を取り上げる予定です。

ASP.NET Core プロジェクト作成

Visual Studio 2017 には Visual Studio Tools for Kubernetes が提供されていますが、今回は ASP.NET Core Web アプリケーションプロジェクトを作成します。

isual Studio Tools for Kubernetes

Visual Studio Tools for Kubernetes を使用すると Visual Studio から「Container Application for Kubernetes」プロジェクトを作成することができるようになります。
公式リファレンス:
「Container Application for Kubernetes」は、Azure Kubernetes Service を利用して Visual Studio で開発(デバック)することが可能なプロジェクトです。
今回「Container Application for Kubernetes」プロジェクトを使用しない理由は、学習の観点から主に以下のようになります。
  • Azure サブスクリプションが必要
  • Azure Kubernetes Service(Azure Dev Spaces)が必要
  • デプロイ用のマニフェスト等が自動で作成されるが、学習のためマニフェストは手動で作成したい
  • ローカル環境で完結させたい
上記の理由から ASP.NET Core の Docker 有効化したプロジェクトを作成して Kubernetes にデプロイします。Docker イメージ化しておけば、デプロイ先がオンプレ、Azure、AWS、GCP のいづれであろうと動作するはずですし、それが以前紹介した Docker の携帯性のメリットです。

ASP.NET Core プロジェクトを選択

  1. Webアプリケーション(モデル ビュー コントロール)を選択します。
  2. Dockerサポートを有効にするのチェックONにします。
  3. OS:Linux
  4. 認証:個別のユーザアカウントを選択します。
ソリューションエクスプローラーにDockerfileが自動で作成されています。Dockerfile の内容は、こちらの記事で紹介しています。

デバック操作

デフォルトのプロジェクトをデバックします。
デバックの[ Docker ]ボタンクリックします。
下のWebアプリケーションがブラウザに表示されます。

デバック出力コンソール

Visual Studio のデバック出力コンソールを見てみます。
出力元をビルドに切り替えます。切り替えるとDocker イメージのビルドとデプロイの実行ログが出力されています。

oker イメージのビルド

Docker イメージを確認します。
Docker コンテナを確認します。

Kubernetes にデプロイ

Visual Studio の「発行」機能で Docker イメージを作成することは可能ですが、今回は学習も兼ね CLI で実行します。
因みに Visual Studio の「発行」で選択できるコンテナレジストリは以下です。

Visual Studio の発行先

  • Azure Container Registry
  • Docker Hub
  • カスタム(プライベート Docker Registry)

Dockerイメージをビルド

マったこと
先ほどのデバックで Visual Studio がビルドした Docker イメージあるのに、なぜもう一度ビルドするのと思った方がいらっしゃるかもしれません。実際、僕も「 frontaspnetcoreapp:dev 」でデプロイしようと試みましたが、ハマりました・・・。「 frontaspnetcoreapp:dev 」を指定して何度 run コマンドを実行しても Docker コンテナが起動しないのです(正しくはコンテナは起動したが完了状態に移行)そこで、もう一度 Visual Studio でデバックした時のビルドコマンドをよく見ると —target がついてる・・・。せっかくなので、Docker イメージの詳細を見てみます。

Docker イメージの詳細

はい、”Cmd”が違いますね。そりゃエラーなく完了します。。。

Kubernetes にデプロイ

マニフェストファイルを作成します。
Kubernetes にデプロイします。
公開ポートを確認します。
デプロイしたコンテナにアクセスしてみます。
http:localhost:30385
Visual Studio のデバック時にブラウザに表示されたページが同じように表示すればデプロイ成功です。

まとめ

Visual Studio 2017 Community を使って ASP.NET Core の Dockerアプリケーションを Kubernetes にデプロイしました。
  • ASP.NET Core のアプリケーションを Docker イメージとしてビルド
  • マニフェストファイルを作成して、Kubernetesにデプロイ
次回は ASP.NET Core アプリケーションを題材に、Web アプリケーションに必要なミドルウェアの Redis を Kubernetes 上にデプロイして連携させたいと思います。
ASP.NET Core アプリケーションのセッションを Redis に格納する方法を ↓ の記事で紹介しています。

おススメ書籍

技術本を読むなら Kindle がおすすめです。こちらの記事をご覧ください。
▼ Kubernetesの入門書
『入門 Kubernetes』
1.6,5 のバージョンで解説(リポジトリ、注釈は翻訳時の最新1.9で更新)されています。バージョンは少し古いですが、初心者の入門書(おえるべきポイントはしっかり網羅されてる)としては、途中で挫折しない適度なボリューム(本の厚さ)で、とっかかりとしては良い本になっています。
▼ Kubernetesの入門~応用までをカバー
『Kubernetes完全ガイド (impress top gear)』
僕は「入門 Kubernetes」⇒「Kubernetes完全ガイド」(現在進行形)という進み方をしていますが、より本番環境を想定した方法を学べます。特にWeb 系だと、https で使用する Ingress リソースなどもしっかり説明してくれています。「入門 Kubernetes」には、詳しい説明がなかったので個人的にはすごく助かっています。
▼ Docker / Kubernetesの入門
『Docker/Kubernetes 実践コンテナ開発入門』
コンテナオーケストレーションプラットフォームである Kubernetes を学ぶときには、どうしても Docker の知識が必要となってきます。それをまとめているのが、この本です。途中で挫折しない適度なボリューム(本の厚さ)で、とっかかりとしては良い本になっています。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA