前两天需要在Centos6上面封装docker镜像需要安装docker,但是发现在Centos6上安装docker只能安装docker 1.7.1版本。此版本推送镜像到harbor验证有问题,故需要升级docker版本到17.03.2-ce。

特别注意,编译安装过程极度依赖梯子,否则安装很难成功!

一、升级内核

  • 在centos6上安装docker17.03.2,需要先将内核升级到3.10版本(未考证?),故直接安装最新稳定版内核
1
2
3
4
5
6
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-6-8.el6.elrepo.noarch.rpm
yum install kernel-lt -y
sed -i 's/default=1/default=0/g' /etc/grub.conf
reboot
uname -sr #Linux 4.4.185-1.el6.elrepo.x86_64

二、安装依赖docker环境

  • docker 17.03.2安装全部都是在docker里面完成的,故需要安装一个老版本的docker,才能编译安装17.03版本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 安装1.7.1版本
rpm -ivfh https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm
yum install https://get.docker.com/rpm/1.7.1/centos-6/RPMS/x86_64/docker-engine-1.7.1-1.el6.x86_64.rpm

docker version # version: 1.7.1

#下载1.9.1然后替换
curl -sSL -O https://get.docker.com/builds/Linux/x86_64/docker-1.9.1
chmod +x docker-1.9.1
mv docker-1.9.1 /usr/bin/docker

service docker restart

docker version # version: 1.9.1

三、安装依赖环境

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
yum install git make -y

#Docker使用Golang开发
wget https://dl.google.com/go/go1.10.linux-amd64.tar.gz
tar xzf go1.10.linux-amd64.tar.gz -C /usr/local
mkdir /usr/local/gopackage

vi /etc/profile
#在profile中加入下面的环境变量,PATH如果原来就有请自行合并
GOROOT=/usr/local/go
GOPATH=/usr/local/gopackage
PATH=$PATH:$GOROOT/bin:$GOPATH/bin
export GOROOT GOPATH PATH

source /etc/profile

四、安装docker

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 修改git缓存,防止git clone中断
git config --global http.postBuffer 524288000

git clone https://github.com/moby/moby
cd moby

# 选择17.03.2
git checkout v17.03.2-ce

# 编辑Dockerfile
vim Dockerfile

# 修改130为:
RUN curl -fsSL "https://golang.org/dl/go${GO_VERSION}.linux-amd64.tar.gz" \

# 建议在第一个git clone之前RUN一个代理,否则git clone大概率失败
RUN git config --global http.https://github.com.proxy socks5://127.0.0.1:1080 \

make build # 此步骤极度耗时,且因为某种原因,安装过程极易中断
make binary
make install

五、移除旧版本,指向新版本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#卸载旧的docker
yum remove docker-engine* -y

#清理下遗留的文件
rm -rf /var/lib/docker/*

#docker 配置文件
wget https://raw.githubusercontent.com/moby/moby/master/contrib/init/sysvinit-redhat/docker.sysconfig -O /etc/sysconfig/docker

#docker init启动文件
wget https://raw.githubusercontent.com/moby/moby/master/contrib/init/sysvinit-redhat/docker -O /etc/init.d/docker

#修改启动文件中dockerd的位置
sed -i "27s#usr/bin#usr/local/bin#g" /etc/init.d/docker

#修改环境变量,覆盖functions脚本中的PATH,防止无法找到docker-container等程序
sed -i "23s#functions#functions\nexport PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin#g" /etc/init.d/docker

#启动
service docker restart

#查看版本
ln -s /usr/local/bin/docker /usr/bin/docker
docker version

六、完成验证

参考: