この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
Docker CLI for Windowsが公開されましたね!(Publickeyさん、いつもお世話になってます!)
- マイクロソフト、開発中のWindows版Dockerクライアントを初披露。オープンソースでビルド可能に - Publickey
- Remote access to Docker with TLS · sheerun
ということで試してみました!環境は以下のような形になります。
やってみた
Docker CLI for Windowsのインストール
Docker CLI for Windowsのインストール手順は大きく4段階になります。
- Golangのインストール
- Git for Windowsのインストール
- Githubリポジトリのclone
- Docker CLIのビルド
Golangのインストール
The Go Programming LanguageのGetting Startedから[MSI file]のリンクをクリックします。
[Downloads]ページが開くので、[go1.3.3.windows-amd64.msi]をダウンロードします。
ダウンロードしたMSIファイルを実行すると、以下のようにSetup Wizardが開始されます。[Next]ボタンをクリックします。
[License Agreement]に同意(Accept)して、[Next]ボタンをクリックします。
フォルダの選択画面が表示されるので、必要に応じて変更(今回はそのままとしました)し、[Next]ボタンをクリックします。
Ready to install画面が表示されるので、[Install]ボタンをクリックすると、インストールが進行します。
インストールが完了したら[Finish]ボタンをクリックします。
PowerShell画面を開いてgoコマンドを実行し動作確認します。
PS C:¥Users¥Administrator> go
Go is a tool for managing Go source code.
Usage:
go command [arguments]
(...snip...)
これでGolangのインストールは完了です。
Git for Windowsのインストール
GitのダウンロードページからWindows MSIファイルをダウンロードします。
ダウンロードしたMSIファイルを実行します。Setup Wizard画面が表示されたら[Next]ボタンをクリックします。
[Information]画面が表示されます。そのまま[Next]ボタンをクリックします。
インストール先ディレクトリの選択画面が表示されます。必要に応じて変更し、[Next]ボタンをクリックします。
コンポーネントの選択画面が表示されます。特に変更せず、そのまま[Next]ボタンをクリックします。
メニューフォルダーの選択画面が表示されます。特に変更せず、そのまま[Next]ボタンをクリックします。
PATH環境変数の設定についての画面が表示されます。今回はGit Bashからしか使わないので、そのまま[Next]ボタンをクリックします。
改行コードについての設定画面が表示されます。そのまま[Next]をクリックするとインストールが進行します。
インストールが完了します。必要に応じてReleaseNotesを参照し、[Finish]ボタンをクリックします。
これでGitのインストールは完了です。
Githubリポジトリのclone
Windowsスタート画面にGit bashがありますのでクリックします。
git cloneでGithubにあるDockerリポジトリをcloneします。
Administrator@WIN-0IEA8VL0OFL /c/go/src
$ git clone https://github.com/docker/docker.git /c/go/src/github.com/docker/docker
Cloning into 'c:/go/src/github.com/docker/docker'...
remote: Counting objects: 63302, done.
remote: Compressing objects: 100% (82/82), done.
remote: Total 63302 (delta 23), reused 54 (delta 12) eceiving objects: 100% (633
Receiving objects: 100% (63302/63302), 35.43 MiB | 5.21 MiB/s, done.
Resolving deltas: 100% (41421/41421), done.
Checking connectivity... done.
Docker CLIのビルド
ビルドはcmd.exe上から行いますので、PowerShellからcmd.exeを起動します。
PS C:¥Users¥Administrator> cmd.exe
Microsoft Windows [Version 6.2.9200]
(c) 2012 Microsoft Corporation. All rights reserved.
c:¥Users¥Administrator>
ビルドに必要な環境変数を設定します。
c:¥Users¥Administrator>set GOPATH=c:¥go;c:¥go¥src¥github.com¥docker¥docker¥vendor
c:¥Users¥Administrator>set DOCKER_CLIENTONLY=1
そしてビルドします。
c:¥Users¥Administrator>cd c:¥go¥src¥github.com¥docker¥docker¥docker
c:¥Go¥src¥github.com¥docker¥docker¥docker>go build -v
(...snip...)
github.com/docker/docker/docker
ビルドが完了したら動作確認します。
c:¥Go¥src¥github.com¥docker¥docker¥docker>docker
Usage: docker [OPTIONS] COMMAND [arg...]
A self-sufficient runtime for linux containers.
(...snip...)
動きましたね!
Dockerサーバのセットアップ
別のEC2にAmazon LinuxをLaunchして、Dockerサーバとします。dockerのインストールはサクっとyumで行います。
$ sudo yum install docker
Dockerに外部サーバから接続可能なように、/etc/sysconfig/dockerを編集して起動オプションを設定します。
$ sudo vi /etc/sysconfig/docker
other_args="-H=tcp://0.0.0.0:4243"
そしてDockerを起動します。
$ sudo chkconfig docker on
$ sudo service docker start
Starting cgconfig service: [ OK ]
Starting docker: [ OK ]
動作確認します。
$ sudo docker -H=tcp://127.0.0.1:4243 ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
Docker CLI for Windowsから接続してみる
WindowsからDocker CLIを使って、 Amazon LinuxのDockerサーバに接続してみます。
c:¥Go¥src¥github.com¥docker¥docker¥docker>set DOCKER_HOST=tcp:/172.31.5.5:4243
c:¥Go¥src¥github.com¥docker¥docker¥docker>docker version
Client API version: 1.16
Go version (client): go1.3.3
OS/Arch (client): windows/amd64
←[31mFATA←[0m[0000] Error response from daemon: client and server don't have same version (client : 1.16, server: 1.15)
Oops!
確認したところ、Amazon LinuxのyumでインストールできるDockerのバージョンは1.15でした。
$ sudo docker -H=tcp://127.0.0.1:4243 version
Client version: 1.3.1
Client API version: 1.15
Go version (client): go1.3.3
Git commit (client): c78088f/1.3.1
OS/Arch (client): linux/amd64
Server version: 1.3.1
Server API version: 1.15
Go version (server): go1.3.3
Git commit (server): c78088f/1.3.1
Dockerサーバのアップデート
このDocker CLIのClient API versionとDockerサーバのServer API versionを合わせるべく、サーバ側をアップデートすることにします。具体的には最新のソースコードをGithubリポジトリから取得して、バイナリを作成しました。
とりあえず、最新のソースコードを入手するために、gitをインストールします。
$ sudo yum install git
そして最新のソースコードをGithubリポジトリからcloneします。
$ cd
$ git clone https://github.com/docker/docker.git
Cloning into 'docker'...
remote: Counting objects: 63314, done.
remote: Compressing objects: 100% (94/94), done.
remote: Total 63314 (delta 26), reused 54 (delta 12)
Receiving objects: 100% (63314/63314), 35.44 MiB | 4.65 MiB/s, done.
Resolving deltas: 100% (41424/41424), done.
Checking connectivity... done.
git checkoutしたのち、ビルドします。すると勝手にDockerコンテナが起動し、コンテナの中でガリガリとビルドしてくれます。
$ cd /home/ec2-user/docker/docker
$ git checkout -b work
$ sudo make build
(...snip...)
Successfully built 0498e896bb47
そしてDockerのバイナリファイルを作成します。
$ sudo make binary
$ ls -alF bundles/1.3.1-dev/binary/
合計 14224
drwxr-xr-x 2 root root 4096 11月 21 04:50 ./
drwxr-xr-x 3 root root 4096 11月 21 04:49 ../
lrwxrwxrwx 1 root root 16 11月 21 04:50 docker -> docker-1.3.1-dev*
-rwxr-xr-x 1 root root 14548274 11月 21 04:50 docker-1.3.1-dev*
-rw-r--r-- 1 root root 51 11月 21 04:50 docker-1.3.1-dev.md5
-rw-r--r-- 1 root root 83 11月 21 04:50 docker-1.3.1-dev.sha256
/usr/bin/dockerを入れ替えます。
$ sudo service docker stop
Stopping docker: [ OK ]
$ sudo mv /usr/bin/docker /usr/bin/docker.old
$ sudo cp bundles/1.3.1-dev/binary/docker-1.3.1-dev /usr/bin/docker
$ sudo service docker start
Starting docker: [ OK ]
そして動作確認とバージョン確認します。
$ sudo docker -H=tcp://127.0.0.1:4243 version
Client version: 1.3.1-dev
Client API version: 1.16
Go version (client): go1.3.3
Git commit (client): e3f3259
OS/Arch (client): linux/amd64
Server version: 1.3.1-dev
Server API version: 1.16
Go version (server): go1.3.3
Docker CLI for Windowsから接続してみる:リトライ
では改めまして、再度WindowsからDocker CLIを使って、 Amazon LinuxのDockerサーバに接続してみます。とりあえずバージョン確認。
c:¥Go¥src¥github.com¥docker¥docker¥docker>docker version
Client API version: 1.16
Go version (client): go1.3.3
OS/Arch (client): windows/amd64
Server version: 1.3.1-dev
Server API version: 1.16
Go version (server): go1.3.3
Git commit (server): e3f3259
大丈夫そうですね。ではコンテナを起動してみましょう。
c:¥Go¥src¥github.com¥docker¥docker¥docker>docker run centos /bin/echo "Hello, From Windows"
Unable to find image 'centos' locally
Pulling repository centos
←[1B2d0bdc10: Pulling dependent layers om centos, endpoint: https://registry-1.docker.io/v1/
←[0B36ea3c5a: Download complete
←[3BStatus: Downloaded newer image for centos:latest
Hello, From Windows
起動しました!
Dockerサーバ側で確認すると、もちろん起動した痕跡が残ってます。
$ sudo docker -H=tcp://127.0.0.1:4243 ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
96177826817a centos:centos7 "/bin/echo 'Hello, F 21 seconds ago Exited (0) 21 seconds ago backstabbing_torvalds
ということで、Docker CLI for Windowsが使えました!
さいごに
次期Windows ServerでDockerを採用というニュースがあったり、Amazon EC2 Container Serviceがリリースされたりと、これからもDocker界隈は賑わいそうです。そんな中まずはDocker CLI for Windowsがリリースされたことで、ますます周辺ツールなどが拡充していくのでは無いでしょうか。楽しみですね!