fbpx

[和訳] Windows 10 Fall Creators UpdateとDocker for Windowsデスクトップ18.02 #docker

この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。

本稿は Docker for Windows Desktop 18.02 with Windows 10 Fall Creators Update (2018/2/12) の和訳です。

Docker for Windowsデスクトップ18.02 の代表的な機能として、自動化Kubernetesクラスタを選択できるようになりました。お好みのKubernetesツールを使って、ご自身のWindowsデスクトップ上でLinuxコンテナを管理するためのネイティブサポートが可能となりました。これは大きな変化です。お使いのDocker for WindowsデスクトップをLinuxコンテナモードに設定するには、システムトレイのクジラのアイコンを使いSettings(設定)メニューからKubernetesサポートを有効にしてください。現行のWindows 10 Insiderビルドをお使いの場合は、Docker for WindowsデスクトップのLinuxコンテナに影響を及ぼす Windowsプラットフォームに関する問題 にご注意ください。

それだけではありません。この記事ではMicrosoft社のLinux containers on Windows (LCOW) 向けの、実験的なサポートに関するさらなる進歩についてもご紹介します。Docker for Windows 18.02では現在、単一のDockerデーモンで、LCOWからLinuxコンテナとWindowsコンテナを並行して実行できるようになりました。

その他のLCOWにおける進化:

まず入手しよう

Docker for Windowsデスクトップ18.02は、Edgeチャンネルリリースです。ご自身のDocker for WindowsデスクトップをEdgeチャンネルまたはNightlyチャンネルに設定している場合は、自動で更新が行われます。Stableチャンネルのユーザは更新情報を受け取るために、SettingダイアログからEdgeチャンネルまたはNightlyチャンネルへ切り替えてください。

注意: LCOWはHyper-V Isolation機能が必要です。そのためWindows 10はベアメタルまたは、Hyper-VあるいはAzure Dv3およびEv3インスタンスなどのネストをサポートする仮想化プラットフォームで実行しなければなりません。実行手順は実行を行う仮想化プラットフォームによって異なります。

試してみよう

Docker for Windowsデスクトップの前バージョンには3つの操作モードがありました。Windowsのネイティブサポートにより実行するWindowsコンテナモード、Hyper-Vが管理するLinux VMから実行するLinuxコンテナモード、そしてLCOWモードです。バージョン18.02以降では、独立したLCOWモードではなく、WindowsモードでWindowsコンテナとLinuxコンテナの両方を実行するためにLCOWを使用するようになりました。既存のLinuxモードは、LCOWによるデプロイが使われている間は機能として残しておきます。モードを切り替えるには、システムトレイにあるクジラのアイコンを使用します。

LCOWは1つのDocker Engineが2つ以上のOS向けのイメージを実行できるという本質的な概念を導入します。初めてイメージを取得する際は、イメージとホストが実行するOSを適切に一致させるための指示が必要です。今回のリリースでは、その指示が --platform フラグになります。

デフォルトのプラットフォームはWindowsです。そのためLinuxコンテナを --platform フラグを指定せずに実行するとエラーとなります。

docker run --rm busybox echo hello
Unable to find image 'busybox:latest' locally
latest: Pulling from library/busybox
docker.exe: no matching manifest for windows/amd64 in the manifest list entries.
See 'docker.exe run --help'.

--platform linux フラグを追加することで、確実にコンテナを取得し実行することができます:

docker run --rm --platform linux busybox echo hello
Unable to find image 'busybox:latest' locally
latest: Pulling from library/busybox
57310166fe88: Pull complete
Digest: sha256:1669a6aa7350e1cdd28f972ddad5aceba2912f589f19a090ac75b7083da748db
Status: Downloaded newer image for busybox:latest
hello

プラットフォームを指定してイメージを取得した後は、 --platform フラグは必要なくなります。

docker run --rm busybox echo hello
hello 

これで確実にWindowsコンテナをLinuxコンテナと並行して実行することができます。

docker run --rm microsoft/nanoserver:1709 cmd
Unable to find image 'microsoft/nanoserver:1709' locally
1709: Pulling from microsoft/nanoserver
407ada6e90de: Pull complete
711a33cda32c: Pull complete
Digest: sha256:c633d0187bcb73948ac51c8d84f19948b4151dc71274fced7ce204bbe403f33d
Status: Downloaded newer image for microsoft/nanoserver:1709
Microsoft Windows [Version 10.0.16299.192]
(c) 2017 Microsoft Corporation. All rights reserved.
C:\>

イメージのリストはLinuxとWindowsの両者を含みます。

docker image ls
REPOSITORY              TAG      IMAGE ID      CREATED        SIZE
busybox                 latest   5b0d59026729  13 days ago    3.41MB
microsoft/nanoserver    1709     c4f1aa3885f1  4 weeks ago    303MB

将来的には --platform フラグに加えてヒューリスティックに基づいたオプションもご提供できるようになるかもしれません。

デフォルトのプラットフォームをLinuxに変更するには次のように指定します:

[Environment]::SetEnvironmentVariable("LCOW_API_PLATFORM_IF_OMITTED", "linux", "Machine")
Restart-Service Docker

“hello-world”とマニフェストリストのイメージ

洞察力に富んだ読者の方はすでにお気づきかもしれませんが、前述の事例では、おなじみ "library/hello-world" イメージを使用していません。LCOWと --platform フラグが、ユーザが実行するであろう大半のイメージによってどのように機能するかをお見せするため、あえて使いませんでした。しかしながらlibraryリポジトリ内には、 マニフェストリスト または俗に言う“ファットマニフェスト”によって構成されているイメージもあります。マニフェストリストは DockerキャプテンであるPhil Estes氏 の寄稿によるもので、イメージの作者に、別のアーキテクチャ、OS、そしてOSのバージョンを使用するためのダイジェストを指定することを可能とするものです。

指定のイメージがマニフェストリストを有している場合、Docker Engineは自動的に、そのイメージを実行中のプラットフォームに基づいて、マニフェストエントリを選択します。マニフェストリストとLCOWを組み合わせた際、その結果は --platform windows または --platform linux によって参照できる1つのイメージとなります。1つのDocker Engine上で取得できるのは、1つのマニフェストリストイメージによる1つのインスタンスのみであることにご注意ください。

hello-worldのマニフェストはWindowsやLinux、そしてその他多く(名称は割愛)向けのエントリを含みます。


{
"schemaVersion": 2,
"mediaType":
"application/vnd.docker.distribution.manifest.list.v2+json",
"manifests": [
{
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"size": 524,
"digest": "sha256:8072a54ebb3bc136150e2f2860f00a7bf45f13eeb917cca2430fcd0054c8e51b",
"platform": {
"architecture": "amd64",
"os": "linux"
}
},
{
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"size": 525,
"digest": "sha256:f839819df2d0d86fad4f53641de64f6e90ae3b77d6ca28011c77ad34aa7afd92",
"platform": {
"architecture": "s390x",
"os": "linux"
}
},
{
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"size": 1358,
"digest": "sha256:65b067b5940d834f7534027d90e47c634c4ab0c9d51d9a4a363166bb40787c15",
"platform": {
"architecture": "amd64",
"os": "windows",
"os.version": "10.0.14393.2007"
}
},
{
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"size": 1356,
"digest": "sha256:0583adf9c3d3c52a05a131ad1a868c9e61f550e83444f868d66bd83e1125bdc3",
"platform": {
"architecture": "amd64",
"os": "windows",
"os.version": "10.0.16299.192"
}
}
]
}

Windowsイメージの互換性

Windowsは、Windowsのバージョンごとにコンテナの作成・実行に関して、固有の要求があります。詳細は コンテナバージョンの互換性に関するMicrosoft社のドキュメント をご参照ください。Windows 10 Insiderビルドを実行している場合は、どのイメージがお使いのWindowsのバージョンと互換性があるかを必ずご確認ください。Microsoft社は microsoft/nanoserver-insider など、適切なInsiderビルド向けタグと共にDocker HubでWindowsベースのイメージのInsiderバージョンを提供しています。

またマニフェストリストは、ユーザが明示的に保持・指定するタグなしに、異なるWindowsのバージョン上で実行できるイメージの作成を可能にします。hello-worldマニフェスト内の、この2つのWindowsエントリがその例です: 1つはWindows 10バージョン1607 (10.0.14393) で、もう1つはWindows 10 Fall Creators Update (10.0.16299) です。

さらなる発展

LCOW機能は現在、活発に開発中です。

いいものをビルドしたら ツイッター でお知らせください!

新規CTA