最初の Docker Windows Server コンテナーをビルドして実行する

本日、マイクロソフトはWindows Server 2016の一般提供を発表し、それに伴い、Windows上でコンテナをネイティブに実行するDockerエンジンを発表しました。 このブログ投稿では、Windows 10 で、または Windows Server 2016 VM を使用して Docker Windows コンテナーを実行するためのセットアップ方法について説明します。 Windows 上の Docker コンテナーを可能にした技術的な改善に関する関連ブログ投稿と、Docker Inc. と Microsoft のパートナーシップを発表する投稿を確認してください。

開始する前に、Windows コンテナーは、Windows Server カーネルとユーザーランド (Windowsservercore または nanoserver のいずれか) 用にコンパイルされた Windows 実行可能ファイルを実行することを理解しておくことが重要です。 Windows コンテナーをビルドして実行するには、コンテナーをサポートする Windows システムが必要です。

アニバーサリーアップデートを備えたウィンドウズ10

開発者にとって、Windows 10 は Docker Windows コンテナーを実行するのに最適な場所であり、コンテナー化のサポートは アニバーサリー アップデート で Windows 10 カーネルに追加されました (コンテナー イメージは Windows Server Core と Nanoserver のみに基づくことができ、Windows 10 は基づかないことに注意してください)。 欠けているのは、WindowsネイティブのDockerエンジンといくつかのイメージベースレイヤーだけです。

Windows Docker Engine を入手する最も簡単な方法は、 Docker for Windows パブリック ベータ (直接ダウンロード リンク) をインストールすることです。 Docker for Windows は、以前は Linux ベースの Docker 開発環境のセットアップのみを行っていましたが (少し紛らわしいですが)、パブリック ベータ版では Linux と Windows Docker の両方の開発環境がセットアップされるようになり、Windows コンテナーのサポートと Linux/Windows コンテナーの相互運用性の向上に取り組んでいます。

パブリック ベータ版がインストールされている場合、Docker for Windows トレイ アイコンには、Linux と Windows コンテナーの開発を切り替えるオプションがあります。 この新機能の詳細については、 Stefan Scherers のブログ記事をご覧ください。

Windows コンテナーに切り替えて、次のセクションをスキップします。

ウィンドウコンテナへの切り替え

ウィンドウズサーバー2016

Windows Server 2016 は、Docker Windows コンテナーを運用用にデプロイする必要がある場所です。 多くの Docker Windows コンテナー開発を計画している開発者にとっては、少なくとも Windows 10 と Docker for Windows コンテナーのサポートが成熟するまでは、Windows Server 2016 開発システム (VM 内など) をセットアップすることも価値があります。

Microsoft Ignite 2016 カンファレンスの出席者の場合、Windows Server 2016 がプリロードされた USB フラッシュ ドライブがエキスポで入手できます。 点火していませんか?無料の評価版をダウンロードして 、ベアメタルまたはHyper-V、VirtualBoxなどで実行されているVMにインストールします。 Windows Server 2016 で VM を実行することも、macOS およびそれ以前のバージョンの Windows で Docker Windows コンテナー開発を行うための優れた方法です。

Windows Server 2016 が実行されたら、ログインし、Windows Update を実行して最新の 更新プログラムがすべてインストールされていることを確認し 、Windows ネイティブの Docker Engine を直接インストールします ("Docker for Windows" を使用しない)。 管理 PowerShell プロンプトで次のコマンドを実行します。

インストール-パッケージプロバイダー-名前NuGet -最小バージョン2.8.5.201-強制
Install-Module -Name DockerMsftProvider -Force
インストール パッケージ -名前 docker -providerName dockerMsftProvider -Force
再起動-コンピューター-強制

Docker Engine は Windows サービスとして実行され、既定の Docker 名前付きパイプでリッスンするようになりました。 たとえば、Windows 10 上の Hyper-V VM で実行されている開発 VM の場合は、Windows Server 2016 VM で実行されている Docker エンジンを Windows 10 ホストで使用できるようにすると便利な場合があります。

# ファイアウォールポート2375を開く
netsh advfirewall ファイアウォール 追加規則名="ドッカー エンジン" dir=in アクション=許可プロトコル=TCP ローカルポート = 2375

#パイプとTCPの両方でリッスンするようにDockerデーモンを構成します(上記のdocker --register-service呼び出しを置き換えます)
サービスドッカーの停止
dockerd --unregister-service
dockerd -H npipe:// -H 0.0.0.0:2375 --register-service
サービスの開始 ドッキング ウィンドウ

Windows Server 2016 Docker エンジンは、次のように設定 DOCKER_HOSTすることで、VM ホストから使用できるようになりました。

$env:DOCKER_HOST = "<ip-address-of-vm> :2375"

より包括的な手順については、Microsoft のドキュメントを参照してください。

ウィンドウズコンテナの実行

まず、Dockerのインストールが機能していることを確認します。

>ドッカーのバージョン
クライアント:
最新バージョン: 1.12.1
API バージョン: 1.24
囲碁バージョン: go1.6.3Git コミット: 23cf638
構築:2016年8月18日木曜日17:32:24
OS/Arch: windows/amd64
実験的:真

サーバー:
バージョン: 1.12.2-CS2-WS-ベータ版API バージョン: 1.25
囲碁バージョン: go1.7.1
Git コミット: 62d9ff9
構築:2016年9月23日金曜日20:50:29
OS/Arch: windows/amd64

次に、評価ビルドと互換性のある基本イメージをプルし、タグを付け直してテスト実行します。

Docker pull Microsoft/WindowsServerCore
Docker run Microsoft/WindowsServerCore Hostname
69C7DE26EA48

Windows コンテナー イメージのビルドとプッシュ

イメージを Docker Cloud にプッシュするには、 無料の Docker ID が必要です。 Docker Cloud にイメージを保存することは、後のユーザーのためにビルド アーティファクトを保存したり、基本イメージを同僚と共有したり、Docker を使用してアプリを開発から運用環境に移行するビルド パイプラインを作成したりするための優れた方法です。

Docker イメージは通常、 Dockerfile レシピからの Docker ビルドを使用してビルドされますが、この例では、PowerShell でその場でイメージを作成します。

"FROM Microsoft/Windowsservercore 'n CMD echo Hello World!" |docker build -t <docker-id>/windows-test-image -

イメージをテストします。

docker run <docker-id>/windows-test-image
ハローワールド!

docker login ログインし、画像をプッシュします。

docker push <docker-id>/windows-test-image

Web インターフェイスで使用可能な Docker Cloud に保存されているイメージとパブリック イメージは、他の Docker ユーザーがプルできます。

ウィンドウズでのドッカー作成の使用

Docker Composeは、データベース、キュー、およびWebフロントエンドで構成される複雑なマルチコンテナを開発するための優れた方法です。 Windowsの作成サポートはまだ少しパッチがあり、執筆時点ではWindows Server 2016でのみ機能します(つまり、 Windows 10 にはありません)。

Windows Server 2016 システムで Docker Compose を使用して開発するには、compose もインストールします (これは、Docker for Windows がインストールされている Windows 10 では必要ありません)。

Invoke-WebRequest https://dl.bintray.com/docker-compose/master/docker-compose-Windows-x86_64.exe -UseBasicParsing -OutFile $env:ProgramFiles\docker\docker-compose.exe

Windows で Compose を試すには、SQL Server Express 2016 データベースによってサポートされる ASP.NET Core MVC MusicStore アプリのバリアントを複製します。 開始する前に、正しくタグ付け microsoft/windowsservercore された画像が必要です。

git クローン https://github.com/friism/Musicstore
...
CD ミュージックストア
docker-compose -f .\docker-compose.windows.yml build
...
docker-compose -f .\docker-compose.windows.yml up
...

コンテナーを実行しているホストから実行中のアプリにアクセスするには (たとえば、Windows 10 で実行している場合、または Docker エンジンを実行している Windows Server 2016 システムでブラウザーを開く場合)、コンテナー IP とポート 5000 を使用します。 localhost 動作しません:

docker inspect -f "{{ .NetworkSettings.Networks.nat.IPAddress }}" musicstore_web_1
172.21.124.54

Windows Server 2016 を使用していて、VM またはホストの外部からアクセスする場合は、VM またはホストの IP とポート 5000 を使用するだけです。

概要

この投稿では、Windows 10 と最近公開された Windows Server 2016 評価リリースの両方でネイティブの Docker Windows コンテナーを構築して実行するためのセットアップを行う方法について説明しました。 その他の Windows Dockerfiles の例については、Golang、MongoDB、 Python Docker Library の画像をご覧ください。
ビルドした Windows Dockerfiles または Docker Compose の例を Twitter の @docker タグ #windows で共有してください。 また、質問がある場合は、遠慮なくDockerフォーラムにアクセスしてください。

その他のリソース: