Edited at

Windows 版 Docker クライアントのインストールと Linux上の Docker デーモンへの接続

More than 3 years have passed since last update.


概要

Windows 版の Docker クライアントを使ってみました。以下の手順をまとめてあります。


  • Windows 版 Docker クライアントを、 Windows 10 と Windows 8.1 にインストール

  • Windows 版 Docker クライアントから、 Linux 上の Docker デーモンを操作

Docker クライアントは Toolbox を使うと簡単にインストールできますが、今回は Docker クライアント単体でインストールしてみました。

環境は以下の通りです。Windows マシンはどこにあってもいいのですが、今回はてっとり早く Windows 10 を使いたかったので Microsoft Azure を使っています。Docker デーモンは、いつもの通り AWS EC2上です。

DockerEnv.png

また、Docker のバージョンは、デーモンとクライアントの双方で 1.8.1 を使っています。


Windows 版 Docker クライアントのインストール

Windows版 Dockerクライアントのインストールは、Chocolatey という Windows のパッケージ管理ツールを使って行います。Chocolatey は、Windows 上で apt-get や yum と似たようなパッケージ管理ができるツールです。


Windows 10 の場合


Chocolatey と Docker のインストール

最初に Chocolatey をインストールします。

まずは、PowerShell を「管理者として実行」により起動。そして、PowerShellの実行ポリシーを RemoteSigned に変更。

PS C:\> Set-ExecutionPolicy RemoteSigned

そして、Chocolatey をインストールする。

PS C:\> Get-PackageProvider -Name Chocolatey

The provider 'chocolatey v2.8.5.130' is not installed.
chocolatey may be manually downloaded from https://oneget.org/ChocolateyPrototype-2.8.5.130.exe and installed.
Would you like PackageManagement to automatically download and install 'chocolatey' now?
[Y] Yes [N] No [S] Suspend [?] Help (default is "Y"): Y

Name Version DynamicOptions
---- ------- --------------
Chocolatey 2.8.5.130 {SkipDependencies, ContinueOnFailure, ExcludeVersion, ForceX86...}

次に Docker クライアントをインストール。nuget をインストールするか聞かれるので Y を入力してインストールを行う。

PS C:\> Install-Package docker

The provider 'nuget v2.8.5.127' is not installed.
nuget may be manually downloaded from https://oneget.org/nuget-anycpu-2.8.5.127.exe and installed.
Would you like PackageManagement to automatically download and install 'nuget' now?
[Y] Yes [N] No [S] Suspend [?] Help (default is "Y"): Y

The package(s) come from a package source that is not marked as trusted.
Are you sure you want to install software from 'chocolatey'?
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "N"): Y

Name Version Source Summary
---- ------- ------ -------
docker 1.8.1 chocolatey Docker is an open platform for developers and sysad...

Docker クライアントは C:\Chocolatey 以下にインストールされる。

Win10-DockerInstalled.PNG

ただしChocolatey の問題で、C:\Chocolatey\bin が環境変数の PATH に追加されないので、コントロールパネルから手動で追加する。

Win10-Path.PNG


docker コマンドの実行

Docker クライアントのインストールが完了したので、コマンドプロンプトを起動してdocker クライアントを実行する。

Win10-DockerVer.PNG

ちゃんとインストールされたことが確認できた。


Windows 8.1 の場合


Chocolatey と Docker のインストール

コマンドプロンプトを「管理者として実行」により起動して、以下のコマンドを実行。

C:\> @powershell -NoProfile -ExecutionPolicy Bypass -Command "iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))" && SET PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin

次に Docker をインストールする。

C:\> choco install docker

途中でスクリプトを実行するか聞かれるので「1) yes」を指定する。

Win8-Install.PNG

なお、PATH の設定は自動で行われるので、手動での設定は不要。


docker コマンドの実行

コマンドプロンプトから Dockerクライアントを実行してみる。

Win8-DockerVer.PNG

ちゃんとインストールされたことが確認できた。


Linux 上での Docker デーモンの起動

Dockerデーモンは、デフォルトでは unix:///var/run/docker.sock をリッスンして、ローカルの root ユーザーか docker グループのユーザーからしかアクセスできないようになっている。なので、外部のWindows から Docker デーモンに接続できるようにTCPポートをリッスンする必要がある(後述の「!!注意!!」を参照)。

まず、すでに Docker デーモンが起動していたら停止する。

sudo systemctl stop docker.service

次に外部から接続できるように Docker デーモンを起動。

$ sudo docker daemon -H tcp://0.0.0.0:5555 &

Docker 1.8 より前のバージョンを使っている場合は次のように実行。

$ sudo docker -d -H tcp://0.0.0.0:5555 &

最後に、検証環境が AWS EC2 なので、上記のポート(TCP 5555) を通すようにセキュリティグループを追加しておく。


Windows 版 Dockerクライアントから Dockerデーモンの操作

Docker デーモンのホストIP(EC2インスタンスのPublic IP)とポート(TCP 5555)を指定して、次のようにコマンドを実行する。

docker -H tcp://<ホストのIP>:<ホストのポート> images

Windows 10 からコンテナを起動してみる。

Win10-DockerCmd.PNG

Winodws 8.1 から同じ Docker デーモンに接続すると、(当たり前だが)作成されたコンテナが見える。

Win8-DockerPS.PNG


!!注意!!

今回は検証目的で外部から Docker デーモンに接続できるようにしているが、任意の人が Docker デーモンに接続できてしまうリスクがあるため、以下のような対策が必要。


  • Docker デーモン起動時に、TLSを使った認証を有効にする(ここを参照)

  • EC2 のセキュリティグループで、Dockerデーモンのホストに接続できるIPを制限する


参考サイト