Windows Server 1709 を搭載した Docker のエキサイティングな新機能

一年でどんな違いが生まれるのでしょう...昨年9月、MicrosoftとDockerはDocker Enterprise Edition(EE)を発売しました。 IT向けのサービスとしてのコンテナプラットフォームであり、異なるインフラストラクチャ間で多様なアプリケーションを管理および保護します。 Windows Server 2016 用。 それ以来、私たちは協力を続けており、Windows Server 1709 には Docker のお客様向けにいくつかの機能強化が含まれています。

Docker Enterprise Edition Preview

Docker と Windows の新機能を試すには、Docker のプレビュー ビルドが必要です。 Windows Server 1709にインストールする方法は次のとおりです(これはインサイダービルドでも機能します)。

インストールモジュールドッカープロバイダー
    インストール パッケージ Docker -プロバイダー名 DockerProvider -必須バージョン プレビュー

運用環境で Docker Windows コンテナーを任意の Windows Server バージョンで実行するには、Docker EE 17.06 を使用してください。

Docker Linux Containers on Windows

Windows Server バージョン 1709 の主な焦点は、Windows 上の Linux コンテナーのサポートです。 私たちはすでに私たちの様子についてブログを書いています LinuxKit プロジェクトによる Windows 上の Linux コンテナのサポート.

Windows Server 1709 で Linux コンテナーを試すには、プレビュー版の Docker パッケージをインストールし、この機能を有効にします。 プレビュー版の Docker EE パッケージには、Docker Linux コンテナーを実行するときに使用する完全な LinuxKit システム (すべて 13 MB) が含まれています。

[Environment]::SetEnvironmentVariable("LCOW_SUPPORTED", "1", "Machine")
    再起動-サービスドッカー

無効にするには、環境変数を削除するだけです。

[Environment]::SetEnvironmentVariable("LCOW_SUPPORTED", $null, "Machine")
    再起動-サービスドッカー

Windows 上の Docker Linux コンテナーはプレビュー段階であり、Microsoft と Docker による共同開発が進行中です。 Linux コンテナーは、Windows 10 バージョン 1709 ("Creators Update 2") でも利用できます。

Windows での Docker イングレス モード サービスの公開

Linux サービス公開オプションとのパリティは、Windows のお客様から強く要望されています。 サポートの追加 イングレス モードを使用したサービスの公開 Windows Server 1709では、Dockerの使用が可能になります。 ルーティングメッシュ外部エンドポイントは、どのノードがサービスのタスクを実行しているかに関係なく、スウォーム内の任意のノードを介してサービスにアクセスできます。

これらのネットワークの改善もロック解除されます オーバーレイネットワークを使用する場合のVIPベースのサービス検出 WindowsユーザーがDNSラウンドロビンに限定されないようにします。

機能強化の詳細については、Microsoft 仮想化ブログの対応する投稿を確認してください。

Windows コンテナー内の名前付きパイプ

一般的で強力な Docker パターンは、コンテナーが実行されているホストの Docker API を使用する Docker コンテナーを実行することです (たとえば、より多くの Docker コンテナーを起動したり、Docker ホスト上のコンテナー、ネットワーク、ボリュームを視覚化したりするため)。 このパターンを使用すると、Docker で何が起こっているかを管理または視覚化するソフトウェアをコンテナーで出荷できます。 これは、次のようなソフトウェアを構築するのに最適です ドッカーユニバーサルコントロールプレーン.

Linux上でDockerを実行すると、Docker APIは通常Unixドメインソケットでホストされ、これらはファイルシステム名前空間にあるため、ソケットをコンテナに簡単にバインドマウントできます。 Windows では、Docker API は名前付きパイプで使用できます。 以前は、名前付きパイプは Docker Windows コンテナーにバインド マウントできませんでしたが、Windows 10 および Windows Server 1709 以降では、名前付きパイプをバインド マウントできるようになりました。

ジェンキンスCIは、これを実証するための優れた方法です。 Docker と Windows Server 1709 を使用すると、次のことが可能になります。

  1. Docker Windowsコンテナでジェンキンスを実行します(CIマシンにJava、Git、Jenkinsを手動でインストールして維持する必要はもうありません)
  2. その Jenkins コンテナーで Docker イメージをビルドし、Docker CI/CD ジョブを実行させます 同じホスト上

私は構築しました ジェンキンスのサンプル画像 (Windows Server 1709 が必要) 新しい名前付きパイプのマウント機能を使用します。 実行するには、コンテナを起動し、初期パスワードを取得してポート8080にアクセスします。 Jenkinsプラグインや追加のユーザーを設定する必要はありません。

> docker run -d -p 8080:8080 -v \\.\pipe\docker_engine:\\.\pipe\docker_engine Friism/Jenkins
    3c90fdf4ff3f5b371de451862e02f2b7e16be4311903649b3fc8ec9e566774ed
    > docker exec 3c cmd /c type c:\.jenkins\secrets\initialAdminPassword
    <password>

次に、単純なフリースタイル プロジェクトを作成し、"Windows バッチ コマンド" ビルド ステップを使用します。 Jenkins Docker プロジェクト自体のフォークをビルドします。

git clone --depth 1 --single-branch --branch add-windows-dockerfile https://github.com/friism/docker-3 %BUILD_NUMBER%
    cd %BUILD_NUMBER%
    docker build -f Dockerfile-windows -t jenkins-%BUILD_NUMBER% .
    cd ..
    RD /s /q %BUILD_NUMBER%

「今すぐビルド」をクリックすると、Jenkins(コンテナで実行されている)がCIジョブの構築を開始して、実行中のホスト上でコンテナイメージを構築できます。

小さいウィンドウの基本イメージ

DockerとMicrosoftが昨年Windowsコンテナを立ち上げたとき、Windowsコンテナのベースイメージが典型的なLinuxのベースイメージほど小さくないことに気付いた人もいました。 マイクロソフトはベースイメージの縮小に懸命に取り組んでおり、1709では、Nanoserverのダウンロードは約70MB(ファイルシステムでは200MB拡張)になりました。

Nanoserver Docker イメージから失われたものの 1 つは PowerShell です。 これにより、Dockerfiles を作成するときにいくつかの課題が発生する可能性がありますが、 マルチステージビルド すべてのビルドとコンポーネントのアセンブリを Windows Server Core イメージで簡単に実行し、結果だけを nanoserver イメージに移動できるようにします。 次の例は、Docker CLI のみを含む最小限の Docker イメージを構築する方法を示しています。

# エスケープ='
    ビルダーとしてのMicrosoft/WindowsServercoreから
    SHELL ["powershell", "-command", "$ErrorActionPreference = '停止'; $ProgressPreference = '黙って続行';"]
    RUN Invoke-WebRequest -uri https://download.docker.com/win/static/test/x86_64/docker-17.09.0-ce-rc1.zip -OutFile 'docker.zip'
    RUN Expand-Archive -Path Docker.zip -DestinationPath .

    マイクロソフト/ナノサーバーから
    COPY --from=builder ["docker\\docker.exe", "C:\\Program Files\\docker\\docker.exe"]
    セットパス "%パス%;C:\Program Files\docker"
    エントリポイント ["ドッカー"]

使いやすいフル機能のビルド環境と、迅速にデプロイおよび開始でき、エクスプロイトの表面積が最小限に抑えられる超小型で最小限のランタイム イメージという、両方の長所を活用できます。 このパターンの動作の別の良い例は、 .NET コアの基本イメージ マイクロソフト .NET チームによって管理されています。

概要

Docker Windows コンテナーがちょうど 1 年前に Windows Server 2016 と Windows 10 で GA になったとは信じがたい。 この 12 か月間で、Docker コミュニティによる多くの採用と、お客様やパートナーからの多くの取り込みが見られました。 最新のリリースでは、ユーザー エクスペリエンスをスムーズにするための機能が追加され、Windows オーバーレイ ネットワークが Linux と同等になり、コンテナー イメージが小さくなり、名前付きパイプをコンテナーにバインド マウントできるようになりました。

IT 向けの Docker ソリューションの詳細については、以下を参照してください。

フィードバック

「Windows Server 1709を搭載したDockerのエキサイティングな新しいもの」に関する0つの考え