コンテンツにスキップ
最終更新日: 2020年1月11日

Windowsのコンテナ

Host Compute Service(HCS)

Host Conpute ServiceはWindowsでコンテナを扱うためのAPIを提供するサービスです。1 このサービスが、Linuxでのcontainerdとruncにあたる機能を提供します。
Windowsのコンテナには大きく2種類あり、Windowsコンテナ(プロセス分離モード)とHyper-Vコンテナ(Hyper-V分離モード)と呼ばれています。1

2019/12現在、各モードのコンテナが利用できるOSバージョン/エディションは下記の通りです。

  • Windows Server 2016
  • Windows Server 2019
  • Windows 10 Pro バージョン 1607以降
  • Windows 10 Enterprise バージョン 1607以降
    • ただし、Windowsコンテナの実行は バージョン 1809以降のみ可能

コンテナの操作にはdockerコマンドを利用しますが、詳細についてはここでは割愛します。

hcsdiag

Windowsコンテナの操作にはdockerを利用する場合が多いが、その他にhcsdiag.exeというものが存在します。
しかしながら、コマンドのリファレンスが現時点(2019/12)で見つからないため、そのオプションと実行した結果をここに記載します。

hcsdiag list

英語での説明:

'Lists running containers and VMs.'

実行した結果:
 コンテナ or VMの一覧が表示される。
 項目は、左から「コンテナ/VMの種類」「ステータス」「GUID」「作成したサービス?」と予想。

hcsdiag list

上から、「Hyper-V コンテナ テンプレート」「Hyper-V コンテナ」「WSL2用仮想マシン」「Hyper-V仮想マシン」の4項目が表示されている。
なお、4つめの項目が「VMMS」となっている「Hyper-V仮想マシン」も起動しているが、「ステータス」は「Running」になっていない。
理由は分からない。

PS > hcsdiag list
0ACF54A5-CEEF-454A-BDC7-56D2C9A223B9
    Hyper-V Container Template, Created, 0ACF54A5-CEEF-454A-BDC7-56D2C9A223B9

0c5b099512a9041d71b54544680416ac497a96b40206958a118777b2592393f6
    Hyper-V Container,          Running, 2A0A7D9B-25D0-4C18-B620-4FC1E92740F9, docker

3F098403-148F-49FE-9EA3-1729298CD01F
    VM,                         Running, 3F098403-148F-49FE-9EA3-1729298CD01F, WSL

EB83922C-E87B-45FF-B2A3-BBB773644DCA
    VM,                         Created, EB83922C-E87B-45FF-B2A3-BBB773644DCA, VMMS

**hcsdiag exec [-uvm] <GUID> [command line] **

英語での説明:

'Executes a process inside the container.'

実行した結果:
 コンテナの場合はプロセスを実行できたが、VMの場合はできない。

hcsdiag exec

PS > hcsdiag exec 0c5b099512a9041d71b54544680416ac497a96b40206958a118777b2592393f6 cmd /c "dir C:\"
    Volume in drive C has no label.
    Volume Serial Number is C280-441F

    Directory of C:\

11/27/2019  06:55 PM             5,510 License.txt
12/25/2019  05:08 PM    <DIR>          Users
12/25/2019  05:08 PM    <DIR>          Windows
               1 File(s)          5,510 bytes
               2 Dir(s)  21,299,453,952 bytes free
PS > hcsdiag exec 3F098403-148F-49FE-9EA3-1729298CD01F bash
PS > $?
False
PS > hcsdiag exec 3F098403-148F-49FE-9EA3-1729298CD01F cmd
PS > $?
False

hcsdiag console [-uvm] <GUID>

英語での説明:

'Launches an interactive console inside the container.'

実行した結果:
 コンテナの場合はコマンドプロンプトが表示されたが、VMの場合は何も起きない。

hcsdiag read

PS > hcsdiag console 0c5b099512a9041d71b54544680416ac497a96b40206958a118777b2592393f6
Microsoft Windows [Version 10.0.19035.1]
(c) 2019 Microsoft Corporation. All rights reserved.

C:\Windows\system32>

**hcsdiag read [-uvm] <GUID> [host file] **

英語での説明:

'Reads a file from the container and outputs it to standard output or a file.'

実行した結果:
 コンテナの場合はコンテナ内のファイルが表示されたが、VMの場合は何も起きない。

hcsdiag read

PS > hcsdiag read 0c5b099512a9041d71b54544680416ac497a96b40206958a118777b2592393f6 'C:\License.txt'
MICROSOFT SOFTWARE SUPPLEMENTAL LICENSE
FOR WINDOWS CONTAINER BASE IMAGE

This Supplemental License is for the Windows Container Base Image ("Container Image").  If you comply with the terms of this Supplemental License you may use the Container Image as described below.

   ≪以下略≫

hcsdiag write [-uvm] [host file] <GUID>

英語での説明:

'Writes from standard input or a host file to a file in the container.'

実行した結果:
 コンテナの場合はコンテナ内のファイルが作成されたが、VMの場合は何も起きない。

hcsdiag write

PS > hcsdiag write 0c5b099512a9041d71b54544680416ac497a96b40206958a118777b2592393f6 'C:\Users\ContainerUser\hoge.txt'
hogehoge
hoge
PS > hcsdiag exec 0c5b099512a9041d71b54544680416ac497a96b40206958a118777b2592393f6 cmd /c 'more C:\Users\ContainerUser\hoge.txt'

hogehoge
hoge

hcsdiag kill <GUID>

英語での説明:

'Terminates a running container.'

実行した結果:
 コンテナの場合は強制終了、WSLのVMの場合も強制終了された。Hyper-V仮想マシンの場合は、仮想マシンが強制リセットされた。

hcsdiag kill

PS > hcsdiag list
0ACF54A5-CEEF-454A-BDC7-56D2C9A223B9
    Hyper-V Container Template, Created, 0ACF54A5-CEEF-454A-BDC7-56D2C9A223B9

0c5b099512a9041d71b54544680416ac497a96b40206958a118777b2592393f6
    Hyper-V Container,          Running, 2A0A7D9B-25D0-4C18-B620-4FC1E92740F9, docker

3F098403-148F-49FE-9EA3-1729298CD01F
    VM,                         Running, 3F098403-148F-49FE-9EA3-1729298CD01F, WSL

EB83922C-E87B-45FF-B2A3-BBB773644DCA
    VM,                         Created, EB83922C-E87B-45FF-B2A3-BBB773644DCA, VMMS

PS C:\> hcsdiag kill 0c5b099512a9041d71b54544680416ac497a96b40206958a118777b2592393f6
PS C:\> hcsdiag kill 3F098403-148F-49FE-9EA3-1729298CD01F
PS C:\> hcsdiag kill EB83922C-E87B-45FF-B2A3-BBB773644DCA
PS C:\> hcsdiag list
0ACF54A5-CEEF-454A-BDC7-56D2C9A223B9
    Hyper-V Container Template, Created, 0ACF54A5-CEEF-454A-BDC7-56D2C9A223B9

EB83922C-E87B-45FF-B2A3-BBB773644DCA
    VM,                         Created, EB83922C-E87B-45FF-B2A3-BBB773644DCA, VMMS

PS C:\> hcsdiag kill EB83922C-E87B-45FF-B2A3-BBB773644DCA
PS C:\> hcsdiag list
0ACF54A5-CEEF-454A-BDC7-56D2C9A223B9
    Hyper-V Container Template, Created, 0ACF54A5-CEEF-454A-BDC7-56D2C9A223B9

EB83922C-E87B-45FF-B2A3-BBB773644DCA
    VM,                         Created, EB83922C-E87B-45FF-B2A3-BBB773644DCA, VMMS

hcsdiag share [-uvm] [-readonly] <GUID>

英語での説明:

'Shares a host folder into the container.'

実行した結果:
 コンテナの場合はコンテナにフォルダが共有された。VMの場合は何も起きない。

hcsdiag share

PS > hcsdiag share 0c5b099512a9041d71b54544680416ac497a96b40206958a118777b2592393f6 C:\temp Z:
PS > hcsdiag exec 0c5b099512a9041d71b54544680416ac497a96b40206958a118777b2592393f6 cmd /c "dir Z:\"
 Volume in drive Z has no label.
 Volume Serial Number is 9A79-25D9

 Directory of Z:\

12/25/2019  07:25 PM    <DIR>          .
12/25/2019  07:25 PM    <DIR>          ..
               0 File(s)              0 bytes
               2 Dir(s)  199,435,386,880 bytes free