今天在自己的centos6.5环境下安装了docker,现将安装步骤,以及在安装过程中遇到的问题归纳总结。
安装步骤
第一步:升级Linux内核版本
docker官方文档要求Linux kernel至少在3.8以上,且docker只能运行在64位的系统中。由于RHEL6和CentOS6的内核版本为2.6,因此必须要先升级内核。
1.查看linux当前版本
[root@dk~]# more /etc/issue
CentOS release 6.5 (Final)
Kernel \r on an \m
[root@dk~]# uname -a
Linux dk.dk 2.6.32-431.el6.x86_64 #1 SMP Fri Feb 10 10:48:08 EST 2017 x86_64 x86_64 x86_64 GNU/Linux
2.升级内核至3.10.28
我使用yum进行安装,我的yum源是ELRepo.org,它是企业版linux RPM 包仓库(an RPM repository for Enterprise Linux packages),其中就有linux内核,在该网站的主页中介绍将它设置为yum源的方法。以下内容是我从该网站上复制过来的。在我写这篇博文之后,这些内容可能会被更新,因此读者最好是在使用的时候直接访问ELRepo.org网站,以便获得最新的内容。
Import the public key:
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
Detailed info on the GPG key used by the ELRepo Project can be found on https://www.elrepo.org/tiki/key (external link)
If you have a system with Secure Boot enabled, please see the SecureBootKey page for more information.
To install ELRepo for RHEL-7, SL-7 or CentOS-7:
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
To make use of our mirror system, please also install yum-plugin-fastestmirror.
To install ELRepo for RHEL-6, SL-6 or CentOS-6:
rpm -Uvh http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm
To make use of our mirror system, please also install yum-plugin-fastestmirror.
接下来我们就可以从ELRepo.org上下载linux内核并进行安装了。
yum --enablerepo=elrepo-kernel install kernel-lt -y
或者安装kernel-ml(ml=mainline)
yum --enablerepo=elrepo-kernel install kernel-ml -y
注释:
kernel-lt(lt=long-term)
kernel-ml(ml=mainline)
3.关闭selinux:
[root@dk ~]# setenforce 0
[root@dk ~]# sed -i '/^SELINUX=/c\SELINUX=disabled' /etc/selinux/config
4.重启系统,使之前的安装生效
在重启之前,需要先做这样的一件事情,编辑grub.conf文件,修改Grub引导顺序,简单的说,就是告诉操作系统,使用你刚刚安装的内核。
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/mapper/vg_dk-lv_root
# initrd /initrd-[generic-]version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (3.10.105-1.el6.elrepo.x86_64)
root (hd0,0)
kernel /vmlinuz-3.10.105-1.el6.elrepo.x86_64 ro root=/dev/mapper/vg_dk-lv_root rd_NO_LUKS rd_LVM_LV=vg_dk/lv_root rd_NO_MD rd_LVM_LV=vg_dk/lv_swap crashkernel=128M LANG=zh_CN.UTF-8 KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
initrd /initramfs-3.10.105-1.el6.elrepo.x86_64.img
title CentOS (2.6.32-431.el6.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-431.el6.x86_64 ro root=/dev/mapper/vg_dk-lv_root rd_NO_LUKS rd_LVM_LV=vg_dk/lv_root rd_NO_MD rd_LVM_LV=vg_dk/lv_swap crashkernel=128M LANG=zh_CN.UTF-8 KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
initrd /initramfs-2.6.32-431.el6.x86_64.img
修改grub的主配置文件/etc/grub.conf,设置default=0,表示第一个title下的内容为默认启动的kernel(一般新安装的内核在第一个位置)。
接下来就可以重启系统了。
reboot
再次查看系统内核版本,发现内核版本已经更新了。
[root@dk ~]# uname -a
Linux dk.dk 3.10.105-1.el6.elrepo.x86_64 #1 SMP Fri Feb 10 10:48:08 EST 2017 x86_64 x86_64 x86_64 GNU/Linux
至此,已经完成了linux内核的升级。
第二步:安装docker
使用如下命令安装docker。
yum install docker-io
如果报错提示:No package docker-io available, 说明在你的系统现有的所有yum源都不提供docker的rpm包,所以你需要先安装一个提供docker rpm包的yum源。fedoraproject中有提供docker 的rpm包,按照如下方法安装这个yum源,然后就可以安装docker了。
yum -y install http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
在安装完成后,使用如下命令启动docker服务。
service docker start
在启动docker服务后,我们可以使用如下命令来查看docker服务是否启动成功了。
[root@dk ~]# docker version
Client version: 1.7.1
Client API version: 1.19
Go version (client): go1.4.2
Git commit (client): 786b29d/1.7.1
OS/Arch (client): linux/amd64
Server version: 1.7.1
Server API version: 1.19
Go version (server): go1.4.2
Git commit (server): 786b29d/1.7.1
OS/Arch (server): linux/amd64
遇到的问题以及解决方法
我第一次启动docker服务的时候并没有启动成功,而是报错了,我第一次使用docker version查看的时候,输出信息如下:
[root@dk ~]# docker version
Client version: 1.7.1
Client API version: 1.19
Go version (client): go1.4.2
Git commit (client): 786b29d/1.7.1
OS/Arch (client): linux/amd64
Cannot connect to the Docker daemon. Is 'docker -d' running on this host?
“Cannot connect to the Docker daemon. Is ‘docker -d’ running on this host?”意思是docker守护进程可能没有启动成功。
可以过查看docker的日志/var/log/docker来定位具体的出错,如下是我的出错信息。
[root@dk ~]# cat /var/log/docker
\n2017年 05月 14日 星期日 18:10:54 CST\n
time="2017-05-14T18:10:54.898588047+08:00" level=info msg="Listening for HTTP on unix (/var/run/docker.sock)"
/usr/bin/docker: relocation error: /usr/bin/docker: symbol dm_task_get_info_with_deferred_remove, version Base not defined in file libdevmapper.so.1.02 with link time reference
显然错误原因是:
/usr/bin/docker: relocation error: /usr/bin/docker: symbol dm_task_get_info_with_deferred_remove, version Base not defined in file libdevmapper.so.1.02 with link time reference
我是参考这篇博文提示的方法解决的:
解决方法是升级一下device-mapper-libs,使用如下命令:
yum upgrade device-mapper-libs
然后重启docker服务即可。