WindowsコンテナーをDockerから操作するには?――あなたの知らないコンテナーの世界(その4):vNextに備えよ! 次期Windows Serverのココに注目(29)(2/3 ページ)
前回までは、Windows Server 2016 Technical Preview 3(TP3)の「Windows Serverコンテナー」を、PowerShellコマンドレットによるネイティブな方法で操作してきました。今回は、Windows Server 2016 TP3における「Docker」のサポートを説明します。
Dockerコマンドによるコンテナーのローカル管理
Windows版のDockerバイナリは、コンテナーホストとして構成したWindows Server 2016 TP3の「C:¥Windows¥System32¥Docker.exe」にインストールされます。このバイナリはDocker Daemonと共通ですが、コマンドプロンプトやPowerShellのシェルプロンプトから実行することで、ローカルのコンテナーホストを操作できます。
PowerShellの「Get-ContainerImage」コマンドレットを実行すると、Windows ServerコンテナーのベースOSイメージである「WindowsServerCore」を確認できます。Dockerコマンドの場合、同様の操作は「docker image」コマンドになります。Dockerコマンドからは二つの「windowsservercore」が存在するように見えますが、これは同じイメージに「10.0.10514.0(バージョン番号)」と「latest(最新)」の二つでタグ付けされているからです。
PowerShellの「Get-Container」コマンドレットを実行すると、作成済みのコンテナーとその状態を確認できます。Dockerの場合、実行中のコンテナーは「docker ps」コマンド、停止中のコンテナーは「docker ps -a」コマンドで確認できます。ところが、PowerShellの「Get-Container」コマンドレットで参照できるコンテナーが、Dockerコマンドでは全く見えません(画面2)。先に触れましたが、PowerShellによる管理と、Dockerコマンドによる管理は現状、統合されていないからです。
画面2 PowerShellで作成したコンテナー「MyCont01」は、Dockerコマンドからは全く見えない。これは、Windows Server 2016 TP3の仕様であり、将来的には統合される可能性がある
DockerコマンドによるWindows Serverコンテナーの作成
LinuxベースのDockerで次のコマンドを実行すると、Docker HubからUbuntuイメージをダウンロードし、コンテナーを作成して、Ubuntuのシェル環境(/bin/bash)に対話的に接続できます。
1 docker pull ubuntu
2 docker run -t -i --name myubuntu ubuntu /bin/bash
Windows Serverコンテナーの場合は「docker pull」コマンドを実行しなくても、すでに「windowsservercore」イメージがあります。次のように、LinuxベースのDockerと同じように「docker run」コマンドでWindows Serverコンテナーを作成し、コンテナーのコマンドプロンプト(cmd.exe)に対話的に接続することができます(画面3、画面4)。イメージ名「windowsservercore」は、全て小文字で入力しなければならないことに注意してください。
docker run -t -i --name mywincont01 windowsservercore cmd
コマンドラインパラメーターの詳しい説明はしません。ここで重要なのは、Dockerコマンドと同じ構文でWindows Serverコンテナーを実行できることです。
コンテナーのコマンドプロンプトに接続したら、Windows Serverの役割や機能を有効化したり、アプリケーションをインストールしたりすることができます。
本連載第27回で説明したように、PowerShellの「New-Container」コマンドレットで作成したコンテナーは、ベースOSイメージとの差分が「C:¥ProgramData¥Microsoft¥Windows¥Hyper-V¥Containers」フォルダー下に、VHDX形式のディスクイメージとレジストリファイルで保存されます。
一方、「docker run」コマンドで作成したコンテナーの差分データは、「C:¥ProgramData¥docker¥windowsfilter」フォルダー下に書き込まれます。現状、このような実装になっているため、PowerShellとDockerコマンドで同じコンテナーを相互に参照や管理することができないというわけです。
対話的に実行したWindows Serverコンテナーは「exit」コマンドでコマンドプロンプトを終了すると同時に、コンテナーも終了します。カスタマイズしたコンテナーは、「docker commit」コマンドでカスタムイメージとしてローカルリポジトリに保存できます。コンテナーの削除は「docker rm <コンテナー名>」コマンド、カスタムイメージの削除は「docker rmi <イメージ名>」コマンドです。この辺りの管理操作も、LinuxベースのDockerと全く変わりません(画面5)。
画面5 「docker commit」コマンド、「docker rm <コンテナー名>」コマンド、「docker rmi <イメージ名>」コマンドも、LinuxベースのDockerと同じエクスペリエンスを提供する
なお、「docker commit」コマンドで保存したイメージは、「C:¥ProgramData¥docker¥windowsfilter」フォルダー下にフラットな形式として保存されます。保存したイメージの見掛け上のファイルサイズはベースOSイメージよりも大きくなりますが、ベースOSイメージと差分をマージしたものが保存されるわけではなく、ベースOSイメージとの差分だけが保存されるようになっています。
Copyright © ITmedia, Inc. All Rights Reserved.