share facebook facebook2 twitter menu hatena pocket slack

2014.11.25 TUE

Windows 版 Docker をビルドして試す

川原 洋平

WRITTEN BY川原 洋平

どうも、cloudpackDocker 再履修中の かっぱ (@inokara) です。

はじめに

この記事見てヲヲって思って試してみました。

現状、Windows で Docker を体験するには MacOS X のように Boot2docker での利用が Docker のドキュメントにも記載されているので Windows で Docker が動くというのは Docker 本体が動くということではなく Docker のクライアントが動くということですのでご注意下さい…。

Docker for Windows

ビルド

ドキュメントに従って(ナゾって)ビルドする。
こちらをそのまま写経してみました。
Docker for Windows を試す(1)

はじめに Go をインストールします。
Docker for Windows を試す(2)

コマンドプロンプトを起動して以下を実行します。

git clone https://github.com/docker/docker.git c:gopathsrcgithub.comdockerdocker
set GOPATH=c:gopath;c:gopathsrcgithub.comdockerdockervendor
set DOCKER_CLIENTONLY=1
cd c:gopathsrcgithub.comdockerdockerdocker
go build -v

GitHub から Docker のソースコードを取得して GOPATH の設定を行ってビルドを実行します。
Docker for Windows を試す(3)

しばらくすると Docker のバイナリが生成されます。
Docker for Windows を試す(4)

とりあえず docker version です。

docker ps の前に…

Amazon Linux にセットアップした Docker で Docker API を外部ホストから実行出来るように以下の通り修正します。

--- /etc/init.d/docker.bk       2014-11-19 12:59:04.679149165 +0000
+++ /etc/init.d/docker  2014-11-19 12:59:13.614960391 +0000
@@ -46,7 +46,7 @@
         prestart
         printf "Starting $prog:t"
         echo "n$(date)n" >> $logfile
-        nohup $exec -d $other_args &>> $logfile &
+        nohup $exec -d -H tcp://0.0.0.0:4243 &>> $logfile &
         pid=$!
         touch $lockfile
         # wait up to 10 seconds for the pidfile to exist.  see

修正後に Docker を起動すると外部ホストから Docker API のアクセスを受け付けるようになります。

$ 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 ps

早速 Docker for Windows からアクセスしてみましょう。
Docker for Windows を試す(5)

あれ…Client の API バージョンと Server の API バージョンは同一である必要があるようです…。
上記のように Server の API バージョンは残念ながら 1.15 になっています…。

Amazon Linux でも Docker をビルドする

こちらを参考にして Docker をビルドします。

ビルドします。

mkdir ~/docker
cd ~/docker/
git clone https://git@github.com/docker/docker
cd docker
sudo make build
sudo make binary

しばらく待ちましょう…。

cd ~/docker/docker/bundles/1.3.1-dev/binary
$ ls -l
total 14084
lrwxrwxrwx 1 root root       16 Nov 19 01:22 docker -> docker-1.3.1-dev
-rwxr-xr-x 1 root root 14410482 Nov 19 01:22 docker-1.3.1-dev
-rw-r--r-- 1 root root       51 Nov 19 01:22 docker-1.3.1-dev.md5
-rw-r--r-- 1 root root       83 Nov 19 01:22 docker-1.3.1-dev.sha256

正常にビルドが終了したことを確認して、ビルドしたバイナリで Docker を起動してみます。

sudo ./docker -H 0.0.0.0:4243 -d &

以下のように標準出力にデバッグログが出力されるものの Docker が起動しました。

[1] 32406
INFO[0000] +job serveapi(tcp://0.0.0.0:4243)
INFO[0000] Listening for HTTP on tcp (0.0.0.0:4243)
INFO[0000] /! DON'T BIND ON ANOTHER IP ADDRESS THAN 127.0.0.1 IF YOU DON'T KNOW WHAT YOU'RE DOING /!
INFO[0000] +job init_networkdriver()
INFO[0000] -job init_networkdriver() = OK (0)
INFO[0000] Loading containers: start.
....
INFO[0000] Loading containers: done.
INFO[0000] docker daemon: 1.3.1-dev 0722c9b; execdriver: native-0.2; graphdriver: devicemapper
INFO[0000] +job acceptconnections()
INFO[0000] -job acceptconnections() = OK (0)

早速 docker version で確認してみましょう。

$ 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
INFO[0109] GET /v1.15/version
INFO[0109] +job version()
INFO[0109] -job version() = OK (0)
Server version: 1.3.1-dev
Server API version: 1.16
Go version (server): go1.3.3
Git commit (server): 0722c9b

おっしゃ、Server API のバージョンは 1.16 になっていますね!

改めて Windows for Docker

docker.exe -H tcp://xxx.xxx.xxx.xxx:4243 version

Docker for Windows を試す(6)

おお、キタ。

ついでに docker run も

docker.exe -H tcp://xxx.xxx.xxx.xxx:4243 run -t -i centos:centos6 /bin/bash<

Docker for Windows を試す(7)

おお、CentOS が起動した。

API の向こう側で動いているので Windows で Docker が動いているんや!って言えないけど…コマンドプロンプト内で CentOS が動いているように見えるのはちょっと不思議。

とりあえず

Windows 上でビルドした Docker クライアントを動かしてみました。
上記のようにコマンドプロンプト内で Docker クライアントが動いて docker run とか出来るのは不思議な気分です。
但し、現状では Docker をビルドしなければいけないのでお手軽にはといかないですが、是非、お試しくださいませ。

元記事はこちらです。
Windows 版 Docker をビルドして試す