Dockerをソースからビルドする(1.8.0-dev)

Jul 13, 2015   #docker 

Dockerは1.7.0からネイティブでコンテナ間ネットワークが作れる機構を搭載しています(開発中で、どこまで動くか保証なしです)。 普通にパッケージで入れても使えない機能のため、今回はソースからビルドしてみます(この記事はビルドまで)。

環境はEC2でFedora22を使いました。

makeとgitを入れて、リポジトリをクローンします。

yum install -y git make
git clone https://github.com/docker/docker.git

さっそくビルドしようとしたら怒られました。

make DOCKER_EXPERIMENTAL=1 binary
mkdir bundles
docker build -t "docker-dev:master" .
/bin/sh: docker: command not found
Makefile:69: recipe for target 'build' failed
make: *** [build] Error 127

docker buildでコンテナを作ろうとしてますが、当然dockerは入ってないので無理です。 ネットで調べると、goのコンパイルはコンテナ内で行われるため、最初にdockerを入れろとのこと・・・

なのでyumで入れてから起動します。 dockerは1.6.2が入りました。

yum install docker
systemctl start docker

再度makeを走らせます。 今回はネイティブなネットワーク機能を使いたいので、EXPERIMENTAL=1にします。

make DOCKER_EXPERIMENTAL=1 binary

するとubuntuのベースイメージをpullし始めました。 dockerをdocker上でコンパイルするとは、何とも違和感があります。

# make DOCKER_EXPERIMENTAL=1 binary
docker build -t "docker-dev:master" .
Sending build context to Docker daemon 79.21 MB
Sending build context to Docker daemon
Step 0 : FROM ubuntu:14.04
14.04: Pulling from docker.io/ubuntu

コンパイルが終わると、bundles/1.8.0-dev/binaryにバイナリが入っています(パスはバージョンによって異なります)。

ll
total 19372
lrwxrwxrwx. 1 root root       16 Jul 13 00:46 docker -> docker-1.8.0-dev
-rwxr-xr-x. 1 root root 19825239 Jul 13 00:46 docker-1.8.0-dev
-rw-r--r--. 1 root root       51 Jul 13 00:46 docker-1.8.0-dev.md5
-rw-r--r--. 1 root root       83 Jul 13 00:46 docker-1.8.0-dev.sha256

他にベストな方法があるのかもしれませんが、yumで入れたdockerを差し替えます。

systemctl stop docker
cd /usr/bin
mv docker docker.old
cp ~/docker/bundles/1.8.0-dev/binary/docker-1.8.0-dev docker

起動とバージョン確認をしてみます。

docker version
Client:
 Version:      1.8.0-dev
 API version:  1.20
 Go version:   go1.4.2
 Git commit:   441ae6c
 Built:        Mon Jul 13 14:09:34 UTC 2015
 OS/Arch:      linux/amd64
 Experimental: true

Server:
 Version:      1.8.0-dev
 API version:  1.20
 Go version:   go1.4.2
 Git commit:   441ae6c
 Built:        Mon Jul 13 14:09:34 UTC 2015
 OS/Arch:      linux/amd64
 Experimental: true

1.8.0が動いていて、Experimentalもtrueになっていますね。

お目当てのdocker networkコマンドもあります。

docker network
docker: "network" requires a minimum of 1 argument.
See 'docker network --help'.

Usage: docker network [OPTIONS] COMMAND [OPTIONS] [arg...]

Commands:
    create                   Create a network
    rm                       Remove a network
    ls                       List all networks
    info                     Display information of a network

Run 'docker network COMMAND --help' for more information on a command.

次回は1.8.0を使って、ネイティブなコンテナ間ネットワークを作れるだけ作ってみます。

2015/07/14追記:
ネイティブでマルチホストを組む記事書きました。 よければこちらもどうぞ。
Dockerネイティブでマルチホストネットワーキングを実現する