os:ubuntu 14.04
Client version: 1.4.1-dev
Client API version: 1.17
Go version (client): go1.4.1
Git commit (client): d400ac7-dirty
OS/Arch (client): linux/amd64
Server version: 1.4.1-dev
Server API version: 1.17
Go version (server): go1.4.1
Git commit (server): d400ac7-dirty
1 安装工具
git:yum install git
make:yum install make
2 安装docker
docker的build环境本身就是个container,所以先安装个docker。
这个网上有很多资料,或者安装github上docker的指导。
3 获取docker源码
git clone https://git@github.com/docker/docker
cd docker(以下的操作都是在这个目录下进行的)
检查docker版本
git checkout
4 构建开发环境(安装依赖)
make build
4.1 go源码问题
此命令使用Dockerfile构建docker的开发环境,它会安装所有在build和测试docker时的build和runtime依赖
由于被墙的原因,在build时会出现错误,从本人的操作来看,在获取go源码会出现错误,解决的办法是从
golang.go/dl/下载Dockerfile中GO_VERSION指定版本号的源码到Dockfile所在的目录下,然后修改Dockerfile。
将
RUN curl -sSL https://golang.org/dl/go${GO_VERSION}.src.tar.gz | tar -v -C /usr/local -xz && mkdir -p /go/bin
修改为
ADD go${GO_VERSION}.src.tar.gz /usr/local
RUN mkdir -p /go/bin
4.2 gofmt问题
在执行这条命令也出错了
RUN curl -sSL https://storage.googleapis.com/golang/go${GOFMT_VERSION}.$(go env GOOS)-$(go env GOARCH).tar.gz | tar -C /go/bin -xz --strip-components=2 go/bin/gofmt
解决的办法是单独下载go${GOFMT_VERSION}.$(go env GOOS)-$(go env GOARCH).tar.gz对应的版本,解压之,将bin/gofmt复制到Dockerfile所在目录下,然后修改Dockerfile。
由
RUN curl -sSL https://storage.googleapis.com/golang/go${GOFMT_VERSION}.$(go env GOOS)-$(go env GOARCH).tar.gz | tar -C /go/bin -xz --strip-components=2 go/bin/gofmt
修改为
ADD gofmt /go/bin/
4.3 gem问题
# TODO replace FPM with some very minimal debhelper stuff
#RUN gem install --no-rdoc --no-ri fpm --version 1.3.2
4.4 busy-box问题
在获取busy-box时,连接git超时
修改.git/config文件
由
[remote "origin"]
url = https://git@github.com/docker/docker
fetch = +refs/heads/*:refs/remotes/origin/*
修改为
[remote "origin"]
url = git://git@github.com/docker/docker
fetch = +refs/heads/*:refs/remotes/origin/*
4.5 docker-py问题
获取docker-py时,git 超时
将
RUN git clone https://github.com/docker/docker-py.git /docker-py \
&& cd /docker-py \
&& git checkout -q $DOCKER_PY_COMMIT
修改为
RUN git clone https://github.com/docker/docker-py /docker-py \
&& cd /docker-py \
&& git checkout -q $DOCKER_PY_COMMIT
5 构建docker的二进制文件
构建docker二进制文件需要设置binddir环境变量(如果没有设置):make BINDDIR=. binary
make binary
如果build成功,二进制文件会在./bundles/<version>-dev/binary/下
6 测试构建的docker二进制文件
在运行docker二进制文件之前,最好做一下测试
sudo make test
如果要做某个功能的测试,设置环境变量TESTFLAGS
TESTFLAGS='-test.run \^TestBuild\$' make test
(TestBuild为需要测试的功能)
TestBuild为docker源码中的各个模块名字,如果测试成功,会提示如
+ go test -test.timeout=30m github.com/docker/docker/utils
PASS
Test success
7 安装构建的docker二进制文件
如果测试成功,使用./bundles/<version>-dev/binary/下的docker二进制文件,使用这个二进制文件替换系统目前
正在使用的docker二进制文件,步骤如下:
stop目录系统中运行的docker进程
sudo service docker stop
备份刚刚停止的docker文件
sudo cp $(which docker) $(which docker)_
将构建的docker二进制文件copy到docker执行目录下
sudo cp ./bundles/<version>-dev/binary/docker-<version>-dev $(which docker)
启动新的docker
sudo service docker start
8 使用构建的docker
make shell
9 文档
make docs
10 servier docker.io stop
make出docker的二进制文件后,安装到/usr/bin下,需要先stop当前运行的docker进程
使用service docker.io stop不能成功,提示有upstart管理。
解决方法:将/etc/init.d/docker.io中的关于upstart注释掉(比较暴力!!)
11 关于开发的文档
https://groups.google.com/forum/#!topic/docker-dev/2AY7SYrAxbM