windows...
TRANSCRIPT
Windows コンテナ始動
Powered by MVPs
1
GMOインターネット株式会社 樋口 勝一(InvokeV 代表)
Cloud and Datacenter Management
本日のメニュー
Windows Server 2016 Technical Preview 3でWindowsコンテナが使えるようになりました。
(昨日のTP4で、あわててアップデート。)
そこで・・・
• コンテナの仕組みや、メリット、デメリットなどを探っていきます。
• コンテナの操作について現時点で出来ること。
• コンテナ技術がもたらすものについての考察。
• コンテナ デモ etc.
コンテナとは?
• コンテナとは
“Basically, a container is an isolated place where an application can run without affecting the rest of the system and without the system affecting the application. Containers are the next evolution in virtualization.“
“Windows Containers についての詳細” より(https://msdn.microsoft.com/en-us/virtualization/windowscontainers/about/about_overview)
「コンテナは、アプリケーションがシステムの他の部分に影響を与えることなく、また、アプリケーションに影響を与えるようなシステム無しで実行することができる独立した領域です。コンテナは仮想化の次の進化です。」
Windows Containers
• Windows Containers
• Windows Server Containers
• Hyper-V Containers
Windows コンテナ を構成するもの
• コンテナホスト• コンテナが稼働できるように構成された、物理コンピューター又は、仮想化マシン• OSはWindows Server 2016 TP4
• サンドボックス• テンプレートから作成されたコンテナの変更分を保存• アプリケーションのインストール分、レジストリ、ファイルの差分
• レポジトリ• カスタマイズしたコンテナからコンテナイメージを作成して、レポジトリに保管が可能• 保管したコンテナイメージから、コンテナを作成することで再利用が可能
• コンテナ管理ツール• PowerShell• Dockerコマンド• WMI• リモートデスクトップ
Windows コンテナ を構成するもの
• コンテナイメージ• コンテナのテンプレートとなるもの• ユーザーがカスタマイズしたコンテナを元に、新たにコンテナイメージを作成することができる
• コンテナOSイメージ• 全てのコンテナの元イメージとなるもの• 既定では “WindowsServerCore” “NanoServer”
• 注意• コンテナの親となるコンテナイメージが削除されてしまうと、コンテナは使えなくなる
• 一度作ったコンテナイメージは修正不可• チェックポイントのようなもの• 現時点ではコンテナイメージの結合はできない(Marge Join)
コンテナイメージ と コンテナ
• コンテナOSイメージからコンテナを作成
• IISをインストールしてコンテナをカスタマイズ
• カスタマイズされたコンテナを元に新たにコンテナイメージを作成
コンテナの再利用
•作成したコンテナはコンテナイメージとして保存して、再利用が可能
コンテナのイメージ(主観)
Hello!
仮想マシンと異なる点
•仮想マシン• 仮想化され割り当てられたハードウェア、OSは全て占有
• コンテナ• 割り当てられた仮想CPU、メモリ、ネットワークは占有
• HDDは親のコンテナイメージとの差分ファイル(小容量)
• OS、アプリケーションなど共通部分は親のコンテナイメージを参照
• 仮想マシンに比べ構築、展開、起動が速い
• 作り直しが簡単
コンテナのメリット・デメリット
• メリット• コンテナごとにOSカーネルが読み込まれるわけではないので、仮想マシンに比べて必要とするメモリ、 CPU, HDDリソースが少ない
• コンテナ自体は小さい差分ファイルなので、構築、展開などが早い
• 起動時の読み込みが小さいので、起動が速い
• OSのインストールなどが不要で、必要な変更部分のみ構築すればOK
• サーバー管理者の手を借りずにアプリケーション開発者自身が、配置する、テストする、公開する、破棄するといった一連のオペレーションに要する時間と手間が格段に小さくなる
• デメリット• 親コンテナに依存するため、コンテナが派生し続けると依存関係が複雑になる
• 利用できるOSは現時点ではWindowsServerCoreのみ
• 親コンテナイメージのセキュリティー脆弱性や問題点が、依存しているすべてのコンテナに影響する
• 既存の仮想マシンベースのシステムに代わるべき明確な理由がない
コンテナ技術の効用
• サーバー管理者• OSのインストールや、機能の追加など面倒な作業が軽減される
• サービス提供や更新のためのプロセスが削減される
•開発者• 開発者自身が、「作る、配置する、テストする、公開する、破棄する」といった一連のオペレーションを行うことが可能
• オペレーションに要する時間が、格段に短くなる
• クラウドサービスに適したマイクロサービスとして、アプリケーションを開発することが可能
• コード修正無しにアプリケーションを様々なプラットフォームで実行可能• パブリッククラウド プライベートクラウド デスクトップ ノートPC etc.
• サービス提供者• 新サービス提供の可能性
• 既存PaaSの新たなプラットフォーム
コンテナホストの構築
• Microsoft Azure• 仮想マシンイメージとして Windows Server Container Preview
• リモートデスクトップで接続
• コンテナホスト仮想マシンをダウンロード• Hyper-V上にスクリプトで仮想マシンを自動作成
• 参考: https://msdn.microsoft.com/en-us/virtualization/windowscontainers/quick_start/container_setup
• TP4をダウンロードしてインストール(物理マシン&仮想マシン GUI可)• スクリプトをダウンロード&実行(役割と機能の追加 NG)
• コンテナサービスの有効化とコンテナOSイメージのダウンロード
wget -uri https://aka.ms/tp4/Install-ContainerHost -OutFileC:¥Install-ContainerHost.ps1
C:¥Install-ContainerHost.ps1 (-HyperV)
PowerShell によるコンテナの操作
• コンテナ関連のコマンドの確認
• コンテナイメージの確認
• C:¥ProgramData¥Microsoft¥Windows¥Images• C:¥ProgramData¥Microsoft¥Windows¥Hyper-V¥Container Image Store
• コンテナの確認
• C:¥ProgramData¥Microsoft¥Windows¥Hyper-V¥Containers
Get-Command -Module Containers
Get-ContainerImage
Name Publisher Version IsOSImage---- --------- ------- ---------NanoServer CN=Microsoft 10.0.10586.0 TrueWindowsServerCore CN=Microsoft 10.0.10586.0 True
Get-Container
PowerShell によるコンテナの操作
• コンテナの作成
• コンテナの起動
• コンテナの停止
• コンテナの削除
• 削除する場合はコンテナはオブジェクトで指定
• 同一名の場合はIDで指定
Start-Container -Name "MyContainer"
Start-Container -Name "MyContainer"
New-Container -Name "MyContainer" -ContainerImageName"WindowsServerCore" -SwitchName "Virtual Switch"
Get-Container -Name "MyContainer" | Remove-Container –Force
PowerShell によるコンテナの操作
• コンテナイメージの作成
-Publisher:コンテナイメージの作成者の名前-Name:コンテナイメージ名-Version:任意のバージョン
• 既存コンテナからコンテナイメージを作成
New-ContainerImage -ContainerName “MyContainer” -Publisher “WIN1” -Name “MyContainerImage” -Version 1.0.0.0
Get-ContainerImage
Name Publisher Version IsOSImage---- --------- ------- ---------WindowsServerCore CN=Microsoft 10.0.10514.0 True MyContainerImage CN=WIN1 1.0.0.0 False
PowerShell によるコンテナの操作
• コンテナイメージのエクスポート
• コンテナイメージのインポート
• コンテナイメージの削除
• 削除するコンテナイメージはオブジェクトで指定
• 同一名の場合はIDで指定
Get-ContainerImage -Name "MyContainerImage" | Export-ContainerImage -Path "C:¥"
Import-ContainerImage -Path "C:¥CN=WIN1_ MyContainerImage_1.0.0.0.APPX"
Get-ContainerImage -Name “MyContainerImage”| Remove-ContainerImage –Force
PowerShell によるコンテナの操作
• Enter-PSSession
• コンテナにPowerShellのセッションが張られると[ContainerName]:PS C:¥Windows¥system32>のようなプロンプトとなる以後のコマンドはコンテナ内のローカルで実行されることになる
• Invoke-Command
• コンテナ内で実行したいコマンドを-ScriptBlock { }で指定する
$Container = Get-Container -Name "MyContainer”
Enter-PSSession -ContainerId $Container.ContainerId –RunAsAdministrator
[MyContainer]: PS C:¥Windows¥system32>
$Container = Get-Container -Name "MyContainer“
Invoke-Command -ContainerId $Container.ContainerId -ScriptBlock {ipconfig}
PowerShell によるコンテナの操作
• その他
• Add-ContainerNetworkAdapter
• Add-ContainerSharedFolder
• Set-ContainerMemory
• Set-ContainerProcessor
• Test-ContainerImage ?
• etc.
リモートデスクトップ によるコンテナの操作
• リモートデスクトップ(TP3)• リモートデスクトップを有効にする(リモートのPowerShellから設定)
[MyContainer]: PS C:¥Windows¥system32> net user Administrator P@ssword
[MyContainer]: PS C:¥Windows¥system32> net user administrator /active:yes
サーバーマネージャーによるコンテナの操作
•今のところNG
• コンテナホストを透過してコンテナは作られているため、マシン名がコンテナホストとコンテナと同じ
• GUIツールでのリモート管理は今後要調査
IISコンテナイメージの作成(TP4 英語版)
• コンテナの作成~起動
• セッション接続
• IISのインストール(※TP4の日本語版ではWebサーバーの追加がエラーとなるので英語版で実行する)
$Container = New-Container -Name "IIS Container" -ContainerImageName“WindowsServerCore” -SwitchName "Virtual Switch“
Start-Container $Container
Install-WindowsFeature web-server
Enter-PSSession -ContainerId $Container.ContainerId –RunAsAdministrator
IISコンテナイメージの作成
• PowerShellのセッションの接続を閉じる~コンテナを停止
• IISコンテナを元に、コンテナイメージを作成
• コンテナイメージを確認
Exit
Stop-Container $Container
New-ContainerImage -ContainerName $Container.Name -Publisher "WIN1" -Name "IISContainerImage" -Version 1.0
Get-ContainerImage
Name Publisher Version IsOSImage---- --------- ------- ---------WindowsServerCore CN=Microsoft 10.0.10514.0 True IISContainerImage CN=WIN1 1.0.0.0 False MyContainerImage CN=WIN1 1.0.0.0 False
IISコンテナの公開
• コンテナはコンテナホストとNATを使って接続• コンテナホストIP:172.16.0.1• コンテナIP:172.168.0.2~
• NATの設定
-NatName:NAT名-Protocol:HTTPの公開なのでTCP-ExternalIPAddress:0.0.0.0-InternalIPAddress:IISコンテナのIPアドレス-InternalPort:コンテナのWebサイトのポート番号-ExternalPort:公開するポート番号
Add-NetNatStaticMapping-NatName "ContainerNAT" -Protocol TCP -ExternalIPAddress 0.0.0.0 -InternalIPAddress 172.16.0.2 -InternalPort 80 -ExternalPort 80
IISコンテナの公開
• コンテナホストのファイヤーウォールでTCP80番を開く• GUIの「Windowsファイアウォール」でも設定可
• NATの接続状況
if (!(Get-NetFirewallRule | where {$_.Name -eq "TCP80"})) {New-NetFirewallRule -Name "TCP80" -DisplayName "HTTP on TCP/80" -Protocol tcp -LocalPort 80 -Action Allow -Enabled True}
Get-NetNatSession
NatName : ContainerNATInternalRoutingDomainId : {b1062982-2b18-4b4f-b3d5-a78ddb9cdd49}CreationTime : 2015/11/09 21:21:54Protocol : 6InternalSourceAddress : 172.16.0.2InternalSourcePort : 80InternalDestinationAddress : 61.10.108.3InternalDestinationPort : 38350ExternalSourceAddress : 210.172.132.1ExternalSourcePort : 80ExternalDestinationAddress : 61.10.108.3ExternalDestinationPort : 38350
IISコンテナの公開
コンテナ技術がもたらすもの
• ハイブリッドクラウドを促進• より小さく、アプリケーションのプラットフォームを選ばないコンテナであれば、プライベートクラウドとパブリッククラウドを短時間で簡単に行き来できる
•開発者と運用者が連携してアプリケーション開発を行う「DevOps」の足掛かり
• アプリケーションの開発、展開にともなう効率アップ、ストレス削減
• マイクロサービス化によって、短いサイクルでのアプリケーションのアップデート
• OS領域を保護することで、より安定したサービスの提供
•新たなPaaSのプラットフォーム
• サービス提供者にとって、より低コストのWebホスティングが提供可能
• OSに影響を与えないコンテナベースによるアプリケーションの配布
• コンテナイメージを提供する新たなサービス
DEMO
予告
• InvokeV & Tech Fielders 共催 Container 勉強会
• 2015年12月1日 18:00 ~ 20:00
• https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032695195&Culture=ja-JP&community=0
• Windows Server Container の今を知る- Windows Server Container 概説 (高添) 15分- PowerShell で Container 操作 (樋口) 30分- WMI で Container 操作 (樋口) 30分- Docker Command で Container 操作 (高添) 20分- もし間に合えば Hyper-V Container (高添) 20分- Q&A
• InvokeVnaらではのWindows Server Container の開発手法や、コンテナ裏話もあります
出展とリンク
• Windows Server 2016 Technical Preview 4https://www.microsoft.com/en-us/evalcenter/evaluate-windows-server-technical-preview
• Windows Containershttps://msdn.microsoft.com/virtualization/windowscontainers/containers_welcome
• Preparing a physical machine or an existing virtual machine for Windows Containershttps://msdn.microsoft.com/en-us/virtualization/windowscontainers/quick_start/inplace_setup
• InvokeV(Facebook)https://www.facebook.com/groups/749187091776055/