一.起因
其实吧,我目前大部分跑Docker的机器用的还都是CentOS7,毕竟因为方便点,不需要自己折腾,但是,有些时候还真是迫不得已。前阵子买了台Dacentec的大硬盘服务器,准备拿来跑另外一个Plex服务器的,顺便因为带了/29的ip所有打算拿来再搞点别的比如存储仓库和PT啥的,不过,在我装CentOS7的时候卡死在PXE装系统的步骤了,发了个工单得知了一个蛋疼的消息,就是这款超微的主板网卡驱动与CentOS7不兼容,所以导致我半天都装不上去。没办法了,只能装CentOS6了。
那么原本计划用来跑其他用途的Docker也只能通过编译的方法安装了,说实在话这个我心里还是有底的,毕竟之前折腾过,参见——>传送门
只是那次只是玩玩的,属于实验性质,不太靠谱,所以这次打算折腾个完全能用的方法出来。
二.方法
前半部分其实和原来的差不多,只是为了安装更新的版本所以有所变动。有一点需要注意,就是最新的Docker采用OverLay2作为存储驱动,这个我前一篇文章还提到过,所以对内核版本要求比较高,请务必在进行下面操作前安装新版本的内核,还能顺便启用BBR,参见——>传送门
第一步,先装自带的1.7版本Docker然后移花接木换1.9
#Centos6的1.7.1版本Docker在EPEL和Docker官方源提供,EPEL方便点 yum install epel-release -y #docker-io才是1.7.1版本的,叫docker那个是1.5版本的 yum install docker-io -y #下载1.9.1然后替换 curl -sSL -O https://get.docker.com/builds/Linux/x86_64/docker-1.9.1 chmod +x docker-1.9.1 sudo mv docker-1.9.1 /usr/bin/docker service docker restart
这步为的是提供编译最新版本Docker的一个基础,接着安装编译环境
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改名为moby,不用纠结 git clone https://github.com/moby/moby cd moby #要啥版本你自己看着切换,我们选择比较稳定的最新版本17.03.2,你也可以选择17.05啥的 git checkout v17.03.2-ce make build make binary make install
不得不说,这步比较漫长,我建议你可以先开个screen然后编译,防止网络问题断开ssh导致出错
编译完成后我们可以收尾了。
#卸载旧的docker yum remove docker-io -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 #查看版本 docker version
安装完成后大概这样
三.安装配套程序
一般情况下我们使用Docker还会用docker-machine以及docker-compose,所以也安装下
curl -L https://github.com/docker/machine/releases/download/v0.14.0/docker-machine-`uname -s`-`uname -m` >/tmp/docker-machine install /tmp/docker-machine /usr/local/bin/docker-machine docker-machine version curl -L https://github.com/docker/compose/releases/download/1.19.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose docker-compose --version
然后,你现在已经可以为所欲为了,开始随意使用你的最新版本Docker吧。
文章评论
你好!我在执行make build的时候出现了问题
[root@instance-4 moby]# make build
mkdir bundles
mkdir -p .go-pkg-cache/gopath .go-pkg-cache/goroot-linux_amd64_netgo
docker build -t "docker-dev:HEAD" -f "Dockerfile" .
Sending build context to Docker daemon 186.8 MB
Step 1 : FROM debian:jessie
jessie: Pulling from library/debian
d1572d8eaa7a: Pull complete
a097de700a6b: Pull complete
Digest: sha256:efa375aa411a64b02bc03db35b2dd673ceeb219133e998d290d993667315a7ca
Status: Downloaded newer image for debian:jessie
---> a097de700a6b
Step 2 : ARG APT_MIRROR=deb.debian.org
---> Running in c6c09fef55e9
---> 994f57f68fa4
Removing intermediate container c6c09fef55e9
Step 3 : RUN sed -ri "s/(httpredir|deb).debian.org/$APT_MIRROR/g" /etc/apt/sources.list
---> Running in 4c2ba67e90ae
Timestamp: 2018-08-13 08:11:30.993773657 +0000 UTC
Code: System error
Message: mkdir /var/lib/docker/devicemapper/mnt/4c2ba67e90ae4c1da710f376bde49626cf83820e4d6b346fd54cce38a6144753/rootfs/sys/fs/cgroup: no such file or directory
Frames:
---
0: setupRootfs
Package: github.com/opencontainers/runc/libcontainer
File: rootfs_linux.go@40
---
1: Init
Package: github.com/opencontainers/runc/libcontainer.(*linuxStandardInit)
File: standard_init_linux.go@57
---
2: StartInitialization
Package: github.com/opencontainers/runc/libcontainer.(*LinuxFactory)
File: factory_linux.go@242
---
3: initializer
Package: github.com/docker/docker/daemon/execdriver/native
File: init.go@35
---
4: Init
Package: github.com/docker/docker/pkg/reexec
File: reexec.go@26
---
5: main
Package: main
File: docker.go@18
---
6: main
Package: runtime
File: proc.go@63
---
7: goexit
Package: runtime
File: asm_amd64.s@2232
[8] System error: mkdir /var/lib/docker/devicemapper/mnt/4c2ba67e90ae4c1da710f376bde49626cf83820e4d6b346fd54cce38a6144753/rootfs/sys/fs/cgroup: no such file or directory
make: *** [build] Error 1
@真爱一生 咋mkdir报错了,你试试把devicemapper换成overlayfs看看
@Senra 嗯嗯谢谢了,我自己解决了!是因为内核的版本低的原因,我安装你的提示执行
yum install centos-release-xen-46 -y
yum install kernel
之后没有成功!
然后执行
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 --enablerepo=elrepo-kernel install kernel-lt -y
vim /etc/grub.conf
根据安装好以后的内核位置,修改 default 的值,一般是修改为0,因为 default 从 0 开始,一般新安装的内核在第一个位置,所以设置default=0
cat /proc/version
reboot 之后升级内核成功,然后执行成功了!
谢谢你提供这么好的方案
你好,当执行 make 操作时报:Downloading/unpacking awscli==1.10.15
Cannot fetch index base URL https://pypi.python.org/simple/
Could not find any downloads that satisfy the requirement awscli==1.10.15
Cleaning up...
No distributions at all found for awscli==1.10.15
Storing debug log for failure in /root/.pip/pip.log
The command '/bin/sh -c apt-get update && apt-get install -y apparmor apt-utils aufs-tools automake bash-completion binutils-mingw-w64 bsdmainutils btrfs-tools build-essential clang cmake createrepo curl dpkg-sig gcc-mingw-w64 git iptables jq libapparmor-dev libcap-dev libltdl-dev libnl-3-dev libprotobuf-c0-dev libprotobuf-dev libsqlite3-dev libsystemd-journal-dev libtool mercurial net-tools pkg-config protobuf-compiler protobuf-c-compiler python-dev python-mock python-pip python-websocket ubuntu-zfs xfsprogs vim-common libzfs-dev tar zip --no-install-recommends && pip install awscli==1.10.15' returned a non-zero code: 1
make: *** [build] Error 1
这个该如何解决呢?
@oham 你是不是在国内机器上运行了这个,国内网络环境问题可能导致下载失败,建议修改主机的DNS(注意备份原来的),然后重新make
Step 2 : ARG APT_MIRROR=deb.debian.org
open /var/lib/docker/aufs/mnt/bf4f830e3846e2222223edf4be237d2ac1d0f6d4862b145958c80d3c66be3a1f-init/etc/resolv.conf: permission denied
make: *** [build] Error 1
@chuchu 无法打开resolv.conf,提示权限问题,这个有点奇怪啊,你可以尝试替换aufs为overlay(需要新的内核,不要使用kernel-ml-aufs的)然后重试,或者你的网络可能存在问题导致解析异常,建议你查看你本机的/etc/resolv.conf是否设置了DNS或者文件是否存在,因为理论上docker会尝试调用本机的DNS
您好~我执行make build报错,提示网络超时连接,我配好了shadowsocks。同样报这个错。
[root@redhat6 moby]# make build
mkdir -p .go-pkg-cache/gopath .go-pkg-cache/goroot-linux_amd64_netgo
docker build -t "docker-dev:HEAD" -f "Dockerfile" .
Sending build context to Docker daemon 189.8 MB
Step 1 : FROM debian:jessie
Pulling repository docker.io/library/debian
Network timed out while trying to connect to https://index.docker.io/v1/repositories/library/debian/images. You may want to check your internet connection or if you are behind a proxy.
make: *** [build] 错误 1
@clear 无法连接dockerhub,你需要检查代理是否正常