この記事は Microsoft Azure Advent Calendar 2015 23日目の記事です。
はじめてアドベントカレンダーなるものを書きます。
12月上旬、社内でAzureもくもく会を行いました。
これまであまり触れたことないサービスについて調べてみようと思い、Windows Server Containerをネタにしました。
今回の記事はWindows Server Containerに入門してみたという内容です。
(もくもく会の報告も兼ねる!)
Windows Server Containerとは
Windows Serverのコア機能のみを搭載したOSをコンテナ化したものです。
Windows Server 2016 Technical Preview 3から利用することが可能です。
コンテナといえばDockerをイメージされる方が多いと思います。
Windows Server Containerも、Windows用のDockerエンジン上で管理・動作します。
Windows Server 2016には、2つのコンテナがあります。が、今回はHyper-V Containerは省略します。
Windows Server Containerを勉強するには
何はともあれ、まずはMSDNのチュートリアルを試すことが良いと思います。
Windows Server Containerのチュートリアルは英語ですが、キャプチャを交えて紹介されていますので、英語が苦手な方でも取り組むことができると思います。
Windows Containers Documentation
環境の準備
前述の通り、Windows Server Containerを利用するには、Windows Server 2016 Technical Preview 3以降が必要となります。
Windows Server 2016 Technical Previewを用意するには、ISOをダウンロードして仮想マシンを作成してもいいでしょうが、今回はさくっとAzure仮想マシンを利用します。
AzureにはMarketplaceと言われる、様々なアプリケーションがインストール済の仮想マシンイメージを公開している画面があります。
その中からWindows Server 2016 Technical Preview 4を選択し、仮想マシンを作成しましょう。
仮想マシンが立ち上がったらリモートデスクトップで接続します。
Azureポータルの仮想マシン管理のメニューから「接続」をクリックすると、その仮想マシンにリモートデスクトップ接続するためのファイルをダウンロードすることができます。
コマンドでコンテナを扱う
Windows Server Containerをコマンドで扱うには2つの方法があります。
PowerShellです。
Windows Server Containerを扱うためのPowerShellコマンドレットが予めインストールされているので、それを使用します。
Windows Containers Quick Start - PowerShell
コマンドレットについては下記リンクを参照して下さい。
Containers Cmdlets
コンテナイメージを取得する
PS C:\Users\matsumura> Get-ContainerImage Name Publisher Version IsOSImage ---- --------- ------- --------- WindowsServerCore CN=Microsoft 10.0.10586.0 True
コンテナイメージからコンテナを作成する
PS C:\Users\matsumura> New-Container -Name TP4Demo -ContainerImageName WindowsServerCore -SwitchName "Virtual Switch" Name State Uptime ParentImageName ---- ----- ------ --------------- TP4Demo Off 00:00:00 WindowsServerCore
コンテナを開始する/停止する
PS C:\Users\matsumura> Start-Container -Name TP4Demo PS C:\Users\matsumura> Stop-Container -Name TP4Demo
新しいコンテナイメージを作成する
PS C:\Users\matsumura> New-ContainerImage -ContainerName TP4Demo -Name WindowsServerCoreIIS -Publisher Demo -Version 1.0 Name Publisher Version IsOSImage ---- --------- ------- --------- WindowsServerCoreIIS CN=Demo 1.0.0.0 False PS C:\Users\matsumura> Get-ContainerImage Name Publisher Version IsOSImage ---- --------- ------- --------- WindowsServerCoreIIS CN=Demo 1.0.0.0 False WindowsServerCore CN=Microsoft 10.0.10586.0 True
コンテナやコンテナイメージを削除する
PS C:\Users\matsumura> Remove-Container -Name TP4Demo PS C:\Users\matsumura> Remove-ContainerImage -Name WindowsServerCoreIIS
Docker
Windows Server 2016 Technical PreviewにはDockerがインストールされています。
なのでdockerコマンドでもWindows Server Containerを扱うことができます。
Windows Containers Quick Start - Docker
Dockerを利用したことがある人は、こちらのほうがイメージがつきやすいのではないでしょうか?
なお、Windows Server 2016 Technical PreviewにインストールされているDockerは、GitHubに公開されているDockerのバージョンと異なることに注意して下さい。
PS C:\Users\matsumura> docker version Client: Version: 1.10.0-dev API version: 1.22 Go version: go1.5.1 Git commit: 59a341e Built: Fri Nov 13 17:23:07 UTC 2015 OS/Arch: windows/amd64 Server: Version: 1.10.0-dev API version: 1.22 Go version: go1.5.1 Git commit: 59a341e Built: Fri Nov 13 17:23:07 UTC 2015 OS/Arch: windows/amd64
「WindowsにDockerがインストールされてるから、これでUbuntuとかたてれるな!Boot2Dockerみたいなもんやろ!」と思いましたが、Windows用のDockerエンジンのためLinuxOSを実行させることはできないようです。
PS C:\Users\matsumura> docker pull ubuntu:latest Pulling repository docker.io/library/ubuntu Error: image library/ubuntu:latest not found
もちろんDockerfileからコンテナを作成することもできます。
FROM windowsservercore:latest MAINTAINER Yuta Matsumura "matsumura@example.com" RUN dism /online /enable-feature /all /featurename:iis-webserver /NoRestart RUN echo "Hello World - Dockerfile" > c:\inetpub\wwwroot\index.html
PS C:\Users\matsumura\iis> docker build -t iis . Sending build context to Docker daemon 2.56 kB Step 1 : FROM windowsservercore:latest ---> 6801d964fda5 Step 2 : MAINTAINER Yuta Matsumura "matsumura@example.com" ---> Running in 279bc98c968b ---> 2d9e54d328cf Removing intermediate container 279bc98c968b Step 3 : RUN dism /online /enable-feature /all /featurename:iis-webserver /NoRestart ---> Running in aa7b0e18b1ec Deployment Image Servicing and Management tool Version: 10.0.10586.0 Image Version: 10.0.10586.0
まとめと今後の課題
MSDNのチュートリアルに沿うと、Windows Server Containerについて少し理解することができるようになりました。
ただコンテナを作って終わりでは面白くないので、継続的インテグレーション(CI)に利用できるような使い道を探ってみたいと思います。
Visual Studio Team Services(VSTS)のPowerShellデプロイ機能を利用して、Windows Server Containerをバンバン作ってみようと試しましたが、VSTSとAzure仮想マシンの接続がうまくいかず断念したため、年末年始で再チャレンジしてみたいです。