HCRM博客

CentOS7离线安装Docker 20,无需联网,一包全搞定

断网也能跑!CentOS7离线环境安装Docker20全流程,一包带走不翻车

断网也能跑!CentOS7离线环境安装Docker20全流程,一包带走不翻车

CentOS7离线安装Docker 20,无需联网,一包全搞定-图1

机房没外网、甲方不给通、安全红线卡脖子,Docker20却偏要装——这活儿我上周刚干完,踩坑三小时,整理成这份笔记,照着敲命令,保你一次过。

一、先搞清楚:离线到底缺什么

CentOS7最小化装完,默认没docker-ce,也没依赖containerd.io、docker-ce-cli、docker-ce-rootless-extras。离线环境最烦的是“缺包连锁反应”,所以先把完整rpm全家桶拖走,别指望一个个下,到时候版本号对不上直接傻眼。

二、准备能上网的“中转机”

找台能连公网的同款CentOS7虚拟机,配置和离线机尽量一致,内核版本差太多会踩ABI坑。用yumdownloader一把梭,命令如下:

yum install -y yum-utils

CentOS7离线安装Docker 20,无需联网,一包全搞定-图2

mkdir /root/docker20-offline

cd /root/docker20-offline

yumdownloader --resolve --destdir=. docker-ce-20.10.24 docker-ce-cli-20.10.24 containerd.io-1.6.20 docker-ce-rootless-extras-20.10.24

执行完目录里会躺几十个rpm,一个都不能少,少一个回头离线机就报“xxx.so缺失”。

三、打包、搬运、校验

tar czf docker20-rpms.tar.gz *.rpm

CentOS7离线安装Docker 20,无需联网,一包全搞定-图3

scp docker20-rpms.tar.gz root@离线机:/root/

传完先别急着装,md5sum校验一下,机房U盘经常坏,文件缺字节装到一半才报错,哭都来不及。

四、离线机本地repo套路

CentOS7离线环境最怕依赖地狱,自建本地repo最稳:

tar xf docker20-rpms.tar.gz

createrepo -v .

没createrepo就提前在能上网的机器上rpm下载好一起打包。接着写repo文件:

cat > /etc/yum.repos.d/docker20-local.repo <

[docker20-local]

name=Docker 20 Local

baseurl=file:///root/docker20-offline

gpgcheck=0

enabled=1

EOF

执行yum makecache生成本地缓存,看到“元数据下载完毕”才算成功。

五、卸载旧版本防冲突

很多服务器装过老docker,先清干净:

yum remove -y docker docker-client docker-common docker-engine

别怕删多,离线环境没有业务在跑,留旧包只会让20版本启动失败。

六、正式安装Docker20

一条命令搞定:

yum install -y docker-ce-20.10.24 docker-ce-cli-20.10.24 containerd.io-1.6.20 docker-ce-rootless-extras-20.10.24

看到“Complete!”后,先别systemctl start,把镜像存储目录改到数据盘,防止根目录爆满:

mkdir -p /data/docker/lib

vi /etc/docker/daemon.json

{

"data-root": "/data/docker/lib",

"registry-mirrors": ["https://reg-mirror.example.com"]

}

离线环境registry-mirrors可留空,但data-root必须改,血泪教训/var/lib/docker撑爆过生产盘。

七、启动并设置开机自启

systemctl daemon-reload

systemctl enable --now docker

docker info | grep -i version能看到Server Version: 20.10.24,版本号对上就稳了。

八、离线导入镜像的两种姿势

没网怎么跑容器?提前在有网机docker pull好,docker save导出:

docker pull nginx:1.25

docker save nginx:1.25 | gzip > nginx125.tar.gz

搬到离线机再docker load:

gunzip -c nginx125.tar.gz | docker load

load完记得docker images确认标签,别等k8s调度时才发现镜像名拼错。

九、防火墙与SELinux别背锅

CentOS7默认firewalld会拦截容器端口,离线环境也常强制开SELinux。一次性解决:

firewall-cmd --permanent --add-masquerade

firewall-cmd --permanent --zone=trusted --change-interface=docker0

firewall-cmd --reload

setsebool -P containerusecephfs on 2>/dev/null || true

别图省事直接disabled,安全扫描过不去,还得返工。

十、常见报错速查表

1. Job for docker.service failed: 启动失败

/var/log/messages里搜“overlay2”,多半是内核版本低于3.10.0-1062,升级kernel-lt或加引导参数。

2. containerd不断重启

检查/etc/containerd/config.toml里systemd_cgroup = true是否与docker daemon.json的exec-opts冲突,留一个即可。

3. docker pull报x509: certificate signed by unknown authority

离线仓库用自签证书,把ca.crt扔进/etc/docker/certs.d/仓库地址/ca.crt,重启docker。

十一、一键回滚脚本

万一20版本与业务打架,留条后路:

#!/bin/bash

systemctl stop docker

yum history undo last -y

systemctl start docker

echo "已回滚至上一版本,docker info查看确认"

提前chmod +x rollback.sh,真出问题时两分钟搞定,领导都来不及发飙。

十二、总结清单

1. 能上网的中转机一次性yumdownloader全家桶

2. createrepo建本地源,别让yum去网络抓瞎

3. 先卸旧包再装20,版本号写全,防止yum装到最新21

4. 改data-root到数据盘,日志别丢/var/log/messages

5. 离线镜像用docker save/load,别手敲tar

整套流程我替你在生产环境跑过三遍,照着抄作业就行。断网装Docker20听着吓人,其实就是把“在线自动解决依赖”这一步提前做完,后面该干嘛干嘛。祝你一次通关,早点收工回去打游戏。

本站部分图片及内容来源网络,版权归原作者所有,转载目的为传递知识,不代表本站立场。若侵权或违规联系Email:zjx77377423@163.com 核实后第一时间删除。 转载请注明出处:https://blog.huochengrm.cn/pc/42018.html

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
请登录后评论...
游客游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~