13. Windowsコンテナの使用
• Windows Serverコンテナ
– プロセスと名前空間の分離テクノロジを使用してアプリケーション
を分離
– Windows Server 2016 Base with Containers AMIを用意
• Hyper-Vコンテナ
– 専用の仮想マシン上で各コンテナを実行することで分離性を向上
– Amazon EC2上では実行できない
14. サポートされるベースイメージ
ホスト オペレーティン
グ システム
Windows Server コン
テナ Hyper-V コンテナ
Windows Server 2016
with Desktop
Server Core / Nano
Server
Server Core / Nano
Server
Windows Server 2016
Core
Server Core / Nano
Server
Server Core / Nano
Server
Nano Server Nano Server Server Core / Nano
Server
Windows 10 Pro /
Enterprise
利用不可 Server Core / Nano
Server
14
16. (参考)Docker for Windows
• Docker社から無償で提供されているDocker for
Windowsを使用すると、Windows上でLinuxコンテ
ナが利用可能
• Windows 10 Pro/Enterprise 64bit(1511
November Update, Build 10586以降)のHyper-V
でLinux仮想マシン(MobyLinuxVM)を動作させる
• Docker CLIでWindows 10上のHyper-Vコンテナと
の切り替えが可能
16
19. Dockerfileのサンプル
# Sample Dockerfile
# Indicates that the windowsservercore image will be used as the base image.
FROM microsoft/windowsservercore
# Metadata indicating an image maintainer.
MAINTAINER jshelton@contoso.com
# Uses dism.exe to install the IIS role.
RUN dism.exe /online /enable-feature /all /featurename:iis-webserver /NoRestart
# Creates an HTML file and adds content to this file.
RUN echo "Hello World - Dockerfile" > c:inetpubwwwrootindex.html
# Sets a command or process that will run each time a container is run from the new
image.
CMD [ "cmd" ]
19
21. Windows Server 2016 インスタンスでの Docker コン
テナの競合
• Windows Server 2016インスタンスでDockerを実行するため
には、”Microsoft Windows Server 2016 Base with
Container” AMIを使用する必要がある
• 別のWindows Server 2016 AMIからインスタンスを作成する
場合、DockerをインストールしてからSysprepを実行するとイ
ンスタンスは正しく起動されない
• EC2のデフォルトVPC(172.31.0.0/16)とDocker用のCIDR
(172.16.0.0/12)がコンフリクトするのをふせぐため
daemon.jsonで172.17.0.0/16を指定している
23. しかし、複数台のクラスタ上で管理するのは困難
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
AZ 1 AZ 2
AZ 3
41. Windowsコンテナの開始(1/2)
• Windowsクラスタを作成
• Windowsコンテナインスタンスをクラスタで起動
– Microsoft Windows Server 2016 Base with Containers AMIを
選択
– ユーザーデータでPowerShellスクリプトを実行することで
Windowsコンテナインスタンスを設定
– WindowsコンテナでTaskのIAMロールの機能を使用するには
ECS_ENABLE_TASK_IAM_ROLE環境変数の値をtrueに置き換え
る
41
$ aws ecs create-cluster --cluster-name windows
45. タスク用のIAMロールのブートストラップスクリプト
# Copyright 2014-2016 Amazon.com, Inc. or its affiliates. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"). You may
# not use this file except in compliance with the License. A copy of the
# License is located at
#
# http://aws.amazon.com/apache2.0/
#
# or in the "license" file accompanying this file. This file is distributed
# on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
# express or implied. See the License for the specific language governing
# permissions and limitations under the License.
$gateway = (Get-WMIObject -Class Win32_IP4RouteTable | Where { $_.Destination -eq
'0.0.0.0' -and $_.Mask -eq '0.0.0.0' } | Sort-Object Metric1 | Select
NextHop).NextHop
$ifIndex = (Get-NetAdapter -InterfaceDescription "Hyper-V Virtual Ethernet*" | Sort
-Object | Select ifIndex).ifIndex
New-NetRoute -DestinationPrefix 169.254.170.2/32 -InterfaceIndex $ifIndex -NextHop
$gateway
45