详解在 CentOS 6.x上安装 docker.io
docker容器最早受到RHEL完善的支持是从最近的CentOS7.0开始的,官方说明是只能运行于64位架构平台,内核版本为2.6.32-431及以上(即>=CentOS6.5,运行docker时实际提示3.8.0及以上),升级内核请参考CentOS6.x内核升级(2.6.32->3.10.58)过程记录
需要注意的是CentOS6.5与7.0的安装是有一点点不同的,CentOS-6上docker的安装包叫docker-io,并且来源于Fedoraepel库,这个仓库维护了大量的没有包含在发行版中的软件,所以先要安装EPEL,而CentOS-7的docker直接包含在官方镜像源的Extras仓库(CentOS-Base.repo下的[extras]节enable=1启用)。前提是都需要联网,具体安装过程如下。
1.禁用selinux
#getenforce enforcing #setenforce0 permissive #vi/etc/selinux/config SELINUX=disabled ...
2.安装FedoraEPEL
epel-release-6-8.noarch.rpm包在发行版的介质里面已经自带了,可以从rpm安装。
#yuminstallepel-release-6-8.noarch.rpm //或 yum-yinstallhttp://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
如果出现GPGkeyretrievalfailed:[Errno14]Couldnotopen/readfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6问题,请在线安装epel,下载RPM-GPG-KEY-EPEL-6文件。
这一步执行之后,会在/etc/yum.repos.d/下生成epel.repo、epel-testing.repo两个文件,用于从Fedora官网下载rpm包。
3.检查内核版本
#uname-r 2.6.32-431.el6.x86_64 #cat/etc/redhat-release CentOSrelease6.5(Final)
看到这个最低的内核版本,事实运行起来是没太大问题的,你也可以升级到3.10.x版本。
另外你也可以运行脚本check-config.sh,来检查内核模块符不符合(下面有些missing的,我的docker还是可以正常启动):
[root@sean~]#./check-config warning:/proc/config.gzdoesnotexist,searchingotherpathsforkernelconfig... info:readingkernelconfigfrom/boot/config-2.6.32-431.el6.x86_64... GenerallyNecessary: -cgrouphierarchy:properlymounted[/cgroup] -CONFIG_NAMESPACES:enabled -CONFIG_NET_NS:enabled -CONFIG_PID_NS:enabled -CONFIG_IPC_NS:enabled -CONFIG_UTS_NS:enabled -CONFIG_DEVPTS_MULTIPLE_INSTANCES:enabled -CONFIG_CGROUPS:enabled -CONFIG_CGROUP_CPUACCT:enabled -CONFIG_CGROUP_DEVICE:enabled -CONFIG_CGROUP_FREEZER:enabled -CONFIG_CGROUP_SCHED:enabled -CONFIG_MACVLAN:enabled -CONFIG_VETH:enabled -CONFIG_BRIDGE:enabled -CONFIG_NF_NAT_IPV4:missing -CONFIG_IP_NF_TARGET_MASQUERADE:enabled -CONFIG_NETFILTER_XT_MATCH_ADDRTYPE:missing -CONFIG_NETFILTER_XT_MATCH_CONNTRACK:enabled -CONFIG_NF_NAT:enabled -CONFIG_NF_NAT_NEEDED:enabled OptionalFeatures: -CONFIG_MEMCG_SWAP:missing -CONFIG_RESOURCE_COUNTERS:enabled -CONFIG_CGROUP_PERF:enabled -StorageDrivers: -"aufs": -CONFIG_AUFS_FS:missing -CONFIG_EXT4_FS_POSIX_ACL:enabled -CONFIG_EXT4_FS_SECURITY:enabled -"btrfs": -CONFIG_BTRFS_FS:enabled -"devicemapper": -CONFIG_BLK_DEV_DM:enabled -CONFIG_DM_THIN_PROVISIONING:enabled -CONFIG_EXT4_FS:enabled -CONFIG_EXT4_FS_POSIX_ACL:enabled -CONFIG_EXT4_FS_SECURITY:enabled
假如你是自己编译内核,请特别留意几个绝对不能缺少的:DM_THIN_PROVISIONING、IP_NF_TARGET_MASQUERADE、NF_NAT。(AUFS_FS没有对应选项,还不清楚怎么回事,但不是必须)
4.安装docker-io
#yuminstalldocker-io DependenciesResolved =========================================================================================== PackageArchVersionRepositorySize =========================================================================================== Installing: docker-iox86_641.1.2-1.el6epel4.5M Installingfordependencies: lua-alt-getoptnoarch0.7.0-1.el6epel6.9k lua-filesystemx86_641.4.2-1.el6epel24k lua-lxcx86_641.0.6-1.el6epel15k lxcx86_641.0.6-1.el6epel120k lxc-libsx86_641.0.6-1.el6epel248k TransactionSummary =========================================================================================== Install6Package(s)
许多文档介绍到这里,下一步为挂载/cgroup文件系统,我的docker版本为1.1.2,没有修改/etc/fstab的步骤。
5.启动试运行
#servicedockerstart //或 #docker-d
6.异常
在我的一次安装过程中,很不幸遇到下面的问题:
docker-d启动,或tail-f/var/log/docker查看日志
[f32e7d9f]+jobinitserver() [f32e7d9f.initserver()]Creatingserver [f32e7d9f]+jobserveapi(unix:///var/run/docker.sock) 2014/10/2213:02:45ListeningforHTTPonunix(/var/run/docker.sock) ErrorrunningDeviceCreate(createPool)dm_task_runfailed [f32e7d9f]-jobinitserver()=ERR(1) 2014/10/2213:02:45ErrorrunningDeviceCreate(createPool)dm_task_runfailed \nWedOct2214:35:54CST2014\n
再或者是servicedockerrestart
Stoppingdocker:[OK] Startingcgconfigservice:Error:cannotmountcpusetto/cgroup/cpuset:Deviceorresourcebusy /sbin/cgconfigparser;errorloading/etc/cgconfig.conf:Cgroupmountingfailed Failedtoparse/etc/cgconfig.conf[FAILED] Startingdocker:[OK]
UnabletoenablenetworkbridgeNAT:iptablesfailed:iptables-IPOSTROUTING-tnat-s172.17.42.1/16!-d172.17.42.1/16-jMASQUERADE:iptablesv1.4.7:can'tinitializeiptablestable`nat':Tabledoesnotexist(doyouneedtoinsmod?)
Perhapsiptablesoryourkernelneedstobeupgraded.
上面的三个异常都是由于内核模块的缺失导致的,这也是自己编译内核来升级带来的风险,于是就有了sciurus的kernel-ml-aufs的rpm包(见参考的第一个链接)。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。