CentOS6.5上Docker 安装教程 (于2020.11.19在centos 6.5上升级内核安装成功)

当前的时间

Author: Nohysiwe

CreateTime: 2020.11.20

提时间是因为,在我开始安装的这个时间就已经无法再下载到以前的rpm包了

我这里的包都是我找了1天从某个博客的博主提供的百度云下载下来的

我觉得可能再过两年直接绝迹

所以想安装成功,请使用我这里的rpm包

当前环境

  1. CentOS release 6.5 (Final) 查看系统版本命令: cat/etc/redhat-release
  2. 内核版本:
    2.6.32-431.el6.x86_64 查看内核版本命令: uname -r

大体过程

  1. 首先想不升级内核升级方式安装docker,发现已经不行了, 我按网上教程才安装上运行启动一会就因为docker的自身bug死掉,且安装的docker版本为0.6 版本(太低了,根本不能用,如想研究下面会给出教程链接)
  2. 不升级内核安装失败后开始尝试升级内核安装方式(参考了很多博客, 最终结合不升级内核安装方式加上升级内核安装方式的教程开始安装)
  3. 初版的安装流程安装出来后出现了很多bug(这些bug查询了很久, stackoverflow、github、博客都快翻烂了有部分问题都无法解决),最终经过调整安装流程后没有再出现bug。
  4. 下面给出没有出现bug的安装流程 以及 出现安装bug的流程

相关链接

centos6.5不升级内核安装 该安装方式已经不能安装了

本文安装所需依赖包

链接: https://pan.baidu.com/s/16CSNm9ifWTRZjun4T7MjiA 提取码: wuqv

一、正确无bug的安装方式

(1) 升级内核

升级 内核也参考了很多博客,但大体流程相同 (如果不想使用我给的安装包请自行百度升级流程),分为两种:

(1) 重新编译内核源码 (耗时,复杂,但能升级到指定内核版本,且能够自行打一些补丁)

# 具体教程请自行百度(反正我不用百度的搜索引擎,用 Bing)

(2) 利用 yum 安装(简单,快捷, 但是由于elrepo 源维护的原因, 但不能指定升级到的内核版本, 我就遇到了这个问题, 现在的教程普遍都是16-19年的, 当时yum 升级内核是 3.10版本, 但2020.11 利用yum 升级内核就只能4.4版本了):

# 首先内核版本分为 长期支持版(lt))/主线版(ml) 这里推荐 长期支持版 lt 版

# 不使用我提供的rpm包安装(不推荐,因为随时间推移,yum下载的版本可能会不同)
# 第一步 
# 导入public key
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
# 安装elrepo
yum install https://www.elrepo.org/elrepo-release-6-8.el6.elrepo.noarch.rpm

# 第二步
# yum安装内核(lt版)
yum --enablerepo=elrepo-kernel install kernel-lt -y
# ml版 --> yum --enablerepo=elrepo-kernel install kernel-ml -y

# 修改开机启动 grub引导顺序
vim /etc/grub.conf  # 该文件为 机器启动时 如何加载内核到内存中的配置文件
# 修改 default=1 (默认一般是1)为下面值 
# 这里的数字实际上就是该文件下面 hiddenmenu 下的 title 部分对应的index
# 由于 新安装的内核一般在第一个位置,所以这里我们写 0 如果新装的内核版本没在第一个,请写其对应的index (程序员都懂 从0开始嘛)
default=0 

# 第三步 重启机器
reboot 



# 使用我提供的rpm包安装(推荐,因为可能 多年后这些老的rpm包就yum不到了)

# 步骤与上面几乎一致
# 前往我给你的文件夹 例如该文件夹路径 /root/docker_install_rpm

# cd /root/docker_install_rpm/kernel
rpm --import /root/docker_install_rpm/kernel/RPM-GPG-KEY-elrepo.org
rpm -ivh /root/docker_install_rpm/kernel/elrepo-release-6-8.el6.elrepo.noarch.rpm
rpm -ivh /root/docker_install_rpm/kernel/kernel-lt-4.4.244-1.el6.elrepo.x86_64.rpm

# 执行上面的修改/etc/grub.conf文件流程以及以下相关流程


# 最后检查内核版本  
uname -r
# 使用我提供的安装包应该是 4.4.244-1.el6.elrepo.x86_64
(2) 安装 docker

centos6.5 能使用的docker 的rpm包不叫docker-engine 而是docker-io

这里安装的docker 版本为 1.7.1-2

# 这请直接使用我提供的 rpm包, 如果你自己去下载,绝对已经找不到了
# 以上一步提供的文件路径为基础 
rpm -ivh /root/docker_install_rpm/epel-release-6-8.noarch.rpm
rpm --import /root/docker_install_rpm/RPM-GPG-KEY-EPEL-6
rpm –import /etc/pki/rpm-gpg/RPM*

# 按顺序安装以下rpm包 如果你的系统已经有了这些包请将 rpm -ivh 换成 rpm -Uvh

cd /root/docker_install_rpm/docker/docker_rpms
# 安装docker依赖的相关包 
rpm -ivh lxc-libs-1.0.10-2.el6.x86_64.rpm lua-alt-getopt-0.7.0-1.el6.noarch.rpm lua-filesystem-1.4.2-1.el6.x86_64.rpm lua-lxc-1.0.10-2.el6.x86_64.rpm lxc-1.0.10-2.el6.x86_64.rpm libcgroup-0.40.rc1-27.el6_10.x86_64.rpm 
# docker-io-1.7.1-2.el6.x86_64.rpm

# 安装device-mapper 以及 lvm2 包
cd /root/docker_install_rpm/docker/device_mapper_rpms
rpm -ivh rpm -ivh dependency_update/* update/*

# 安装docker-io包
rpm -ivh /root/docker_install_rpm/docker/docker_rpms/docker-io-1.7.1-2.el6.x86_64.rpm
# 到此为止docker 应该说已经安装成功了

# 这里提醒一下别去做其他的
(3) 测试docker 是否能正常运行
# 执行 docker -d 命令
docker -d 
# 如果不出意外它会报一个 Error mounting devices cgroup: mountpoint for devices not found 的错误

# 这里特别强调 如果你看了我提供给你的无内核升级安装docker的链接教程
# 你会看到他的博客里面写了说往 /etc/fstab 写一行数据 !!!!! 千万别写 !!!!千万别写
# 写了你就重新装吧 因为我就是被这个坑了的

# 此时 如果报错是正常的, 这时重启机器
reboot 

# 等开机后, docker -d
docker -d
# 这时只会提醒你一个Warning: .*?说什么 _probe 模块执行失败,并无其他报错。 此时就代表你安装docker成功了

# 这里说明一下, centos6.5安装完docker 后好像不能使用端口映射(端口映射属于桥接模式功能)
# 及一下命令
docker pull nginx
docker run -it -d -p 8081:80 --name nginx-test nginx
# 不会报错, 但是无法访问 8081 端口 无论是宿主机还是 外网
curl http://127.0.0.1:8081/

# 但是可以使用host模式
docker pull nginx	# 这里不配置docker国内镜像加速源会很慢所以请配置一下加速镜像源 提醒: 1.7版本的配置文件不是/etc/docker/daemon.json 
docker run -it -d --net=host --name nginx-test2 nginx
# 注意host模式 要求镜像使用的端口在本机未被使用 否则会报错
curl http://127.0.0.1:80/  # 此时应该能访问成功


# Congratulation to you

安装后存在bug的流程

(1) 安装docker及其相关依赖

参考无 内核升级安装docker的链接教程

注意: 该步骤里面相比我提供的过程多了一个修改 /etc/fstab 的过程

(2) 升级内核

与我提供的升级内核方式一致

升级完后得重启

(3) 重启后
# pull 一个镜像
docker pull nginx
docker run -it -d --net=host --name nginx-test nginx 
# 这里会报错: cgroup.procs no space left on device
# 经过 stackoverflow 查到了解决方法:
echo 1 > /cgroup/docker/cgroup.clone_children
echo 0 > /cgroup/docker/cpuset.mems
echo 0 > /cgroup/docker/cpuset.cpus

# 继续运行命令
docker run -it -d --net=host --name nginx-test nginx
# ok, 他启动起来了, 一切都看起来十分美好

# 现在我们停止docker 的容器
docker stop nginx-test

# 好 完美 对么 
# 现在让我们来重复下我们的bug
# 关机
init 0
# 再将其启动起来

# 开始启动我们之前的容器
docker satrt nginx-test
# wtf, 继续报 cgroup.procs no space left on device
# 我们刚刚不是已经解决了这个问题了么, 再来一遍刚刚的操作来解决这个报错
echo 1 > /cgroup/docker/cgroup.clone_children
echo 0 > /cgroup/docker/cpuset.mems
echo 0 > /cgroup/docker/cpuset.cpus

# 再尝试启动容器
docker start nginx-test
# 又报错了对么
# 错误: Cgroup mounting failed Failed to parse /etc/cgconfig.conf or /etc/cgconfig.d

# 然后我搜遍了整个网络, 用尽了它们的方法我都无法解决
# 有相似的问题,但是按它们操作并不能解决

# 我还去查看了 /var/log/message 发现里面有句警告说 docker对cgroup的什么东西进行了修改,可能会导致cgroup行为发生变化
# 最终我感觉是因为内核会自己挂载cgroup 而我们却自己去配置了/etc/fstab

# 我决定重新自己整理安装步骤,调整安装过程,形成了我的最终版,也就是上面那版

# 如果有大佬知道原因请指导下