ちなみに、私の同僚である Ivan Naranjo が最近、
ASP.NET Core アプリを Docker コンテナ化して Google App Engine で実行する手順をこのブログに投稿しました。そこでこの投稿では、ASP.NET Core アプリを Docker でコンテナ化し、Kubernetes と
Google Container Engine を使って管理する手順を見ていきます。最近まで Windows 以外のプラットフォームで ASP.NET が動くとは考えられなかっただけに、その簡単さには驚かれることでしょう。
必要な準備
ここでは Windows 開発環境を想定していますが、Mac や Linux の場合でも、取るべき手順はかなり近いものになります。
まず、Windows に対応した
.NET Core、
Docker、
Google Cloud SDK をインストールする必要があります。次に、
Google Cloud Platform プロジェクトの作成が必要です。後でこのプロジェクトを使って、Container Engine で Kubernetes クラスタをホストします。
ASP.NET Core で HelloWorld アプリを作成
.NET Core には .NET Core Command Line Tools が用意されています。このツールにより、コマンドラインからとても簡単にアプリを作成できます。HelloWorld フォルダを作成し、dotnet コマンドを使ってウェブ アプリを作成しましょう。
$ mkdir HelloWorld
$ cd HelloWorld
$ dotnet new -t web
依存関係を復元し、アプリをローカルで実行します。
$ dotnet restore
$ dotnet run
http://localhost:5000 にアクセスすると、デフォルトの ASP.NET Core ページを表示できます。
ASP.NET Core アプリを Docker でコンテナ化
HelloWorld アプリを Docker でコンテナ化しましょう。アプリ フォルダのルートに以下の内容の Dockerfile を作成します。
FROM microsoft/dotnet:1.0.1-core
COPY . /app
WORKDIR /app
RUN [“dotnet”, “restore”]
RUN [“dotnet”, “build”]
EXPOSE 8080/tcp
ENV ASPNETCORE_URLS http://*:8080
ENTRYPOINT [“dotnet”, “run”]
これは、私たちがこれから作成する Docker イメージのレシピです。簡単に説明すると、microsoft/dotnet:latest を基にイメージを作成し、カレント ディレクトリをコンテナの /app ディレクトリにコピーします。アプリを稼働させるのに必要なコマンドを実行し、ポート 8080 をエクスポーズすれば、 ASP.NET Core がそのポートを使います。
準備が完了したら、Docker イメージをビルドし、Google Cloud プロジェクト ID でタグ付けします。
$ docker build -t gcr.io/
<PROJECT_ID>/hello-dotnet:v1 .
Docker イメージがきちんと作成されていることを確認するため、Docker でローカルに実行してみましょう。
$ docker run -d -p 8080:8080 -t gcr.io/
<PROJECT_ID>/hello-dotnet:v1
http://localhost:8080 にアクセスすると、上と同じデフォルトの ASP.NET Core ページを表示できますが、今度はこのアプリは Docker コンテナ内で稼働しています。
Container Engine で Kubernetes クラスタを作成
Kubernetes クラスタを作成する準備ができましたが、作成の前に、gcloud を使って Google Container Registry にイメージをプッシュしましょう。これは、Kubernetes クラスタをデプロイして実行するときに、このイメージを後で参照できるようにするためです。
Google Cloud SDK Shell で以下のコマンドを実行します。
$ gcloud docker push gcr.io//hello-dotnet:v1
Container Engine で 2 ノードの Kubernetes クラスタを作成します。
$ gcloud container clusters create hello-dotnet-cluster --num-nodes 2 --machine-type n1-standard-1
少し時間がかかりますが、クラスタが準備されると、次のように表示されます。
Creating cluster hello-dotnet-cluster...done.
Container Engine でアプリをデプロイ、実行
この段階では、私たちのイメージは Google Container Registry でホストされていて、Kubernetes クラスタが Google Container Engine で準備されています。残る手順はあと 1 つです。イメージを Kubernetes クラスタで実行することです。そのためには、コマンドライン ツールの kubectl を使う必要があります。
まず kubectl をインストールしましょう。Google Cloud SDK Shell で以下のコマンドを実行します。
$ gcloud components install kubectl
以下のコマンドを実行し、クラスタにアクセスできるように kubectl コマンドラインを構成します。
$ gcloud container clusters get-credentials hello-dotnet-cluster \
--zone europe-west1-b --project
<PROJECT_ID>
いよいよ、私たちのイメージから Kubernetes にデプロイメントを作成します。
$ kubectl run hello-dotnet --image=gcr.io/hello-dotnet:v1 \
--port=8080
deployment “hello-dotnet” created
デプロイメントとポッドが稼働していることを確認します。
$ kubectl get deployments
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
hello-dotnet 1 1 1 0 28s
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
hello-dotnet-3797665162-gu99e 1/1 Running 0 1m
デプロイメントを外部にエクスポーズします。
$ kubectl expose deployment hello-dotnet --type="LoadBalancer"
service "hello-dotnet" exposed
サービスが準備されると、外部 IP アドレスを表示できます。
$ kubectl get services
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hello-dotnet XX.X.XXX.XXX XXX.XXX.XX.XXX 8080/TCP 1m
0 件のコメント :
コメントを投稿