背景是这样的,学习docker技术,仅看理论是远远不够的,需要动手实践。
第一步当然是搭建环境,一件本来以为很容易的事情,实际是非常曲折。
首先,服务器是公司内网的,CentOS7.4,跟外网是隔离,所以不用想什么通过yum命令在线安装了,只能使用离线下载安装包——上传服务器——本地安装这种模式。
网上大部分介绍docker技术的文章,大都是采用在线安装的方式,关于离线怎么安装,开始了百度之旅。
最开始,找到了下载二进制包,然后解压缩,运行的方式,用这种方式正常启动了docker引擎,但后续发现,官方并不推荐这种方式,
不建议在生产环境中使用二进制文件安装 Docker,因为它们不会使用安全更新自动更新。此页面上描述的 Linux 二进制文件是静态链接的,这意味着构建时依赖项中的漏洞不会被 Linux 发行版的安全更新自动修补。
与使用包管理器或通过 Docker Desktop 安装的 Docker 包相比,更新二进制文件也稍微复杂一些,因为每当有新版本的 Docker 时,它都需要(手动)更新已安装的版本。
此外,静态二进制文件可能不包括动态包提供的所有功能。
参见:https://docs.docker.com/engine/install/binaries/
其他几点还好,最后一条,静态二进制文件可能不包括动态包提供的所有功能,可能影响比较大。
于是放弃这种方式,清理服务器,恢复原状,然后开始尝试安装包方案。
参照的是docker的官方文档https://docs.docker.com/engine/install/centos/#install-from-a-package,刚想感叹下,还是官方说明简洁明了,比百度搜索出来的五花八门的结果好多了,然后噩梦开始了……
选了一个最新的版本,下载后,执行yum install docker-ce-20.10.9-3.el7.x86_64.rpm 命令,报错,提示依赖包container-selinux需要高于2:2.74
[root@DB-REDISQAS setup]# yum install docker-ce-20.10.9-3.el7.x86_64.rpm
Loaded plugins: fastestmirror, langpacks
Examining docker-ce-20.10.9-3.el7.x86_64.rpm: 3:docker-ce-20.10.9-3.el7.x86_64
Marking docker-ce-20.10.9-3.el7.x86_64.rpm to be installed
Resolving Dependencies
–> Running transaction check
—> Package docker-ce.x86_64 3:20.10.9-3.el7 will be installed
–> Processing Dependency: container-selinux >= 2:2.74 for package: 3:docker-ce-20.10.9-3.el7.x86_64
Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&infra=stock error was
14: curl#7 - “Failed to connect to 2604:1380:2001:d00::3: Network is unreachable”
于是查找下载container-selinux这个包
下载
http://mirror.centos.org/centos/7/extras/x86_64/Packages/container-selinux-2.119.2-1.911c772.el7_8.noarch.rpm
安装提示
—> Package container-selinux.noarch 2:2.119.2-1.911c772.el7_8 will be installed
–> Processing Dependency: selinux-policy >= 3.13.1-216.el7 for package: 2:container-selinux-2.119.2-1.911c772.el7_8.noarch
下载
http://mirror.centos.org/centos/7/os/x86_64/Packages/selinux-policy-3.13.1-268.el7.noarch.rpm
安装提示
—> Package selinux-policy.noarch 0:3.13.1-166.el7 will be updated
–> Processing Dependency: selinux-policy = 3.13.1-166.el7 for package: selinux-policy-targeted-3.13.1-166.el7.noarch
下载
http://mirror.centos.org/centos/7/os/x86_64/Packages/selinux-policy-targeted-3.13.1-268.el7.noarch.rpm
……
然后意识到,这简直就是俄罗斯套娃,一层套一层,要真依赖上几十个包,太浪费时间了,于是再次百度,发现有一篇说,依赖包大概有18个,18……多吉利的数字
再次调整思路,去百度,有没有别人已经下载好的包……能搜到,但下载地址指向了csdn,50积分……
再查,有没有批量下载依赖包的方式,还真找到了
找一台能联网虚机
yum -y install --downloadonly --downloaddir=/root/docker docker-ce
–downloadonly 只下载不安装 --downloaddir 下载后路径 docker-ce 服务名
但是……没环境啊,有这环境我直接在线安装不就得了
最后,再次搜索,有没有已经可以下载的安装好的包,找到一个百度网盘,压缩包90多兆,下载后解压一看,根本就不是centos的,继续找,终于找到一个centos7 全离线安装docker1.17.12,下载下来,23个文件,测试依然少包libgudev1-devel-219-42.el7.x86_64,并且网上只能搜到新版本,找不到该版本的下载了,安装了新版,又会进一步提示其他依赖包,又回到了原来的俄罗斯套娃游戏。
最终,回到了最开始的二进制安装方式,实际试了下,作为练手的环境也够用了。
反思下,本来一件以为很容易的事情,实际困难重重,linux与docker这些开源的东西,版本的管理,环境的差异,组件的依赖,技术文章的混乱,要理清楚,实在是太耗费精力和时间了……