fbpx

[和訳] 2017年Dockerブログ記事トップ5: はじめてのDocker Windows Serverコンテナの構築と実行 #docker

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

本稿は Top 5 Blogs of 2017 - Build and run your first Docker Windows Server container (2017/12/25) の和訳です。

2017年の人気ブログ記事トップ5を振り返るシリーズです。今回は、はじめてのDocker Windowsコンテナの構築から実行までの手順を紹介する記事です。

Microsoft社が発表したWindows Server 2016は、Windowsネイティブのコンテナを実行するDocker Engineを含んでいます。今回はWindows 10またはWindows Server 2016のVMを使用して、DockerのWindowsコンテナの構築と実行方法をご紹介します。また、WindowsにおけるDockerコンテナの実行を可能にした 技術的改良点 および Docker社とMicrosoftの技術提携に関する発表 も併せてお読みください。

まずはじめに、Windowsコンテナは、Windows Serverのカーネルとユーザーランド (windowsservercoreまたはnanoserver)用にコンパイルしたWindowsの実行ファイルを使用する点をご理解いただくことが重要です。Windowsコンテナの構築と実行には、コンテナをサポートするWindowsシステムが必要です。

Windows 10のAnniversary Update

開発者にとって、Windows 10はDocker Windowsコンテナを実行できる素晴しい場所です。なぜなら Anniversary Update でWindows 10のカーネルにコンテナ化のサポートを追加されたからです(コンテナイメージはWindows 10ではなく、Windows Server CoreおよびNanoserverベースでなければいけないことにご注意ください)。このほかに必要なものは、WindowsネイティブのDocker Engineといくつかのイメージベースレイヤーのみです。

Windows Docker Engineを入手するもっとも簡単な方法は Docker for Windows のインストールです。これまでDocker for Windowsは、LinuxベースのDocker開発環境を設定するのみでした(少し紛らわしいですね…)。今ではLinuxとWindows Dockerの開発環境の両方を設定します。

インストールが完了するとDocker for Windowsのトレイアイコンで、LinuxとWindowsのコンテナ開発環境を切り替えることができます。この機能の詳細は Stefan Scherers氏の記事 をご参照ください。

それではWindowsコンテナに切り替え、次のセクションに進みましょう。

Windows Server 2016

Windows Server 2016は、Docker Windowsコンテナを本番環境用にデプロイする場所になるでしょう。Docker Windowsコンテナを多数開発しようとしているユーザにとっては、少なくともWindows 10およびDocker for Windowsの、Windowsコンテナに対するサポートが成熟するまでは(例えばVM内などで) Windows Server 2016の開発システムを構築する価値があるでしょう。 無料評価版をダウンロード し、ベアメタル上やHyper-V上で実行するVM内、またはVirtualBoxやそのほか同様の環境にインストールします。Windows Server 2016でVMを実行することも、macOSや旧バージョンのWindows上でDocker Windowsコンテナの開発を行うための優れた方法です。

Windows Server 2016が起動したらログインしてWindows Updateを実行し、最新のアップデートをすべて適用したことを確認します。その後WindowsネイティブのDocker Engineを直接インストールします(つまり“Docker for Windows”は使用しません)。そしてAdministrative PowerShellプロンプトで次のコマンドを実行します。


Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force
Install-Module -Name DockerMsftProvider -Force Install-Package -Name
docker -ProviderName DockerMsftProvider -Force Restart-Computer -Force

これによりDocker Engineは、Windowsサービスとして実行し、デフォルトではDockerという名前付きパイプで待ち受けします。例えばWindows 10上のHyper-Vで開発環境のVMを実行している場合、Windows Server 2016 VMで実行しているDocker EngineをWindows 10ホストからもアクセスできるようにするとよいでしょう:


#ファイアウォールで2375番ポートを開放する
netsh advfirewall firewall add rule name="docker engine" dir=in action=allow protocol=TCP localport=2375
 
# DockerデーモンがパイプとTCPの両方で待ち受けるように設定する (前述のdocker --register-service起動コマンドを置き換える)
Stop-Service docker
dockerd --unregister-service
dockerd -H npipe:// -H 0.0.0.0:2375 --register-service
Start-Service docker

DOCKER_HOSTを設定することによって、Windows Server 2016 Docker EngineをVMホストから使用できます:


$env:DOCKER_HOST = "VMのIPアドレス:2375"

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

Windowsコンテナの実行

まずDockerを正常にインストールできているか確認します:


< docker version
Client:
Version: 1.12.1
API version: 1.24
Go version: go1.6.3
Git commit: 23cf638
Built: Thu Aug 18 17:32:24 2016
OS/Arch: windows/amd64
Experimental: true
 
Server:
Version: 1.12.2-cs2-ws-beta
API version: 1.25
Go version: go1.7.1
Git commit: 62d9ff9
Built: Fri Sep 23 20:50:29 2016
OS/Arch: windows/amd64

次に評価版ビルドと互換性のあるベースイメージを取得して再タグ付けし、テストを実行します:


docker pull microsoft/windowsservercore
docker run microsoft/windowsservercore hostname
69c7de26ea48

Windowsコンテナのイメージの構築とプッシュ

イメージをDocker Hubにプッシュするには Docker ID が必要です。Docker Hubにイメージを保存することは、後のユーザのためにビルド成果物を保存したり、他の開発メンバーとベースイメージを共有したり、Dockerを使用してアプリを開発環境から本番環境に移行するビルドパイプラインを作成したりするための優れた方法です。

Dockerイメージは通常、 Dockerfile レシピによる docker build で構築しますが、今回の事例ではPowerShellからオンザフライ書き込みでイメージを作成します。


"FROM microsoft/windowsservercore `n CMD echo Hello World!" | docker build -t あなたのDockerID/windows-test-image -

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


docker run あなたのDockerID/windows-test-image
Hello World!

docker loginでログインし、イメージをプッシュします:


docker push あなたのDockerID/windows-test-image

Docker Hubに保存したイメージは ウェブのインターフェイス から確認できるようになります。またパブリックのイメージは他のDockerユーザが取得する場合もあります。

Windowsにおけるdocker-composeの利用

Docker Composeはデータベース、キュー、およびウェブのフロントエンドなどで構成する、複雑なマルチコンテナを開発するための優れた方法です。

Docker ComposeのWindows Server 2016システムにおける開発のために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上でDocker Composeを試すには、SQL Server Express 2016のデータベースをバックエンドとする、ASP.NET Core MVCの一種であるMusicStoreアプリをクローンするとよいでしょう。正しくタグ付けしたmicrosoft/windowsservercoreイメージが、起動の前に必要となります。


git clone https://github.com/friism/Musicstore
...
cd Musicstore docker-compose -f .\docker-compose.windows.yml build
...
docker-compose -f .\docker-compose.windows.yml up
...

コンテナを実行しているホストから、実行中のアプリにアクセスするには(例えばWindows 10で実行している場合や、Docker Enginesを実行している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コンテナ用のDockerfileの事例をもっと知りたい方は Go言語 をはじめ、 MongoDBPython など、Dockerライブラリイメージをご覧ください。

ご自身でビルドしたWindowsコンテナ用のDockerfileやDocker Composeの事例を、ツイッター @docker に、ハッシュタグ#windowsでシェアしてください。また、疑問点は Docker Forums でも検索いただけます。

リソース:

新規CTA