在 centos6上安装docker io/docker-engine
一、说明
先说一下,现在要安装Docker的话,一定要在CentOS7上安装Docker-ce。docker-io是比较老的版本,很多功能是没有的。 CentOS6默认也只支持到Docker1.7(但其实CentOS6是可以支持到Docker1.9的),后面的版本都需要安装在CentOS7上。 CentOS6也不能安装Docker0.7以下的版本了,比如Docker0.5/0.6,基本上是没办法使用的。因为最早Docker是在Ubuntu上的。
CentOS6安装Docker必须要升级内核到3.10及以上内核版本才行,内核还必须开启aufs模块。
我这里也就是单纯做个研究,就讲一下怎么在CentOS6上升级内核,然后再安装Docker1.7,再升级到1.9。
二、操作系统环境
# cat /etc/issue
CentOS release 6.5 (Final)
# uname -r
2.6.32-431.el6.x86_64
三、基础环境的准备
1、安装开发平台工具
#yum groupinstall "Development tools"
2、安装内核升级需要的依赖组件
#yum install device-mapper ncurses-devel qt-devel hmaccalc zlib-devel binutils-devel elfutils-libelf-devel
3、安装device-mapper
#yum upgrade device-mapper
4、因为selinux和LXC有冲突,所以需要禁用SELinux
# vim /etc/sysconfig/selinux
SELINUX=disabled
5、要想docker正常运行还需要在/etc/fstab里增加cgroup文件系统
echo "none /sys/fs/cgroup cgroup defaults 0 0" >> /etc/fstab
四、升级内核
有两种方式来升级有开启aufs模块的内核,一种是使用别人制作好的rpm包来进行升级,一种是下载内核源码自己编译升级。 这里主要是讲安装Docker,所以我们直接使用制作好的rpm包来进行升级就可以。
内核安装文件可以从网上搜索下载 下载后,直接安装
# rpm -ivh kernel-ml-aufs-3.10.5-3.el6.x86_64.rpm
Preparing... ########################################### [100%]
1:kernel-ml-aufs ########################################### [100%]
安装完成后,会自动添加启动项到/etc/grub.conf中,我们需要编辑grub.conf文件,启用新的内核:
#vim /etc/grub.conf
default=1
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (3.10.5-3.el6.x86_64)
root (hd0,0)
kernel /vmlinuz-3.10.5-3.el6.x86_64 ro root=UUID=c1397596-401f-4e93-b097-1927ad949b0c nomodeset rd_NO_LUKS KEYBOARDTYPE=pc KEYTABLE=us LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=128M rd_NO_LVM rd_NO_DM rhgb quiet
initrd /initramfs-3.10.5-3.el6.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=UUID=c1397596-401f-4e93-b097-1927ad949b0c nomodeset rd_NO_LUKS KEYBOARDTYPE=pc KEYTABLE=us LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=128M rd_NO_LVM rd_NO_DM rhgb quiet
initrd /initramfs-2.6.32-431.el6.x86_64.img
一般新的内核启动项都会排在最上面,所以我们只需要把grub.conf中的default=1改成default=0就可以了。
编辑完保存,退出。重启系统。
#reboot
重启后,确认内核是否升级成功。
# uname -r
3.10.5-3.el6.x86_64
# grep aufs /proc/filesystems
nodev aufs
内核升级成功。
五、安装Docker1.7并升级Docker到1.9
1、安装Docker 可以在CentOS6操作系统上安装docker-io或者docker-engine,但docker-io版本非常老了,很多功能没有,特别是不要安装docker-io 0.7以下的版本。
如果是安装docker-io,还需要先安装epel源,因为有些依赖性的软件还需要安装
#yum -y install http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
这里我安装docker-engine版本。
下载docker-engine-1.7.1-1.el6.x86_64.rpm
# wget https://yum.dockerproject.org/repo/main/centos/6/Packages/docker-engine-1.7.1-1.el6.x86_64.rpm
用yum安装:
#yum install docker-engine-1.7.1-1.el6.x86_64.rpm
安装完,启动docker服务
# service docker start
Starting cgconfig service: Error: cannot mount cpuset to /cgroup/cpuset: Device or resource busy
/sbin/cgconfigparser; error loading /etc/cgconfig.conf: Cgroup mounting failed
Failed to parse /etc/cgconfig.conf [FAILED]
Starting docker: [ OK ]
执行docker命令确认:
# docker version
Client version: 1.7.1
Client API version: 1.19
Go version (client): go1.4.2
Git commit (client): 786b29d
OS/Arch (client): linux/amd64
2、测试Docker 我们可以下载一个hello-world的镜像来运行测试一下。 先使用docker search搜索查寻这个镜像
# docker search hello-world
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
hello-world Hello World! (an example of minimal Docker... 1029 [OK]
kitematic/hello-world-nginx A light-weight nginx container that demons... 132
tutum/hello-world Image to test docker deployments. Has Apac... 63 [OK]
dockercloud/hello-world Hello World! 15 [OK]
crccheck/hello-world Hello World web server in under 2.5 MB 10 [OK]
vad1mo/hello-world-rest A simple REST Service that echoes back all... 2 [OK]
ppc64le/hello-world Hello World! (an example of minimal Docker... 2
carinamarina/hello-world-app This is a sample Python web application, r... 1 [OK]
souravpatnaik/hello-world-go hello-world in Golang 1
能查出很多,我们是安装第一个,也就是stars(星星数,相当于好评数)数最多的那个。
# docker run hello-world
docker run hello-world
Unable to find image \'hello-world:latest\' locally
latest: Pulling from hello-world
65b27d3bd74d: Pull complete
9f5834b25059: Pull complete
Digest: sha256:fb158b7ad66f4d58aa66c4455858230cd2eab4cdf29b13e5c3628a6bfc2e9f05
Status: Downloaded newer image for hello-world:latest
Error response from daemon: Cannot start container 7ef5517ebdde24f97fa0910e27f8bcea36d5154bdad9bf10b5d241b3b9fd626a: [8] System error: write /sys/fs/cgroup/docker/7ef5517ebdde24f97fa0910e27f8bcea36d5154bdad9bf10b5d241b3b9fd626a/cgroup.procs: no space left on device
如果有出现cgroup.procs: no space left on device的错误,还需要执行一下下面三句命令,然后重启docker服务
echo 1 > /sys/fs/cgroup/docker/cgroup.clone_children
echo 0 > /sys/fs/cgroup/docker/cpuset.mems
echo 0 > /sys/fs/cgroup/docker/cpuset.cpus
#service docker restart
然后再运行hello-world的镜像
# docker run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
如果出现上面的提示,那说明docker基本上能正常运行了。
使用docker images查看本地镜像:
# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
hello-world latest 9f5834b25059 8 months ago 1.84 kB
3、升级Docker
要升级Docker到1.9,我们只要下载1.9的二进制文件,然后替换原来的二进制文件即可。
停止docker服务
# service docker stop
备份原来的docker二进制文件
# mv /usr/bin/docker /usr/bin/docker-1.7
下载1.9的二进制文件
# wget https://get.docker.com/builds/Linux/x86_64/docker-1.9.1
把下载的1.9的二进制文件复制到原来docker位置
# cp docker-1.9.1 /usr/bin/docker
赋予执行权限
# chmod +x /usr/bin/docker
查看升级后的版本信息
# docker version
Client:
Version: 1.9.1
API version: 1.21
Go version: go1.4.3
Git commit: a34a1d5
Built: Fri Nov 20 17:56:04 UTC 2015
OS/Arch: linux/amd64
Server:
Version: 1.9.1
API version: 1.21
Go version: go1.4.3
Git commit: a34a1d5
Built: Fri Nov 20 17:56:04 UTC 2015
OS/Arch: linux/amd64
升级成功。