docker をソースからビルドしてみる
Dockerのソースが読めるようになりたいな。
いろいろいじりながら読めば、読めるようになるかも。
ということで Dockerをソースからビルドしてみました。
もちろん Go言語なんて知らない超初心者ですのでまずググるところから。
以下参考資料。
http://qiita.com/Arturias/items/8c9c9321e87675c7d023
http://d.hatena.ne.jp/embedded/20140626/p1
http://tanksuzuki.com/post/docker-source-build-1.8.0/
ビルドを行う環境は VirtualBoxのUbuntu16.04で準備しました。
環境情報はこんな感じです
root@docker-01:~/work/docker# uname -a Linux docker-01 4.4.0-38-generic #57-Ubuntu SMP Tue Sep 6 15:42:33 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux root@docker-01:~/work/docker# docker info Containers: 0 Running: 0 Paused: 0 Stopped: 0 Images: 51 Server Version: 1.12.2 Storage Driver: aufs Root Dir: /var/lib/docker/aufs Backing Filesystem: extfs Dirs: 57 Dirperm1 Supported: true Logging Driver: json-file Cgroup Driver: cgroupfs Plugins: Volume: local Network: null host overlay bridge Swarm: inactive Runtimes: runc Default Runtime: runc Security Options: apparmor seccomp Kernel Version: 4.4.0-38-generic Operating System: Ubuntu 16.04.1 LTS OSType: linux Architecture: x86_64 CPUs: 1 Total Memory: 740.4 MiB Name: docker-01 ID: 5DH2:HZB5:FHVI:RRDB:YFCB:P3OL:ZMZG:K5D4:OKJ2:ORNZ:FVLY:2BRF Docker Root Dir: /var/lib/docker Debug Mode (client): false Debug Mode (server): false Registry: https://index.docker.io/v1/ WARNING: No swap limit support Cluster Store: consul://192.168.56.102:8500/nodes Cluster Advertise: 192.168.56.102:2375 Insecure Registries: 127.0.0.0/8
DockerのビルドはDockerが必要なようなのでDocker をインストールしておきます。
Dockerのインストール方法はこちら。
https://docs.docker.com/engine/installation/linux/ubuntulinux/
そのほかに、make、gitが必要なようです。
apt-get install -y git make
Docker のソースをDLしてきて。。
git clone https://git@github.com/docker/docker.git cd docker
ビルド方法は
# make
なんとこれだけ。
実行するとかなり長い時間かかって
bundles/1.13.0-dev/ のフォルダができました。
<<省略>> Successfully built 622249935083 docker run --rm -i --privileged -e BUILD_APT_MIRROR -e BUILDFLAGS -e KEEPBUNDLE -e DOCKER_BUILD_ARGS -e DOCKER_BUILD_GOGC -e DOCKER_BUILD_PKGS -e DOCKER_DEBUG -e DOCKER_EXPERIMENTAL -e DOCKER_GITCOMMIT -e DOCKER_GRAPHDRIVER=aufs -e DOCKER_INCREMENTAL_BINARY -e DOCKER_PORT -e DOCKER_REMAP_ROOT -e DOCKER_STORAGE_OPTS -e DOCKER_USERLANDPROXY -e TESTDIRS -e TESTFLAGS -e TIMEOUT -e HTTP_PROXY -e HTTPS_PROXY -e NO_PROXY -e http_proxy -e https_proxy -e no_proxy -v "/root/work/docker/bundles:/go/src/github.com/docker/docker/bundles" -t "docker-dev:master" hack/make.sh binary ---> Making bundle: binary (in bundles/1.13.0-dev/binary) Building: bundles/1.13.0-dev/binary-client/docker-1.13.0-dev Created binary: bundles/1.13.0-dev/binary-client/docker-1.13.0-dev Building: bundles/1.13.0-dev/binary-daemon/dockerd-1.13.0-dev Created binary: bundles/1.13.0-dev/binary-daemon/dockerd-1.13.0-dev Building: bundles/1.13.0-dev/binary-daemon/docker-proxy-1.13.0-dev Created binary: bundles/1.13.0-dev/binary-daemon/docker-proxy-1.13.0-dev Copying nested executables into bundles/1.13.0-dev/binary-daemon
次はこれをどうやって使うのか。。。
Dockerクライアントは
成果物フォルダ内のbinary-client に docker の実行ファイルがあったので
叩いてみたら無事使えました。
root@docker-01:~/work/docker# bundles/1.13.0-dev/binary-client/docker iversion docker: 'iversion' is not a docker command. See 'docker --help'. root@docker-01:~/work/docker# bundles/1.13.0-dev/binary-client/docker version Client: Version: 1.13.0-dev API version: 1.25 Go version: go1.7.3 Git commit: 1f9bece Built: Sun Oct 23 00:05:14 2016 OS/Arch: linux/amd64 Error response from daemon: client is newer than server (client API version: 1.25, server API version: 1.24)
Dockerサービスはこんな感じで起動します。
現在動いているサービスを止めてから動かすことを忘れずに。
root@docker-01:~/work/docker# systemctl stop docker.service
root@docker-01:~/work/docker# bundles/1.13.0-dev/binary-daemon/dockerd INFO[0000] libcontainerd: new containerd process, pid: 7122 WARN[0000] containerd: low RLIMIT_NOFILE changing to max current=1024 max=65536 INFO[0001] [graphdriver] using prior storage driver: aufs INFO[0001] Graph migration to content-addressability took 0.00 seconds WARN[0001] Your kernel does not support swap memory limit. INFO[0001] Loading containers: start. INFO[0001] Firewalld running: false INFO[0001] Default bridge (docker0) is assigned with an IP address 172.17.0.0/16. Daemon option --bip can be used to set a preferred IP address INFO[0001] Loading containers: done. INFO[0001] Daemon has completed initialization INFO[0001] Docker daemon commit=1f9bece graphdriver=aufs version=1.13.0-dev INFO[0001] API listen on /var/run/docker.sock
別の端末から確認します。
root@docker-01:~# docker info Containers: 0 Running: 0 Paused: 0 Stopped: 0 Images: 51 Server Version: 1.13.0-dev Storage Driver: aufs Root Dir: /var/lib/docker/aufs Backing Filesystem: extfs Dirs: 57 Dirperm1 Supported: true Logging Driver: json-file Cgroup Driver: cgroupfs Plugins: Volume: local Network: bridge bridge host host macvlan null null overlay Swarm: inactive Runtimes: runc Default Runtime: runc Security Options: apparmor seccomp Kernel Version: 4.4.0-38-generic Operating System: Ubuntu 16.04.1 LTS OSType: linux Architecture: x86_64 CPUs: 1 Total Memory: 740.4 MiB Name: docker-01 ID: 5DH2:HZB5:FHVI:RRDB:YFCB:P3OL:ZMZG:K5D4:OKJ2:ORNZ:FVLY:2BRF Docker Root Dir: /var/lib/docker Debug Mode (client): false Debug Mode (server): false Registry: https://index.docker.io/v1/ WARNING: No swap limit support Insecure Registries: 127.0.0.0/8 root@docker-01:~#
動いてますね!
moremagic
2016-10-23