ここから本文です

無償の「Docker for Windows」で手軽にLinuxコンテナを利用する

@IT 9月3日(土)8時10分配信

 最近のITシステムでは、DockerのLinuxコンテナを使った軽量なアプリケーション実行環境の利用が進んでいる。本番環境だけでなく、運用や開発の現場でもコンテナ技術は広く使われている。だがDockerのコンテナはLinuxをベースにしているということもあり、Windows環境、特にクライアント環境ではまだまだ普及しているとは言いがたかった。

【その他の画像】Docker for Windowsをインストールした仮想マシンの設定画面

 だが2016年7月末に「Docker for Windows」(および「Docker for Mac」)の正式版(Ver.1.12)がリリースされ、64bit版のWindows 10ならば、比較的簡単に導入できるようになった。

 本記事では、このDocker for Windowsのインストール方法と簡単な利用方法についてまとめておく。

●「Docker」とは?

 Dockerとは何かについては別稿のTech Basics「Docker」を参照していただきたいが、簡単に言うと、非常に軽量なコンテナ型のアプリケーション実行環境のことである。

 独立したアプリケーション実行環境といえば、ハイパーバイザ型(Hyper-Vなど)やホスト型(Windows Virtual PCなど)の仮想実行環境を真っ先に思い浮かべる読者諸氏も多いだろう。これらは、PCのハードウェアをエミュレーションして、その上でOSやアプリケーションを動作させている。また目的のアプリケーションとは関係のないサービスなども多数動作する。そのため、オーバーヘッドが大きく、リソースも無駄に多く必要になりがちだ。

 これに対して「コンテナ」は、アクセスできるリソースや権限などを制限/分離した「プロセス」である。コンテナを管理するコストはプロセスを管理するコストとほとんど変わらず、仮想マシンを管理するコストと比較すると非常に軽い。

●Docker for Windowsとは?

 Dockerは、もともとはLinuxのコンテナ技術をベースとしたプロセス実行環境である。そのため、Dockerを動作させるためにはLinux OS(のコンテナ)が必要となる。

 だがWindows OSではLinuxコンテナを直接実行させることができないため、従来はWindows OS上にOracle VirtualBoxという仮想化ソフトウェアを乗せ、その上でLinux(もしくは、コンテナの実行だけに特化した軽量Linux OS)を動作させていた。これが今までWindows向けに提供されていた「Docker Toolbox」というツールである(従来は全てβ版という扱い)。

 Windows 8以降のWindows OSでは、標準的な仮想化環境としてHyper-Vが用意されているが、これはVirtualBox(やVMware Workstation)のようなサードパーティー製の仮想化ソフトウェアとは共存できない。そこでHyper-Vを使うように新しく作り直されたのが、今回リリースされたDocker for Windowsである。

 Windows標準のHyper-Vを使うため、操作や管理が簡単になるし、Hyper-Vを使う他の開発ツール(Visual Studioなど)とも親和性が高い。開発やテスト環境ではこれはありがたいだろう。

●「Windowsコンテナ」「Windows Subsystem for Linux」とは関係ない!?

 なお、念のために言っておくと、これは次期Server OS(Windows Server 2016)で利用可能になるとされている「Windowsコンテナ」(正確には「Windows Serverコンテナ」と「Hyper-Vコンテナ」の2つ。「Windows コンテナーに関するドキュメント」参照)をサポートするものではない。あくまでも「Linuxコンテナ」をサポートするものである。

 また、Windows 10 Anniversary Update(バージョン 1607、ビルド14393)で導入された「Windows Subsystem for Linux(WSL)」や「bash(Bourne Again Shell)」と連携することもない。WSL上に「apt-get install docker.io」でDocker関連のコンポーネントをインストールしようとしても一部エラーになってインストールできないし、WSL上からdockerコマンドを使って、Docker for Windowsの(Hyper-V上にインストールされている)コンテナを管理することもできない。

●Docker for Windowsの要件

 Docker for Windowsを利用するための要件は以下の通りだ。

・64bit版のWindows 10(バージョン1511、ビルド10586以降)、ProもしくはEnterprise/Educationエディション
・Hyper-Vが利用できること
・コンテナ実行用の仮想マシンには、メモリ2GB、ディスク60GB(容量可変タイプの仮想ディスクで、初期サイズは4GB程度)のリソースが必要

 以上の要件を満たさない場合は、Docker for Windowsではなく、VirtualBoxを使った従来形式のツール(Docker Toolbox)をダウンロードしてインストールする。

●Docker for Windowsのインストール

 Docker for Windowsは以下の場所からダウンロードできる。

・「Getting Started with Docker for Windows」(https://docs.docker.com/docker-for-windows/)

 用意されているバイナリには「Stable channel(安定版)」と「Beta channel(最新機能を積極的に取り入れているβ版)」の2種類がある。通常は前者をインストールすればよいだろう。原稿執筆時点では、バージョンはVer.1.12.0となっていた。

 InstallDocker.msiファイルをダウンロード後、ダブルクリックするとインストーラが起動するので、指示に従ってインストール作業を行う。ユーザーが選択するべきオプションは何もないので、すぐにインストールが完了する。Hyper-V機能はあらかじめインストールしておいてもよいが、未インストールの場合は最後に「Docker requires Hyper-V to run」というダイアログが表示されるので、そこで[Enable & Restart]をクリックするとHyper-V機能が追加され、システムが再起動する。

 インストールが終わると、Hyper-Vに新しい仮想マシン「MobyLinuxVM」が追加され、さらに新たに仮想スイッチ「DockerNAT」が追加されているはずなので確認しておく。

 一度インストールしてしまえば、基本的にはHyper-Vの管理ツールでこの仮想マシンを操作する必要はない。以後のDocker関連の操作は全てdockerコマンドで行う。仮想マシンの再起動などの操作は、後述のDocker for Windowsアプリの[Settings]にある[Reset]-[Restart Docker...]などを使うこと。さもないと、コンテナからインターネットへの接続が途絶えるといったトラブルが生じることがある。

●Docker for Windowsを使うには?

 Dockerは基本的にはCUIで操作/管理するツールである。後述するようにGUIの管理ツールも存在するけれど、「docker.exe」というコマンドラインコマンドにパラメーターを付けて操作するのが標準といえる。

 Docker for Windowsをインストールすると、「C:\Program Files\Docker」フォルダ以下にDocker関係のツールがインストールされ、PATH環境変数もセットされる。そのため、インストール後にコマンドプロンプトやPowerShellコンソールを開けば、すぐにdockerコマンドを実行できる。

 Dockerの基礎やdockerコマンドの使い方についてはここでは触れないので、次の連載記事などを参照していただきたい。

 以下では、最小限の動作確認や基本的な操作・設定、そしてGUIツールに絞って紹介しておく。

●Docker for Windowsの動作確認

 インストールが終わったら、まずはコマンドプロンプトかPowerShellコンソールを開いて、単に「docker」と入力してみる(dockerコマンドを使うだけなら、管理者権限は不要)。これでヘルプメッセージが表示されればインストールは正しく行われている。

 その次は「docker version」や「docker info」コマンドなどを実行してみる。

C:\>docker ……dockerコマンドが実行できるか確認
Usage: docker [OPTIONS] COMMAND [arg...]
docker [ --help | -v | --version ]

A self-sufficient runtime for containers.

Options:

--config=%USERPROFILE%\.docker Location of client config files
-D, --debug Enable debug mode
-H, --host=[] Daemon socket(s) to connect to
-h, --help Print usage
……(中略)……
Run 'docker COMMAND --help' for more information on a command.

C:\>
C:\>docker version ……バージョンのチェック
Client:
Version: 1.12.0
API version: 1.24
Go version: go1.6.3
Git commit: 8eab29e
Built: Thu Jul 28 21:15:28 2016
OS/Arch: windows/amd64

Server:
Version: 1.12.0
API version: 1.24
Go version: go1.6.3
Git commit: 8eab29e
Built: Thu Jul 28 21:15:28 2016
OS/Arch: linux/amd64

C:\>docker info ……状態の確認
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 1.12.0
Storage Driver: aufs
Root Dir: /var/lib/docker/aufs
Backing Filesystem: extfs
Dirs: 0
Dirperm1 Supported: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host null overlay
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Security Options: seccomp
Kernel Version: 4.4.15-moby
Operating System: Alpine Linux v3.4
OSType: linux
Architecture: x86_64
CPUs: 2
Total Memory: 1.952 GiB
Name: moby
……(中略)……
Insecure Registries:
127.0.0.0/8

C:\>

●コンテナのロードと実行

 以上の動作が確認できたら、次は「docker run hello-world」を実行してみる。「docker run」はコンテナを実行するコマンド、「hello-world」はコンテナの名前である。これを実行すると、hello-worldというイメージがインターネット(Dockerレジストリ)から自動的にダウンロードされ、ローカルにイメージとして保存される。そしてそのイメージを使ってコンテナが作成され、実行される。
C:\>docker run hello-world ……コンテナの起動
Unable to find image 'hello-world:latest' locally ……指定されたコンテナイメージがローカルに見つからない(まだダウンロードされていない)というメッセージ
latest: Pulling from library/hello-world ……インターネット(Dockerレジストリ)からダウンロードしてくる

c04b14da8d14: Pull complete ……ダウンロードしたイメージの情報
Digest: sha256:0256e8a36e2070f7bf2d0b0763dbabdd67798512411de4cdcf9431a1feb60fd9
Status: Downloaded newer image for hello-world:latest

Hello from Docker! ……ここから下は「hello-world」コンテナの出力。このコンテナは、このようなメッセージを出力するだけの、動作確認用のコンテナ。これが表示されているということは、イメージのダウンロードやコンテナの作成、起動が正しく動作しているということ
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash ……次はこれを実行してみると、Ubuntuコンテナとbashの動作確認ができる

Share images, automate workflows, and more with a free Docker Hub account:
https://hub.docker.com

For more examples and ideas, visit:
https://docs.docker.com/engine/userguide/

C:\>

 これが動作したら、次は上の出力中にあるように、「docker run -it ubuntu bash」を実行してみる。ubuntuとbashシェルが起動するはずなので、bashでさまざまなコマンドを実行してみよう。最後は[Ctrl]+[D]やexitコマンドで終了できる。

 一度実行したコンテナはローカルに残っているので、次回は素早く起動できる。プロセスの状態やイメージの状態は「docker ps」や「docker images」コマンドで確認できる。

C:\>docker ps ……実行中のコンテナの一覧を表示させてみるCONTAINER ID  IMAGE        COMMAND        CREATED        STATUS        PORTS       NAMES↑……全て実行が終了しているので、何も表示されないC:\>docker ps -a ……実行中でないコンテナも表示させてみるCONTAINER ID  IMAGE        COMMAND        CREATED        STATUS        PORTS       NAMES55cc8b868037  hello-world  "/hello"       4 minutes ago  Exited (0) 3 minutes ago  tiny_jones ……hello-worldはすでにExited(終了した)状態C:\>docker images ……イメージの一覧を確認してみる(イメージをロードしたものがコンテナ)REPOSITORY    TAG          IMAGE ID       CREATED        SIZEhello-world   latest       c54a2cc56cbb   8 weeks ago    1.848 kB ……イメージのIDとサイズなどの情報C:\>

 まだまだDockerには多くのコマンドがあるが、これ以上の使い方については、前掲の連載「いまさら聞けないDocker入門」やDockerサイトのドキュメントページなどを参照していただきたい。

●「Docker for Windows」アプリを使う

 Docker for Windowsをインストールすると、Windows 10の[スタート]メニューに[Docker]-[Docker for Windows]というツールがインストールされ、さらにタスクバーの通知領域に[Docker for Windows]のアイコンが表示される。このアイコンからは、Dockerの幾つかの設定を変更することができる。

 [Setting]を選択すると、次のような設定を変更できる。

●「Kitematic」によるコンテナの管理

 Dockerは基本的にはCUIだけで操作するツールであるが、上のタスクトレイのアイコンを右クリックして[Open Kitematic]を選択すると、コンテナを管理するGUIのツール「Kitematic(カイトマチック)」を利用できる。

 ただしKitematicはデフォルトではインストールされておらず、最初にこのメニューを起動すると、Kitematicのダウンロードを促す画面が表示される。その画面中にある[Download]ボタンを押すと最新のKitematicパッケージ(ZIPファイル)がダウンロードできるので、それを展開後、指示に従って「C:\Program Files\Docker\Kitematic」以下にコピーする。すると以後は[Open Kitematic]メニューからKitematicツールを起動できるようになる。

 Kitematicでは、ローカルにインストールされているコンテナの管理や、新しいイメージの検索、ダウンロード、ログの表示などができる。コンテナによっては、シェルを起動してコンソールからインタラクティブに使ったり、Webブラウザを起動して出力をブラウザで閲覧したりできる。

 Kitematicを使わなくても、dockerコマンドで全て操作できるのだが、細かいコマンドを覚えるのが面倒だったり、Dockerにまだあまり慣れていないなら、Kitematicも便利かもしれない。

 今後のWindows Server 2016でもコンテナ技術がサポートされるなど(ただしLinuxコンテナではなく、Windows ServerコンテナやHyper-Vコンテナがサポートされる)、軽量なコンテナ技術を使ったアプリケーションの仮想化や運用は、仮想マシンやクラウドと並ぶ、最重要技術の1つとなりつつある。Dockerの重要性は今後ますます高まるだろうから、開発や運用に携わることがあるなら、ぜひ導入・体験しておきたい。

[打越浩幸,デジタルアドバンテージ]

最終更新:9月3日(土)8時10分

@IT