一.介绍
Centos6对于Docker的官方支持理论上来说只能算是勉强能用,因为只提供了基于1.7.1版本的docker-io,还得先装EPEL源,然而1.7.1版本很多功能都有缺失,至少到1.9才能算够用。
所以怎么办呢?按照以往的思路来说,官方源版本不够的程序当然是选择自己编译咯,但是!这个并不能行得通,至少不能直接行得通,为什么?因为Docker的编译需要在Docker中进行(是的,要先装Docker才能编译Docker,没毛病),然而在运行的参数中有个ARG,这个至少在1.9版本的Docker上才支持,所以……你在1.7.1的Docker的环境下编译只会收到"docker Step 1 : ARG Unknown instruction: ARG"的报错,然后就GG了。
二.解决方案
那么,怎么办呢?当然是想办法过渡一下,我在网上翻了不少东西,终于发现了一篇文章——>传送门
作者给了Docker官方的一个1.9.1版本的二进制文件下载地址,这个在Centos6上是能用的,作者表示他是直接用的,然后会发生无法修改配置的情况(因为真的只有一个文件,啥启动文件啊,配置文件啊,全都没有),但是捏,我想了个办法来移花接木。那就是先装1.7.1的,然后直接用1.9.1的文件替换1.7.1的,这样用了1.7.1的配置和各种启动文件,而程序本身确实1.9.1的
(有个前提条件,请确保你的内核版本高一点,我建议是直接上4.9的内核,配合BBR美滋滋,然后文件系统用OverlayFS也是很棒棒,详情查看——>传送门 我博客另外一篇为Docker定制内核的就别看了,那个太麻烦了,而且也是因为1.7.1没法用OverlayFS所以才选了AUFS)
好像有点绕?不用纠结,看命令
#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
这样就OK了,看下版本,一切正常
其实吧,到这部已经可以正常使用了,但是,生命在于折腾。如果我们要更新的版本,怎么办呢?
来啊,搞事啊,编译走起,首先得满足下编译环境
yum install git make -y wget https://storage.googleapis.com/golang/go1.8.3.linux-amd64.tar.gz tar xzf go1.8.3.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
然后就可以真正开始了,make build这部会调用到docker (1.9版本),所以请务必保证docker开启
#这儿会要你输密码,直接回车就行,docker移到了moby,不过依旧不影响 git clone https://git@github.com/docker/docker cd docker #要啥版本你自己看着切换 git checkout v1.13.1 make build make binary
然后会在bundles目录下生成你版本号的目录,里面有binary-client和binary-daemon目录,前者是docker文件以及它的md5和sha256文件,后者是一堆程序以及它们的md5和sha256(全被我删了)
然后你看着办吧,找个地方丢着然后直接运行dockerd启动daemon然后使用docker来交互就行,原有的/etc/init.d/docker文件你需要删掉了,因为无法兼容新版本的启动方式
当然我也没有实际测试过这样有啥问题_(:з」∠)_,仅供测试。
文章评论
博主有类似于搭cdp服务器的教程吗
@Li R1Soft那个备份用的CDP?那个的话我倒是没用过,不过那个官方文档写得还是挺详细的吧
@Senra 是哪个内容分发网络
@Li 那是CDN啊...CDN的话看你需求,免费的话可以试试CDN Plus/CDN贝/Fikker 这三个有免费版,可以自己试试,而且基本都是官方一键脚本,不过免费版总归是有所功能缺失的,至于它们的付费版,那就有点小贵了。
如果要自己折腾的,可以试试用Nginx来搞,简单的反代和缓存也相当于CDN了(这个如果需要面板的话也行,啥AMH/宝塔/AppNode之类也有Nginx的反代模板),如果要有面板的,那么可以试试EasyPanel+Kangle的组合,能够多节点同步配置,CDN贝就是Kangle基础上开发的,当然这个就没CDN贝那么易用了。
我过阵子是考虑写简单的自建CDN教程的,不过这玩意个人搞其实比较吃力不讨好,不如用现成的。
@Senra 不好意思打错了,咳咳
@Senra emm,这样啊,我就看了很多教程,都是不一样的方法。
也就是大部分的cdn都是用Nginx搭建出来的?
@Li 很大一部分是用Nginx及其分支Tengine、OpenResty搭建的,这些基本都是进行过魔改或者配合Lua之类实现的。
@Senra 好的,谢谢
[8] System error: mkdir /var/lib/docker/devicemapper/mnt/df283a7cd38b603b6a96a09ff4d3b7668567d0863f96f5693f27aa131e50fc5e/rootfs/sys/fs/cgroup: no such file or directory
@真 试试把devicemapper换成overlayfs