Microsoft Azureで実装する
Web Service on Docker
JAZUG熊本(くまあず)平⽇夜の勉強会#2
2017/08/29
加藤 司
• 北海道出⾝
• クラウドコンサルタント/インテグレータ
• Microsoft MVP for Microsoft Azure
• コミュニティ活動
• JAZUG熊本⽀部(くまあず)
• 熊本クラウド語ろう会(熊クラ会)
⾃⼰紹介
はじめに
本セッションは8⽉29⽇時点の情報になります。
アップデートにより仕様が変わる可能性がありますので
ご注意ください。
Copyright©	2015,	JAZUG	All	Rights	Reserved. 4
Docker
• 「Docker」(ドッカー)は、Docker社(旧dotCloud)が
開発するオープンソースのコンテナ管理ソフトウェア。
• 開発者が簡単にアプリケーションを動かす環境を作るとい
う思想のもとに作られている。
Dockerを使うメリット
• サーバー仮想化と違い、コンテナを利⽤するためオー
バーヘッドが少なく動作が軽い。
• 各コンテナは様々なディストリビューションやバー
ジョンを構成できる。
• インフラ環境をコード化することが容易(Dockerfile)
Copyright©	2015,	JAZUG	All	Rights	Reserved. 7
Container
コンテナを使う理由
開発環境と本番環境との差異をなくす
起動時間の短縮
リソース利⽤の効率化
App Service on Linux
App Service on Linux
• 現在提供されているApp ServiceのLinux版
• Linux上でのWebアプリのネイティブな実⾏のサポート
• 専⽤App Serivceプランで動作
• Dockerのサポート
Preview
アプリ実⾏⽅法
ランタイムスタックの選択
Windows版のWeb Appと同様に使⽤するランタイムを
選択してデプロイが可能
Docker イメージの実⾏
Azure Container Registry,Docker Hub,プライベート コンテナー
レジストリからカスタム コンテナーを使⽤可能
ランタイムスタック
必要な設定がされたDocker Image
App Serviceのドキュメントルートをコンテナから参照
独⾃のランタイムスタックの作成も可能
https://github.com/Azure-App-Service
公開されているDockerfileをカスタマイズ
ランタイムスタック
以下の⾔語イメージが提供されている
Node.js ( 4.4 , 4.5 , 6.2 , 6.6 , 6.9 , 6.10, 6.11, 8.0, 8.1 )
PHP ( 5.6 , 7.0 )
.Net Core ( 1.0 , 1.1 )
Ruby ( 2.3 )
利⽤できるリージョン
現状提供されているのは以下のリージョン
South Central US, West US, East US, East US 2,
North Central US, Central US, Canada Central,
Canada East, Brazil South, North Europe, West Europe,
Southeast Asia, East Asia, Japan West, Japan East,
Australia East, Central India, West India, South India
価格
Windows版とは異なりStandard と Basicのみ
プレビューのため現状は50%割引
Web App on Linux
16
Web	App	on	Linux	
+	
Azure	Database	for	MySQL
Web	App	on	Linux	
+	
Azure	Database	for	PostgreSQL
Web App on Linux
17
デプロイ⽅法
Local Gitへプッシュ
GitHub / Bitbucket と連携
Docker Imageをビルドして差し替える
CIサービスとの連携
Docker Hub
Azure Container Registry
Visual Studio Team Services
Dockerをサポートしている CI SaaS
App Service on Linux
DEMO
現在未対応の機能
認証/承認
VNET統合/ハイブリッド接続
Webジョブ
App Service on Linux注意点
Docker Compose未サポート
独⾃のオーケストレーターを採⽤しているため、
Docker Composeは未サポート
Data Volumeの追加ができない
現状はボリューム追加未対応
Azure Container Registry
Azure Container Registry
• Docker プライベートレジストリ
• WindowsとLinuxのコンテナーイメージを単⼀のレジ
ストリで管理できる
• Azure Active Direcotryによるアクセス管理が可能
Azure Container Instances
Azure Container Instances
• 仮想マシン不要のコンテナサービス
• 即時起動でき、課⾦は秒単位
• Docker HubやAzure Container Registryからコ
ンテナイメージをプルできる
コマンド (Azure CLI 2.0 )
>	az group	create	--name	RGName --location	eastus
>	az container	create	--name	ContainerName --image	
microsoft/helloworld
--resource-group	RGName --ip-address	public
ポータル
ポータル
ポータル
Azure Container Service
Azure Container Service
• テンプレートを使⽤したDockerクラスターの構成を展開す
るサービス ※マネージドサービスではありません
• 選べるオーケストレーターはDocker Swarm、DC/OS、
Kubernetesで、Marathon,Chronosなどの各種ツール・
APIをサポート
Kubernetes
Kubernetes コンポーネント
コンポーネント 役割
apiserver kubernetesを操作するAPIの提供
controller-manager コンテナの状態・ノード管理など
etcd 設定情報の共有とサービス検出を⾏うKVS
kubelet 各ノード上のコンテナ作成/削除、ボリューム割り当
てなど
kubectl API経由でkubernetesを操作するクライアントツー
ル
proxy コンテナのネットワークルーティング・負荷分散
scheduler 各ノードにコンテナの割り当てなどを⾏う
ACS上でKubernetes を使うには
#	Azure	CLI	2.0	接続
#	az login
###	Kubernetes	コマンドラインクライアントのインストール
#	az acs kubernetes install-cli
###	Kubernetes	クラスター構成ファイルをダウンロード
#	az acs kubernetes get-credentials	--resource-group=$RESOURCE_GROUP	--name=$CLUSTER_NAME
###	クラスターノードの確認
#	kubectl get	nodes
###	コンテナーの実⾏
#	kubectl run	nginx –image	nginx
###	サービスの公開
#	kubectl expose	deployments	nginx --port=80	--type=LoadBalancer
Azure CLI 2.0の場合
Kubernetes ui
#	Kubernetes	ui 起動
#	kubectl proxy
Starting	to	serve	on	127.0.0.1:8001
起動してブラウザで
http://localhost:8001
に接続する
DC/OS
DC/OS	UI
Copyright©	2015,	JAZUG	All	Rights	Reserved. 38
Marathon	UI
Copyright©	2015,	JAZUG	All	Rights	Reserved. 39
Docker Swarm
Copyright©	2015,	JAZUG	All	Rights	Reserved. 41
Windows Server Container
Windows Server コンテナー
• Windows Server コンテナー
• プロセスと名前空間の分離テクノロジを使⽤してア
プリケーションの分離。
ホスト+ホスト上で実⾏されているすべてのコンテ
ナーとカーネルを共有。
• Hyper-V コンテナー
• 各コンテナーを最適化された仮想マシンで実⾏する。
Windows Serverコンテナーと⽐較して分離性が向
上。
Windows Server Containerの種類
43
項⽬ Windows Serverコンテナ Hyper-Vコンテナ
特徴 軽量・⾼速 ⾼い隔離性
コンテナ
起動:速い
実⾏:ホスト上のプロセス
起動:遅い
実⾏:Hyper-Vゲスト上のプ
ロセス
隔離性
• コンテナは同じホスト
OS上で実⾏される
• 他のコンテナの影響を受
ける可能性がある
• コンテナ単位で隔離される
ので独⽴性が⾼い
• 他のコンテナの影響をほぼ
受けない
Windows Server Container
44
ハイパーバイザー(Hyper-V)
Windows カーネル
Windows Server
コンテナ
システム
プロセス
アプリ
プロセス
Windows Server
コンテナ
システム
プロセス
アプリ
プロセス
Hyper-V Container
45
ハイパーバイザー(Hyper-V)
Hyper-V
Isolation
Hyper-V
Isolation
Windows カーネル Linux カーネル
Windows Server Linux
システム
プロセス
アプリ
プロセス
システム
プロセス
アプリ
プロセス
Windows Subsystem for Linux (WSL)
46
ハイパーバイザー(Hyper-V)
Hyper-V コンテナ Hyper-V コンテナ
WSL
Windows カーネル
WSL
Windows カーネル
Windows Server Linux
システム
プロセス
アプリ
プロセス
システム
プロセス
アプリ
プロセス
Windows Subsystem for Linux
Windows カーネル
Windows Server
コンテナ
システム
プロセス
アプリ
プロセス
Linux コンテナ
システム
プロセス
アプリ
プロセス
Nano Server
Nano Server
軽量なWindows OS
Full
Server	Core
Nano	Server
Nano Server
起動時間の圧倒的な速さ
Windows Server コンテナでの起動時間 1秒未満
Hyper-V コンテナでの起動時間 2秒未満
仮想マシンとしての起動時間 3秒未満
Nano Server
Docker HUBでも公開されています
Nano Server
• Insider Previewでサイズ削減版が公開され始め
ています。
• OSイメージだけで350MBと軽量となっているた
め、今後コンテナでの利⽤が期待できそうです。
まとめ
•複雑な構成でなければAzure Container Instanceや
App Service on LinuxはDocker⽤途には最適
• 管理はAzureに、スケーリングはお⼿軽に
• 普段使いのツールやサービスと連携できる
まとめ
• Web App on Linuxも簡単にコンテナを展開できるサー
ビスですが、Azure Container Instancesはさらに簡略
化されたコンテナ展開サービスです。
• コマンド1つで展開・削除ができるので是⾮お試しくだ
さい!
ご静聴ありがとうございました!

Microsoft azureで実装するwebserviceondocker