Windows Server で Windows コンテナが動くんです!ちょっとだけおさわりしてみたよ。

はじめに

くどうです。
Windows Server Container Previrewがでました。
Azureでは既に使えるようになっています。
さっそく使ってみましょう。
win16_000

ちなみにContaniertosとは?
They are an isolated, resource controlled, and portable operating environment.
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.
If you were inside a container, it would look very much like you were inside a freshly installed physical computer or a virtual machine. And, to Docker, a Windows Server Container can be managed in the same way as any other container.

ようはDockerと同じ(ような)ものです。

Containersを使ってみよう

Quick Startを参考にしています。
https://msdn.microsoft.com/virtualization/windowscontainers/quick_start/manage_powershell

最初に、ログイン後の画面を見ていきますがServer Coreのようにコマンドプロンプトが一つ。フルインストールから見るとやはり、さみしいですね。
win16_001

Quick Startを参考にしています。
https://msdn.microsoft.com/virtualization/windowscontainers/quick_start/manage_powershell

PowerShellを起動します。

C:Userslocaladmin>powershell
Windows PowerShell
Copyright (C) 2015 Microsoft Corporation. All rights reserved.

PS C:Userslocaladmin>

コマンドを確認してみます。
思ったより少ないです。

PS C:Userslocaladmin> Get-Command -Module Containers

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Function        Install-ContainerOSImage                           1.0.0.0    Containers
Function        Uninstall-ContainerOSImage                         1.0.0.0    Containers
Cmdlet          Add-ContainerNetworkAdapter                        1.0.0.0    Containers
Cmdlet          Connect-ContainerNetworkAdapter                    1.0.0.0    Containers
Cmdlet          Disconnect-ContainerNetworkAdapter                 1.0.0.0    Containers
Cmdlet          Export-ContainerImage                              1.0.0.0    Containers
Cmdlet          Get-Container                                      1.0.0.0    Containers
Cmdlet          Get-ContainerHost                                  1.0.0.0    Containers
Cmdlet          Get-ContainerImage                                 1.0.0.0    Containers
Cmdlet          Get-ContainerNetworkAdapter                        1.0.0.0    Containers
Cmdlet          Import-ContainerImage                              1.0.0.0    Containers
Cmdlet          Move-ContainerImageRepository                      1.0.0.0    Containers
Cmdlet          New-Container                                      1.0.0.0    Containers
Cmdlet          New-ContainerImage                                 1.0.0.0    Containers
Cmdlet          Remove-Container                                   1.0.0.0    Containers
Cmdlet          Remove-ContainerImage                              1.0.0.0    Containers
Cmdlet          Remove-ContainerNetworkAdapter                     1.0.0.0    Containers
Cmdlet          Set-ContainerNetworkAdapter                        1.0.0.0    Containers
Cmdlet          Start-Container                                    1.0.0.0    Containers
Cmdlet          Stop-Container                                     1.0.0.0    Containers
Cmdlet          Test-ContainerImage                                1.0.0.0    Containers

Containerを作成してちょっといじってみる

Get-ContainerImageコマンドでロードされているConteinerイメージを確認してみましょう。

PS C:Userslocaladmin> Get-ContainerImage

Name              Publisher    Version      IsOSImage
----              ---------    -------      ---------
WindowsServerCore CN=Microsoft 10.0.10514.0 True

Get-VMSwitchコマンドで利用可能なスイッチを確認します。

PS C:Userslocaladmin> Get-VMSwitch

Name           SwitchType NetAdapterInterfaceDescription
----           ---------- ------------------------------
Virtual Switch NAT

Conteinerの作成は New-Container コマンドを使います。
上記で確認したConteinerイメージとスイッチを指定し作成します。
$containerは後で利用します。

PS C:Userslocaladmin> $container = New-Container -Name "OrenoContainer" -ContainerImageName WindowsServerCore -SwitchName "Virtual Switch"

Get-Containerコマンドで、OrenoContainer が作成されたことを確認します。

PS C:Userslocaladmin> Get-Container

Name           State Uptime   ParentImageName
----           ----- ------   ---------------
OrenoContainer Off   00:00:00 WindowsServerCore

Containerを起動します。Start-Container コマンドでプロビジョビングされます。

PS C:Userslocaladmin> Start-Container -Name "OrenoContainer"

PowerShellでリモートでコマンドを打つには、Invoke-Command または、 Enter-PSSessionを使います。ここでは、Enter-PSSessionを使用し、Containerにセッションを張ります。Container IDは$containerストアを参照します。

PS C:Userslocaladmin> Enter-PSSession -ContainerId $container.id -RunAsAdministrator
[c0aa3e9e-5c8]: PS C:Windowssystem32>

[xxxxxxxx-xxx]これは、ContainerIDの上位11桁です。

Quick Startでは

$container.ContainerId

ですが

$container.id

でも接続できます。

これで接続完了です。

あとは、ServerCoreと使い方は一緒です。

[c0aa3e9e-5c8]: PS C:Windowssystem32> ipconfig

Windows IP Configuration


Ethernet adapter vEthernet (Virtual Switch-C0AA3E9E-5C8F-4D5E-BE79-0F890924BC46-0):

   Connection-specific DNS Suffix  . : lv69conhost.b7.internal.cloudapp.net
   Link-local IPv6 Address . . . . . : fe80::35b5:df86:74c2:167e%19
   IPv4 Address. . . . . . . . . . . : 172.16.0.5
   Subnet Mask . . . . . . . . . . . : 255.240.0.0
   Default Gateway . . . . . . . . . : 172.16.0.1
[c0aa3e9e-5c8]: PS C:Windowssystem32> ipconfig > c:ipconfig.txt

切断するときはexitで完了。

[c0aa3e9e-5c8]: PS C:Windowssystem32> exit

Stop-Containerで停止します。

PS C:Userslocaladmin> Stop-Container -Name "OrenoContainer"

新しいContainerイメージを作成します

イメージをContainerから作成します。スナップショットを取得する感じです。
新しいContainerイメージを作成するには New-ContainerImageコマンドを使います。

PS C:Userslocaladmin> $newimage = New-ContainerImage -ContainerName OrenoContainer -Publisher Demo -Name OrenoImage -Version 1.0
PS C:Userslocaladmin> Get-ContainerImage

Name              Publisher    Version      IsOSImage
----              ---------    -------      ---------
OrenoImage        CN=Demo      1.0.0.0      False
WindowsServerCore CN=Microsoft 10.0.10514.0 True

New-ContainerコマンドでContainerを作成します。

PS C:Userslocaladmin> $newcontainer = New-Container -Name "NewOrenoContainer" -ContainerImageName OrenoImage -SwitchName "Virtual Switch"

Containerが作成されたか確認します。

PS C:Userslocaladmin> Get-Container

Name              State Uptime   ParentImageName
----              ----- ------   ---------------
OrenoContainer    Off   00:00:00 WindowsServerCore
NewOrenoContainer Off   00:00:00 OrenoImage

作成したContainerをスタートします。

PS C:Userslocaladmin> Start-Container $newcontainer

Containerに接続します。

PS C:Userslocaladmin> Enter-PSSession -ContainerId $newcontainer.ContainerId -RunAsAdministrator

切断します。

[d08dd716-e33]: PS C:Windowssystem32> exit

起動しているContainerをすべて停止します。

PS C:Userslocaladmin> Get-Container | Stop-Container
WARNING: The container is already in the specified state.

Containerを削除します

Containerを削除するには、Remove-Containerコマンドを使用します。
PS C:Userslocaladmin> Get-Container |Remove-Container -Force

-Forceオプションを付けない場合は、確認は必要となります。

PS C:Userslocaladmin> Get-Container |Remove-Container

Confirm
Are you sure you want to remove container "NewOrenoContainer"?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"): y

Containerイメージを削除するには、Remove-ContainerImage

PS C:Userslocaladmin> Get-ContainerImage -Name OrenoImage | Remove-ContainerImage -Force

まとめ

ちょっとだけ本当にちょっとだけ触ってみましたが、Dockerよりコマンドもシンプルな感じがします。
使い勝手はまだ分かりませんが、良い感じがします。
ではでは。