ちょっと話題の記事

Docker CLI for Windowsを使ってみた

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

Docker CLI for Windowsが公開されましたね!(Publickeyさん、いつもお世話になってます!)

ということで試してみました!環境は以下のような形になります。

AWS_Simple_Icons_2_2_light_edition_pptx

やってみた

Docker CLI for Windowsのインストール

Docker CLI for Windowsのインストール手順は大きく4段階になります。

  1. Golangのインストール
  2. Git for Windowsのインストール
  3. Githubリポジトリのclone
  4. Docker CLIのビルド

Golangのインストール

The Go Programming LanguageのGetting Startedから[MSI file]のリンクをクリックします。

Getting_Started_-_The_Go_Programming_Language

[Downloads]ページが開くので、[go1.3.3.windows-amd64.msi]をダウンロードします。

Downloads_-_The_Go_Programming_LanguageダウンロードしたMSIファイルを実行すると、以下のようにSetup Wizardが開始されます。[Next]ボタンをクリックします。

Windows_7_x64

[License Agreement]に同意(Accept)して、[Next]ボタンをクリックします。

Windows_7_x64 2

フォルダの選択画面が表示されるので、必要に応じて変更(今回はそのままとしました)し、[Next]ボタンをクリックします。

Windows_7_x64 3

Ready to install画面が表示されるので、[Install]ボタンをクリックすると、インストールが進行します。

Windows_7_x64 4

インストールが完了したら[Finish]ボタンをクリックします。

Windows_7_x64 5

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ファイルをダウンロードします。

Git_-_Downloads

ダウンロードしたMSIファイルを実行します。Setup Wizard画面が表示されたら[Next]ボタンをクリックします。

Windows_7_x64 6

[Information]画面が表示されます。そのまま[Next]ボタンをクリックします。

Windows_7_x64 7

インストール先ディレクトリの選択画面が表示されます。必要に応じて変更し、[Next]ボタンをクリックします。

Windows_7_x64 8

コンポーネントの選択画面が表示されます。特に変更せず、そのまま[Next]ボタンをクリックします。

Windows_7_x64 9

メニューフォルダーの選択画面が表示されます。特に変更せず、そのまま[Next]ボタンをクリックします。

Windows_7_x64 10

PATH環境変数の設定についての画面が表示されます。今回はGit Bashからしか使わないので、そのまま[Next]ボタンをクリックします。

Windows_7_x64 11

改行コードについての設定画面が表示されます。そのまま[Next]をクリックするとインストールが進行します。

Windows_7_x64 12

インストールが完了します。必要に応じてReleaseNotesを参照し、[Finish]ボタンをクリックします。

Windows_7_x64 13

これでGitのインストールは完了です。

Githubリポジトリのclone

Windowsスタート画面にGit bashがありますのでクリックします。

Windows_7_x64 14

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がリリースされたことで、ますます周辺ツールなどが拡充していくのでは無いでしょうか。楽しみですね!