Docker for Windows Server 2016 の紹介

本日、マイクロソフトは、アトランタで開催された Ignite カンファレンスで Windows Server 2016 の一般提供を発表します。 Windows 開発者と IT プロフェッショナルにとって、最もエキサイティングな Windows の新機能はコンテナーであり、Windows Server 2016 のコンテナーは Docker によって強化されています。

このブログ投稿では、DockerコンテナをWindows上でネイティブに実行するために行われた技術革新について詳しく説明し、その成果の重要性を説明しようとしています。 最初の Windows コンテナーを構築する方法に関する関連ブログ投稿と、Windows 上の Docker をサポートするための Docker Inc. と Microsoft の商業的パートナーシップの詳細に関する投稿を参照してください。

Dockerの最初のバージョンは2013年にリリースされ、発売から3年間で、DockerはLinux開発者と運用担当者がアプリを構築、出荷、実行する方法を完全に変革しました。 Docker エンジンとコンテナーが Windows でネイティブに利用可能になったことで、開発者と IT プロフェッショナルは、Windows ベースのアプリとインフラストラクチャに対して同じ変革を開始し、セキュリティの向上、俊敏性の向上、オンプレミス アプリをクラウドに移行する移植性と自由度の向上という同じメリットを享受できます。

Linux と Windows の両方のインフラストラクチャを使用して異種混在のデプロイを構築および維持する開発者と IT プロフェッショナルにとって、Docker on Windows はさらに大きな重要性を持っています: Docker プラットフォームは、Linux アプリと Windows アプリの両方を管理するための単一のツール、API、およびイメージ形式のセットを表すようになりました。 Linux と Windows のアプリとサーバーがドッキングされると、開発者と IT プロフェッショナルは、オンプレミスとクラウドの両方で複雑なマイクロサービスのデプロイを管理および進化させるための共通の Docker 用語とインターフェイスを使用して、オペレーティング システムの隔たりを埋めることができます。

Dockerforws2016 1

Windows サーバーでのコンテナーの実行

Windows でコンテナーを実行する Docker は、Windows カーネルの成長コンテナー化プリミティブ、Docker と Microsoft が協力して Docker Engine と CLI を Windows に移植 してこれらの新しいプリミティブを活用し、 Docker が Docker Hub にマルチアーキテクチャ イメージのサポートを追加すること を含む Microsoft の 2 年間のコラボレーション の結果です。

その結果、新しく完全に分離されたコンテナーをすばやく起動する優れた機能が docker run 、Windowsでネイティブで利用できるようになりました。

PC C:\> docker run -ti microsoft/windowsservercore powershell
ウィンドウズ・パワーデスク

著作権(C)2016マイクロソフトコーポレーション。 全著作権所有。追伸 C:\>

カーネル コンテナー化機能は、Windows Server 2016 のすべてのバージョンで使用でき、アニバーサリー アップデートが適用された Windows 10 システムでも使用でき、Windows ネイティブの Docker デーモンは Windows Server 2016 と Windows 10 の両方で実行されます (ただし、Windows Server に基づくコンテナーのみが Windows 10 でビルドおよび実行されます)。

docker run WindowsにはLinuxと同じセマンティクスが付属しています:完全なプロセス分離とサンドボックス化されたファイルシステム(およびWindowsレジストリ)は、レイヤーの変更をサポートします。 各コンテナーはクリーンな Windows システムを認識し、システム上の他のプロセス (コンテナー化されているかどうかに関係なく) に干渉することはできません。

たとえば、異なるインターネット インフォメーション サービス (IIS) バージョンと異なる .NET Framework を使用する 2 つの Docker 化されたアプリは、同じシステム上に共存できます。 互いに影響を与えることなく、それぞれのファイルシステムやレジストリに書き込むこともできます。

コンテナー化により、Windows IT プロフェッショナルは、ハードウェア仮想化に固有のリソースのオーバーヘッドや俊敏性の低下なしに、VM の分離とリリースアーティファクト安定性の利点のほとんどを享受できます。

Linux 上のコンテナーを異なるセキュリティ プロファイルで実行する方法と同様に、Windows 上のコンテナーは、次の 2 つの分離モードのいずれかで実行されます。

  1. Windows Server コンテナーは、Linux で知られているのと同じ共有カーネル プロセス分離パラダイムを使用します。 コンテナは通常の(ただし分離された)プロセスとして実行されるため、起動が速く、リソースのオーバーヘッドが最小限に抑えられます。
  2. Hyper-V 分離では、コンテナー プロセスは、コンテナーの起動時に作成された最小限のハイパーバイザー内で実行されます。 これにより、起動が遅くなり、リソースのオーバーヘッドがいくらか犠牲になりますが、分離性が向上する可能性があります。

分離は、次の場所に docker run渡す簡単なスイッチで設定できます。

docker run --isolation=hyperv Microsoft/nanoserver

基になるホストが要求された分離モードをサポートしている限り、任意の Windows コンテナー イメージを Hyper-V コンテナーまたはサーバー コンテナーとして実行でき、コンテナー ホストは両方をサイド バイ サイドで実行できます。 コンテナー プロセスは、実行される分離モードを認識しておらず、Docker コントロール API は両方のモードで同じです。

これにより、分離モードは一般的に開発者の関心事ではなく、開発者はデフォルトまたはシステムで便利なものを使用する必要があります。 分離モードでは、コンテナー化されたアプリを運用環境にデプロイする方法を選択するときに、IT 担当者にオプションが提供されます。

また、Hyper-V は Hyper-V の分離を強化するランタイム テクノロジですが、Hyper-V の分離コンテナーは Hyper-V VM ではなく、従来の Hyper-V ツールでは管理できないことにも注意してください。

コンテナーが Windows にどのように実装されているかについて詳しく知りたい読者にとって、 DockerCon '16 での John Stark の黒帯セッションは素晴らしい入門書です。

スクリーンショット(14)。 パプアニューギニア

Windows コンテナー イメージのビルド

Windows レジストリとファイルシステムの階層化の改善のおかげで、 docker build Dockerfile は Windows Docker イメージの作成に完全にサポートされています。 以下は、 Stefan Scherer が Node の公式 Docker ライブラリ イメージ用に提案した Windows Dockerfile の例.js。 それはWindows docker build上で構築することができます:

マイクロソフト/ウィンドウズサーバーコアから
環境NPM_CONFIG_LOGLEVEL情報
環境 NODE_VERSION 4.5.0ENV NODE_SHA256 16aab15b29e79746d1bae708f6a5dbed8ef3c87426a9408f7261163d0cda0f56
実行パワーシェル - コマンド\
    $ErrorActionPreference = '停止' ;\
    (New-Object System.Net.WebClient) をクリックします。DownloadFile('https://nodejs.org/dist/v%NODE_VERSION%/node-v%NODE_VERSION%-win-x64.zip', 'node.zip') ;\
    if ((Get-FileHash ノード.zip -Algorithm sha256)。Hash -ne $env:NODE_SHA256) {exit 1} ;\
    展開-アーカイブノード.zip-宛先パスC:\ ;\
    名前の変更-アイテム 'C:\node-v%NODE_VERSION%-win-x64' 'C:\nodejs' ;\
    新しいアイテム '%APPDATA%\npm' ;\
    $env:PATH = 'C:\nodejs;%APPDATA%\npm;' + $env:PATH ;\
    [Environment]::SetEnvironmentVariable('PATH', $env:PATH, [EnvironmentVariableTarget]::Machine) ;\
    アイテムの削除 - パス ノード.zip
CMD [ "ノード.exe" ]

PowerShell を使用して zip ファイルと exe のインストールとセットアップを行う方法に注意してください: Windows コンテナーは、Windows API 用にコンパイルされた Windows 実行可能ファイルを実行します。 Windows コンテナーをビルドして実行するには、Windows システムが必要です。 Docker ツール、コントロール API、およびイメージ形式は Windows と Linux で同じですが、Docker Windows コンテナーは Linux システムでは実行されず、その逆も同様です。

また、開始層が microsoft/windowsservercoreであることにも注意してください。 Windows コンテナー イメージを作成する場合は、開始 FROM scratch はオプションではありません。 代わりに、画像は または microsoft/nanoserverのいずれかに基づいていますmicrosoft/windowsservercore

Windows Server Core イメージには、標準の Windows Server Core インストールで見つかったプロセスと DLL を含む、ほぼ完全なユーザーランドが付属しています。 GUI アプリと Windows リモート デスクトップを必要とするアプリを除き、Windows Server で実行されるほとんどのアプリは、最小限の労力でイメージで実行する microsoft/windowsservercore ようにドッキングできます。 例としては、Microsoft SQL Server、 ApacheInternet Information Services (IIS)、 完全な .NET Framework などがあります。

この柔軟性は、イメージが microsoft/windowsservercore 10GBを占めるというかさばりを伴います。 Dockerの 非常に効率的な画像レイヤーのおかげで、これは実際には大きな問題ではありません。 特定のDockerホストはベースレイヤーを一度プルするだけでよく、そのシステムでプルまたはビルドされたイメージはベースレイヤーを再利用するだけです。

他のベースレイヤーオプションは、簡素化されたWindows APIを備えた新しい非常に最小限のWindowsバージョンであるNano Serverです。 Nano Server では、IIS、新しい .NET Core フレームワークNode.js Goなど、多くのソフトウェアが既に実行されています。また、Nano Server の基本イメージは Windows Server Core よりも桁違いに小さいため、最新の状態に保つための依存関係と外部からのアクセスが少なくなっています。 Nano Serverは、迅速にビルドして起動する最小限のコンテナのベースとしてだけでなく、Dockerデーモンとコンテナだけを実行する優れたコンテナホストOSを実現する ミニマリストオペレーティングシステムとしてもエキサイティングな開発です。

Windows Server Core と Nano Server を選択することで、開発者と IT プロフェッショナルは、既存の Windows ベースのアプリを Server Core コンテナーにリフト アンド シフトするか、グリーンフィールド開発に Nano Server を採用するか、モノリシック アプリをマイクロサービス コンポーネントに分割する一環として段階的に採用するかを選択できます。

Docker は、Microsoft およびコミュニティと協力して、Windows Server Core と Nano Server の両方に基づくコンテナー イメージを構築しています。 GolangPythonMongoは公式のDockerイメージとして利用可能であり(さらに増える予定です)、Microsoftは非常に人気のある サンプルイメージのセットも維持しています。

概要

本日発表された Docker Engine の Windows 上でのコンテナの構築、実行、管理は、Microsoft と Docker の両方のチームと Docker コミュニティによる長年の努力の成果です。 Microsoft と共に行った、コンテナー化のメリットを Windows 開発者と IT プロフェッショナルに提供する作業は非常に誇りに思っており、Windows と Linux の技術者が共通のツールと API のセットと共にアプリを構築、出荷、実行できるようになる可能性に興奮しています。

開始に役立つリソースをいくつか紹介します

フィードバック

「Windows Server 0用のDockerの紹介」に関する2016の考え