概要
Windows 版の Docker クライアントを使ってみました。以下の手順をまとめてあります。
- Windows 版 Docker クライアントを、 Windows 10 と Windows 8.1 にインストール
- Windows 版 Docker クライアントから、 Linux 上の Docker デーモンを操作
Docker クライアントは Toolbox を使うと簡単にインストールできますが、今回は Docker クライアント単体でインストールしてみました。
環境は以下の通りです。Windows マシンはどこにあってもいいのですが、今回はてっとり早く Windows 10 を使いたかったので Microsoft Azure を使っています。Docker デーモンは、いつもの通り AWS EC2上です。
また、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 以下にインストールされる。
ただしChocolatey の問題で、C:\Chocolatey\bin が環境変数の PATH に追加されないので、コントロールパネルから手動で追加する。
docker コマンドの実行
Docker クライアントのインストールが完了したので、コマンドプロンプトを起動してdocker クライアントを実行する。
ちゃんとインストールされたことが確認できた。
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」を指定する。
なお、PATH の設定は自動で行われるので、手動での設定は不要。
docker コマンドの実行
コマンドプロンプトから Dockerクライアントを実行してみる。
ちゃんとインストールされたことが確認できた。
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
Winodws 8.1 から同じ Docker デーモンに接続すると、(当たり前だが)作成されたコンテナが見える。
!!注意!!
今回は検証目的で外部から Docker デーモンに接続できるようにしているが、任意の人が Docker デーモンに接続できてしまうリスクがあるため、以下のような対策が必要。
- Docker デーモン起動時に、TLSを使った認証を有効にする(ここを参照)
- EC2 のセキュリティグループで、Dockerデーモンのホストに接続できるIPを制限する