Posted at

ソースコードからの Docker のコンパイル

More than 3 years have passed since last update.


概要

Docker のソースコードから、Docker Engine のバイナリをコンパイルする手順をまとめてみました。これで正式版リリースを待たずに最新機能を試すことができるようになります。


コンパイルに必要なもの


  • Docker

  • git

  • make

Docker をコンパイルするには Docker が必要です。コンパイル環境を Docker コンテナ内に構築するためです。なので、Linux ホストに現行版の Docker をインストールすることから始めます。

なお、今回試した環境は以下の通りです。


  • ホスト: CentOS 7 (AWS EC2 上)

  • ホストにインストールする Docker : 1.8.1


手順

まず、CentOS 上に Docker をインストールします。現時点(2015/08/19)での最新の正式版である 1.8.1 をインストールしました(インストール手順はここを参照)。

# システムの最新化

$ sudo yum update -y

# Docker 最新版のインストール
$ curl -sSL https://get.docker.com/ | sh

# Docker デーモンの開始
$ sudo systemctl start docker.service

他に必要となる git と make をインストールしておきます。

$ sudo yum install git make -y

次にソースコードをダウンロード。

$ git clone https://git@github.com/docker/docker

$ cd docker

そして、make build でコンパイル環境を構築。

$ sudo make build

mkdir bundles
docker build -t "docker-dev:master" .
Sending build context to Docker daemon 93.29 MB
Step 0 : FROM ubuntu:14.04
(以下略)

make build は、ソースコードのルートディレクトリある Dockerfile から、コンパイル用の Docker イメージを生成します(この make build が完了するまでには10~15分程度かかる)。

make build 完了後には、イメージが追加されていることが確認できます。

$ sudo docker images

REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
docker-dev master add7b7c650cf About a minute ago 1.902 GB
ubuntu 14.04 8251da35e7a7 11 days ago 188.3 MB

最後にコンパイルを実行。

$ sudo make binary

make binary はコンパイル用の Docker コンテナを生成し、そこでコンパイルが実行されます。このコンテナにはホスト側の <ソースコード>/docker/bundles ディレクトリがマウントされ、コンテナ内でコンパイルされたバイナリはそこに出力されます。

$ ls -l /home/centos/docker/bundles/latest/binary/

total 21124
lrwxrwxrwx. 1 root root 16 Aug 19 13:17 docker -> docker-1.9.0-dev
-rwxr-xr-x. 1 root root 21622150 Aug 19 13:17 docker-1.9.0-dev ★★これがdockerコマンド★★
-rw-r--r--. 1 root root 51 Aug 19 13:17 docker-1.9.0-dev.md5
-rw-r--r--. 1 root root 83 Aug 19 13:17 docker-1.9.0-dev.sha256

動作確認をしてみると。たしかに Docker 1.9.0(の開発版)が動作しています。

# 実行中の Docker デーモンを停止

$ sudo systemctl stop docker.service

# インストール済みの docker コマンドをリネーム
$ sudo mv /usr/bin/docker /usr/bin/docker-1.8.1

# コンパイルした docker コマンドを /usr/bin/docker としてコピー
$ sudo cp /home/centos/docker/bundles/latest/binary/docker-1.9.0-dev /usr/bin/docker

# Docker デーモンを開始
$ sudo systemctl start docker.service

# バージョンを表示させてみる。
$ sudo docker version
Client:
Version: 1.9.0-dev
API version: 1.21
Go version: go1.4.2
Git commit: 3dc30d4
Built: Wed Aug 19 13:16:55 UTC 2015
OS/Arch: linux/amd64

Server:
Version: 1.9.0-dev
API version: 1.21
Go version: go1.4.2
Git commit: 3dc30d4
Built: Wed Aug 19 13:16:55 UTC 2015
OS/Arch: linux/amd64


参考サイト