Slides for Azure Webinar: Containerized MEAN App on Azure PaaS
コンテナを使うメリット
出荷管理
決済システム
認証
在庫管理
ロギング
ユーティリティ
AzureでDocker実行プラットフォーム
ACS Engine (OSS)
AKS/ACS Web App for Containers
生産性
Azure Container Instance (ACI)
仮想マシンベース
簡易Todo入力ツール(MEANスタックで構築)をWeb App for Containerにデ
プロイ。CRUDのためのデータベースはCosmos DB (Mongo API)。
Web App for
Containers
App Servicesの基盤の上で
独自Dockerコンテナを動かす
ことができるサービス
App Serviceを使う理由?
2017年9月正式リリース
Linuxベースアプリ用
2種類のWeb Appの選択肢
1. Web App for Containers
イメージのソース
 Azure Container Registry
 Docker Hub
 プライベートレジストリ
2. Web Appでビルトインイメージ指定
https://github.com/azure-app-service
Azure Cosmos DB
プラネットスケールの
NoSQLサービス基盤
グローバル分散 マルチモデル + マルチAPI 保証された
低レイテンシ
弾力性のある
スケールアウト
豊富な一貫性レベル
フルマネージドの
包括的SLA
Azure Cosmos DB
読み取り10ミリ秒以下、
書き込み15ミリ秒以下
ストレージとスループット両面で
スケールアウト可能
全リージョンで利用可能
複数リージョン間自動レプレイケーション
手動/自動フェールオバー
TCP (SSL), HTTPS
Cosmos DB Database Engine
SQL JavaScript MongoDB Tables Gremlin Cassandra
Query IL Database Runtime
HBase …
KEY-VALUE COLUMN-FAMILY DOCUMENT GRAPH
Web App for Containers
VM VM
VM VM
①
②
③
アプリのDockerコンテナ化
Azure PaaSでフルマネージド化
Container
Express
Angular
Node.js
Express
Angular
Node.js
MongoDB
MongoDB
Container
Express
Angular
Node.js
Cosmos DB
( Mongo API )
Cosmos DB
( Mongo API )
フルマネージド化対応までの流れ
セミナーマテリアル
本ウェビナーの説明で使用する設定ファイルや手順は全て
Githubにアップしております。ご自分の環境でお試しになりたい方
は下記レポジトリよりgit clone/ダウンロードしてお使いください。
マテリアル取得
git clone https://github.com/yokawasa/azure-containers-mean-stack-demo.git
手順書/チュートリアル
https://github.com/yokawasa/azure-containers-mean-stack-
demo/blob/master/docs/tutorial-webapp-containers-and-cosmosdb.md
アプリのDockerコンテナ化
Best practices for writing Dockerfiles
https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/
FROM python:3.4-alpine
ADD . /code
WORKDIR /code
RUN pip install -r requirements.txt
CMD ["python", "app.py"]
サンプルDockerfile (Pythonアプリapp.pyの環境)
Web App用カスタムコンテナのための
設定ポイント
https://blogs.msdn.microsoft.com/waws/2017/09/08/things-you-should-know-web-apps-and-linux/
1. パラメータは環境変数から読み込むように設定
DB接続先やアプリ内の可変パラメータなど
2. 外部公開用ポートの自動バインド
外部公開可能なポートは1つのみ。ポートは自動で検知されコンテナにバインドされる。
WEBSITES_PORT環境変数で明示的に指定可
3. SSHの設定
Azureポータル内のクライアントからのみコンテナイメージにSSHログインが可能。rootユーザー
パスワードは“Docker!”, ポートは2222
https://docs.microsoft.com/en-us/azure/app-service/containers/app-service-linux-ssh-support
4. 永続化データと/homeディレクトリ
WEBSITES_ENABLE_APP_SERVICE_STORAGEをtrueにすることで/homeディレクトリは
ストレージにマウントされる
MEANアプリ コンテナイメージのDockerfile
https://github.com/yokawasa/azure-containers-mean-stack-
demo/blob/master/dockerfiles/Dockerfile
Web AppへのSSHログインのための設定
アプリのコンテナイメージ化と実行
コンテナをビルドする (image_name:tag=mean-demo:0.0.1)
コンテナをローカルで走らせてテスト (アプリはhttp://localhost:8080でアクセス)
※ 環境変数 MONGODB_URI例
MONGODB_URI="mongodb://<accountname>:<accountkey>@<accountname>.documents.azure.com:10255/<database>?
ssl=true&sslverifycertificate=false”
MONGODB_URI="mongodb://<mongodb_ip>:27017/mean"
Cosmos DB アカウント+DBの作成
Cosmos DB アカウント作成
az cosmosdb create 
--name $ACCOUNT_NAME 
--kind MongoDB 
--resource-group $RESOURCE_GROUP 
az cosmosdb database create 
--name $ACCOUNT_NAME 
--db-name $DATABASE_NAME 
--resource-group $RESOURCE_GROUP
データベースの作成
Cosmos DB接続 URIの取得
マスターキーの取得
az cosmosdb list-keys --name $ACCOUNT_NAME 
--resource-group $RESOURCE_GROUP --query "primaryMasterKey"
mongodb://<cosmosdb-name>:<primary_master_key>@<cosmosdb-
name>.documents.azure.com:10255/<database-name>?ssl=true&sslverifycertificate=false
下記の<cosmosdb-name>、<primary_master_key>、<database-name>を正しい値に置換し
てCosmos DB接続URIを取得
テスト実行
mongodb://<cosmosdb-name>:<primary_master_key>@<cosmosdb-
name>.documents.azure.com:10255/<database-
name>?ssl=true&sslverifycertificate=false
Docker HubにイメージをPUSH
Docker HubにPUSH (image-name:tag=mean-demo:0.0.1)
Docker Hubにイメージが
PUSHされていることを確認
<dockerhub-user>/<imagename>:<tag>
例) yoichikawasaki/mean-demo:0.0.1
最も単純なデプロイメントの流れ
Local PC Container Registry
• 開発、ビルド、テスト
• コンテナイメージ作成
コンテナイメージを
Registryにプッシュ
Web Appが
コンテナイメーを
Registryからプル
https://hub.docker.com/
deployment slot
• dev
• Staging
• production
AzureでのCI/CDオプション
https://docs.microsoft.com/en-us/azure/app-service/containers/app-service-linux-ci-cd
デプロイメントサイクルとCI/CD
Commits code Build/CI CD pipelineContainer Registry
commits code Build/CI CD pipelineAzure Container
Registry
Code Repository Build + Testing Release
Commits code Build/CI CD pipelineContainer Registry
https://docs.microsoft.com/ja-jp/azure/app-service/containers/tutorial-custom-docker-image
https://docs.microsoft.com/en-us/azure/jenkins/deploy-jenkins-app-service-plugin#configure-
jenkins-to-deploy-web-app-for-containers
https://azure.microsoft.com/en-
us/blog/annoucing-jenkins-deploy-to-azure-app-service-plugin-and-new-managed-disk-support-
for-azure-storage-plugin/
https://docs.microsoft.com/ja-jp/vsts/build-release/apps/cd/deploy-docker-webapp
Web App for Containers + Cosmos DBで コンテナ対応したMEANアプリを作ろう!
Web App for Containers + Cosmos DBで コンテナ対応したMEANアプリを作ろう!

Web App for Containers + Cosmos DBで コンテナ対応したMEANアプリを作ろう!

Editor's Notes

  • #7 Dockerのポータビリティとは同じCPUアーキテクチャ(Intel x86_64)で動く同じOS上であれば、Dockerイメージをそのままポータブルに利用可能 ホストLinuxの種類が異なる環境で利用する際には、思わぬ問題が発生する恐れがある https://www.school.ctc-g.co.jp/columns/nakai/nakai43.html 一方、異なるCPUやOSの場合でも、OS固有の機能(たとえばパッケージインストールなど)を使わずにDockerファイルをうまく書いてあれば、同じDockerfileで同様のコンテナーを再現できる。 起動時間の短縮 Dockerを実行するホスト上で他のアプリケーションと同様のプロセス単位で管理されるため、ハイパーバイザー型の仮想化マシンでいうOSブート処理が必要ありません 構成が仮想化よりも単純で、リソース消費量が少ないため、高密度化が可能である
  • #8 マイクロサービスのデプロイ基盤
  • #9 Azure Container Service IaaSベースのサービス、複数のVMを使ってクラスタを構成。Kubernetes, DCOS Docker, Swarmを使ってコンテナのスケールとオーケストレーションが簡単できるサービス Azure Container Instance VMいらずで、シングルコマンドで簡単かつ高速に実行可能なコンテナインスタンス。秒単位課金 App Service (Web App for Containers + App Service on Linux) アプリ実行に必要なさまざま機能が用意されたPaaS環境
  • #13 フルマネージド これまでの環境では:.NET/PHP/Node.js/Python/JavaといったラインタイムのWebアプリケーションの稼働が可能(Windows上)
  • #14 一瞬過去中国に存在していた My SQL サービスとは別。別アーキテクチャ
  • #15 コンテナイメージをレジストリにPUSHする Web App For Containerではそのイメージのソースを指定する イメージソースの選択肢として、DockerHub以外に、AzureのマネージドのプライベートレジストリであるACR、もしくはそれ以外のプライベートレジストリも指定可能
  • #18  グローバル分散:複数リージョンへのレプリケーション、フェールオーバー等 低レイテンシ(90パーセンタイルSLA):読み取り10ミリ秒以下、書き込み15ミリ秒以下 スケール:スループット、ストレージを独立してスケール可能
  • #19 Global Distribution From The Ground-up: (1) DocumentDB is a Ring 0 Azure service: Available in all Azure regions by default, including sovereign/government clouds (2) Automatic multi-region replication Associate any number of regions with your database account Policy based geo-fencing (3) Multi-homing APIs Apps don’t need to be redeployed during regional failover (4) Support for both manual and automatic failover It’s limitless: First Azure service to offer comprehensive SLA for latency, throughput, availability and consistency
  • #26 https://blogs.msdn.microsoft.com/waws/2017/09/08/things-you-should-know-web-apps-and-linux/#OnePort https://blogs.msdn.microsoft.com/waws/2017/09/08/things-you-should-know-web-apps-and-linux/#HomeOverwrite
  • #27 コンテナ イメージを作成するための指示が記述されている
  • #28 コンテナ イメージを作成するための指示が記述されている
  • #29 コンテナ イメージを作成するための指示が記述されている
  • #30 コンテナ イメージを作成するための指示が記述されている
  • #31 コンテナ イメージを作成するための指示が記述されている
  • #32 コンテナイメージのPUSH先としてここではDocker Hubで説明しておりますが、WebApp for Containersのためのカスタムイメージ格納先としてはAzure Container Registory や 完全なPrivate Registryでも全く問題ありません
  • #35 Deployment slots 安全に本番環境へ Blue Green デプロイ 何かあったらロールバック スロットを作成しても価格は同じ
  • #36 VSTS: CI/CD, vesion管理, 自動build, テスト管理、リリースマネジメント Github, DockerHub, Azure Functions連携パターン https://lee-dale.net/2017/03/31/ci-with-azure-web-apps-for-linux-github-dockerhub-and-azure-functions/