docker之构建docker开发环境

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值