目的是纯离线安装
第一波
首先,通过该页面(图a)的指引在链接https://download.docker.com/linux/centos/7/x86_64/stable/Packages/
下载了相关的rpm。
containerd.io-1.4.9-3.1.el7.x86_64.rpm
docker-ce-20.10.9-3.el7.x86_64.rpm
docker-ce-cli-20.10.9-3.el7.x86_64.rpm
docker-ce-rootless-extras-20.10.9-3.el7.x86_64.rpm
docker-ce-selinux-17.03.3.ce-1.el7.noarch.rpm
docker-scan-plugin-0.9.0-3.el7.x86_64.rpm
然后传到内网电脑的一个空文件夹里,接着在该文件夹里执行yum install *.rpm
,但是这些rpm包依赖其它rpm,意味着也要下载相关联的rpm包。最终,按着一个个提示下载了一大堆,见图b。
很不幸,还是不行,还有下载其它依赖。这样子当然不行啦,完全是个无底洞,谁知道还要下载多少(得疯),所以宣告第一波操作失败~。
第二波
那官方有没有提供相关的压缩包呢,有的https://download.docker.com/linux/static/stable/x86_64/
,在这个地址里看到相关的压缩包。下载后查看里面的内容,是一些命令,如图c
备注:这只是docker-19.03.8.tgz
的内容,还有一个docker-rootless-extras-20.10.9.tgz
这里,我只把docker-19.03.8.tgz放到内网里了,接下来的操作是这样的,如下:
- 把解压出来的全部命令放到
/usr/bin
里 - 创建docker.service服务并启动
- 验证服务
docker -v
docker run hello-world
(hello-world镜像需要自己下载并导入)
参考链接:https://blog.csdn.net/YSOLA4/article/details/105850419
最终,离线安装成功。
那它这里给我们准备的包能用到生产环境下?我给自己打了个问号。这个压缩包是面对所有linux系统的,那对于具体的linux系统(centos、ubuntu等),它舍弃了哪些?还是兼容了所有?目前没找到答案(彩笔啊~~~)。所以有了再进一步的想法,我这该死的强迫症。
一年过去了,第三波里的解决方案确实挺麻烦的,也许当前的方案也不错~
第三波
想要使用具体的linux系统的docker包,就得在第一波的基础上搞事情--有没有什么工具可以把docker及相关的所有依赖全部下载到指定文件夹里?然后找到了这个东西yumdownloader
。
参考链接:https://www.cnblogs.com/caihl/articles/15188260.html
使用了链接中的方法二
经过测试,能达到预期目的--目的包及其依赖包。但存在一个问题--已经下载的包不会再下载,这意味着指定的文件夹里的包也可能是不完整的。这应该怎么办呢?内外网两台电脑的所有东西要是一样的(可以理解为一个是另一个的克隆),接着再执行相关命令,如: yum install --downloadonly --downloaddir=/tmp docker-ce docker-ce-cli containerd.io
。最后,再把文件夹里的所有包放到内网的电脑里安装,在该文件夹里执行yum install *.rpm
理论上,这是可行的。但手上没这个条件来模拟,所以就这样吧,累~~~
更新~
刚好要用上离线安装,在该死的强迫症下,还是把理论进行了验证。
步骤如下:
1、准备两台一样的服务器,接着使其中一台不能联网,保证可以使用yum命令
2、在联网的服务器上安装yum-utils yum install -y yum-utils
3、创建一个空文件夹,并执行docker相关下载
# 使用yum也行,这里是直接使用了yumdownloader
yumdownloader --resolve --destdir /root/kk docker-ce docker-ce-cli containerd.io
最终得到这些
4、安装。把3中得到的文件打包上传到非联网的服务器上并解压,在当前文件夹下执行yum install *.rpm
,安装完后执行docker -v
查看版本信息(侧面验证安装是否成功)
5、启动服务。systemctl start docker
6、验证。执行docker run hello-world
,看是否能正常运行镜像(hello-world镜像需要自己下载并导入)
#hello-world镜像下载、导出、导入
#在联网的电脑上下载、导出
docker pull hello-world # 拉取最新的hello-world镜像
docker save -o filename hello-world # 导出到当前目录下,并命名为filename
#在无网的电脑中导入
docker load -i filename # 在当前目录下导入hello-world镜像
一路顺利完成,理论正确!!!
生产应用
注意事项
- 最好使用第三波中的方式。注意两台服务器都未曾安装相关的rpm及其依赖的rpm(在开始下载rpm时先做服务器器快照,方便回滚)。如果最后安装出错,很可能两台服务器不一致,存在依赖包缺失问题。
- 统一docker版本。上述是直接使用最新版的docker,在安装时建议指定版本。
更新~
生产应用时可能还是使用第二波中的方式好。