本文由作者:蛮大人 授权发布
链接:https://opsdev.fun/2018/05/09/O2-0-Docker%E9%AA%8C%E8%AF%81Centos7-2%E7%A6%BB%E7%BA%BF%E5%AE%89%E8%A3%85Docker%E7%8E%AF%E5%A2%83/
著作权归作者所有。
转载请联系作者获得授权。
序
题记:搞定了就是故事,搞不定就是事故。
条件有限,开局只有一台开发机,要跑5套子系统组成的项目群。还要有一些辅助和验证的系统要跑在这上面。从配置来看,要想顺畅开心地完成项目群基础环境支撑,考虑引入资源消耗 1/200 的神器 Docker:更难得是丝毫不用担心环境污染、版本冲突、以及突然开发服务器搞崩溃了;
吐槽避免采坑
- 实际上可能要跑的系统和辅助系统远超预计
申请的是4C/8G的PC server,后来查命令是1C/2G,10G空间,果断申请扩容了- 边干边写:整了四周;期间无数次崩溃,
还要应对乙方内部的质疑,不知道自己是如何坚持下来的
第一周折腾无实质交付
1、MacBook 上 docker 环境起了 CentOS7.2 容器,在容器中模拟离线安装 Docker 环境(盗梦空间)
2、安装很成功,按官方教程启动服务时,崩溃到怀疑人生:
- 命令 ”systemctl start docker” 报错:”docker Failed to get D-Bus connection”
- CentOS 从 7 开始,安全考虑,容器内默认不加载 D-Bus:直接影响就是 systemctl 不能起服务;
- github 支招:加容器特权参数 –privileged ,启动非常之慢,不建议踩坑;参考链接
- Docker 官方支招:自己编译带 systemctl 服务的镜像 参考链接,
然而我没能测试成功在容器中启动 docker daemo
其他服务没尝试,感兴趣的可自行研究
放弃在容器中使用 systemctl 启动 Docker 镜像服务
第二周换Redhad7.2镜像
- 还是报同样的错误:直接报缺5~8个一级依赖包
- 后来分析不是 CentOS 和 Redhad 不同步,应该是甲方提供的 CentOS 源或系统优化或缺了一些默认的包;
第三周寄希望于甲方提供的内网源
- 协调再三给挂了源:是一个 docker 集群监控的源;沟通不畅,不认为挂错了源;
- 甲方老师又忙。暂停修整了一周;
第四周重整旗鼓
再三协调之后,放弃等待甲方老师的支援。决定还是自己搞。不就是一些一级依赖么,补全就是!
主要是我方火力太猛:
再不出活,无颜面对向兄弟们:虽然不上这些,采用笨办法也能干,但总归不忍再不交付,无法上得台面解释:自己选择的牛皮,哭着也要吹完,吹完美
搞定。想来想去,还是毛选里的那句话支撑了我:
自力更生,艰苦奋斗!
最近在看一行禅师的《佛陀传》,希望能从中汲取心灵的力量。《天龙八部》里扫地僧也曾说过:
只有佛法越高,慈悲之念越盛,武功绝技才能练得越我
或许我辈须工作中修行,也是这个道理!
采坑记
对,就是采坑。以下是从草稿中摘取的部分尝试:
编号 | 容器 |
---|---|
1 | docker run -it –name dc7 ailyfeng/centos7.2.1511 /bin/bash |
2 | docker run -it –name ct7 centos /bin/bash |
3 | docker run -it –name ct7 centos /bin/bash |
4 | docker run -it –privileged –name dc99 sssllc/centos7.2-jdk1.8 |
5 | docker build –rm -t centos:systemd . && docker run -it –name dr7 centos:systemd |
6 | docker run -it –name dr18 yjjy0921/redhat7.2 /bin/bash |
几个搞定依赖包的有用命令
ldd应该是linux通用的命令;rpm和repotrack貌似是CentoOS的专有命令;
编号 | 命令 | 举例 | 作用 |
1 | ldd | ldd wkhtmltopdf | not found的就是对应的依赖包不存在,适用于二进制包(wkhtmltopdf)的命令;而需要安装的命令(docker-ce)只能通过安装报错来捕获缺失的依赖了 |
2 | rpm -ql | rpm -ql docker-ce | 查看安装的时候有哪些命令在PATH下,用这些命令去启动 |
3 | repotrack | repotrack -a x86_64 -p /usr/local/yumrepo libgudev1 | 打包下载指定架构(X86_63)所有的依赖到指定目录 |
思路:先验证再服务器落地
- 本地 pull 一个 CentOS7.2 的镜像
- 只下载 Docker 及其依赖不安装
- 安装验证
- 考虑用户及用户组赋权
- cp 至服务器尝试
安装docker
内网Linux基础依赖
要安装 Docker 基础环境,必须满足:
- Linux 内核必须大于 3.10:登录内网服务器看了看,恰好 3.10。够用,就不折腾了;
- 需要支持 device-mapper:已支持
[root@pms tmp] uname -r
3.10.0-327.e17.x86_64
[root@pms tmp] ls -l /sys/class/misc/device-mapper
lrwxrwxrwx. 1 root root 0 May 20 16:17 /sys/class/misc/device-mapper -> ../../devices/virtual/misc/device-mapper
环境模拟
MacBook 上,起 CentOS7.2 容器,来验证思路;
拉取镜像,创建 repo 目录
ChinaDreams:~ kangcunhua$ docker run -it --name dc88 sssllc/centos7.2-jdk1.8 /bin/bash
[root@7d935562e0ae /]# java -version
java version "1.8.0_111"
Java(TM) SE Runtime Environment (build 1.8.0_111-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.111-b14, mixed mode)
[root@7d935562e0ae /]# yum repo list
Loaded plugins: fastestmirror, ovl
No such command: repo. Please use /usr/bin/yum --help
[root@7d935562e0ae /]#
[root@7d935562e0ae /]# yum repolist
...
[root@7d935562e0ae home]# cd /usr/local/
root@7d935562e0ae local]# mkdir yumrepo
下载所需离线包
[root&