LoginSignup
18
12

More than 5 years have passed since last update.

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

Posted at

概要

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

参考サイト

18
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
12