1. 环境准备与系统检查
在华为欧拉系统OpenEuler上折腾Docker,第一步不是急着敲命令,而是把“地基”打好。我见过太多朋友一上来就照着教程安装,结果因为系统版本、内核或者依赖库的问题,折腾半天最后还得重头再来。所以,咱们先花几分钟,把准备工作做扎实,后面才能一路顺畅。
首先,确认你的OpenEuler系统版本。打开终端,输入 cat /etc/os-release 命令。你会看到类似 VERSION="22.03 LTS" 这样的信息。目前主流的OpenEuler LTS版本是20.03、22.03和23.03。这篇文章的演示会以 OpenEuler 22.03 LTS 为主,因为这个版本在企业里用得最广,生态支持也最成熟。如果你的版本是20.03,大部分步骤也通用,但个别依赖包的名字可能会稍有不同,到时候我会特别提醒你。
接下来,检查系统架构。虽然现在服务器基本都是x86_64(也就是amd64)的天下,但欧拉系统对ARM架构(比如鲲鹏处理器)的支持也非常好。运行 uname -m 命令,如果显示 x86_64 或 aarch64,就说明没问题。这两种架构的Docker安装包是分开的,下载的时候可别选错了。
然后,咱们得确保系统是最新的。即使是在离线环境,如果你的基础镜像版本太老,也可能缺一些关键的库文件。在线环境下,直接运行 sudo dnf update -y 来更新所有软件包。这个命令会花点时间,但能避免很多因版本不匹配导致的诡异问题。离线环境的话,你需要在构建系统镜像或者初始化系统时,就确保已经集成了最新的更新包。
最后,也是最重要的一步:关闭防火墙和SELinux。我知道生产环境有安全要求,但在安装和初步测试阶段,它们往往是最大的“拦路虎”。你可以暂时关闭它们,等Docker完全配置好之后再按需开启。关闭防火墙用 sudo systemctl stop firewalld 和 sudo systemctl disable firewalld。对于SELinux,编辑 /etc/selinux/config 文件,将 SELINUX=enforcing 改为 SELINUX=disabled,然后重启系统。别嫌重启麻烦,SELinux策略不彻底禁用,后面Docker容器访问宿主机文件系统时,权限问题能让你debug到怀疑人生。做完这些,你的OpenEuler系统就已经为安装Docker做好了万全准备。
2. 离线安装:无网络环境的终极解决方案
离线安装是很多内网、生产环境或者安全要求极高场景下的刚需。没有外网,所有东西都得靠自己“搬”进去。这里我分享两种最稳的离线安装方法:二进制包安装和制作离线RPM包仓库。第一种最简单粗暴,第二种更灵活、更接近在线体验。
2.1 二进制包安装:直接解压就能用
这种方法就像绿色软件,把Docker引擎所有可执行文件打包下载,解压到系统路径就能跑。它的优点是极度简单,不依赖系统包管理器,适合任何欧拉版本,甚至是定制化很强的系统。
首先,找一台能上网的机器,去Docker官方仓库下载对应架构的静态二进制包。对于x86_64的OpenEuler,下载地址是 https://download.docker.com/linux/static/stable/x86_64/。我建议选择稍旧一点的稳定版本,比如 docker-20.10.24.tgz,因为最新版有时会和某些内核模块有兼容性问题。用 wget 或者浏览器下载下来。
接着,把这个 docker-*.tgz 包用U盘、内网FTP或者任何你能想到的方式,传到离线OpenEuler服务器上。假设你放到了 /opt 目录。然后我们解压并安装:
# 进入目录并解压
cd /opt
tar -zxvf docker-20.10.24.tgz
# 进入解压后的目录,给所有二进制文件执行权限
cd docker
chmod +x *
# 将文件拷贝到系统可执行路径,通常是 /usr/bin 或 /usr/local/bin
sudo cp * /usr/bin/
现在,Docker的命令行工具(docker, dockerd, containerd等)已经可以直接在终端调用了。但光有命令不行,我们得让Docker以服务形式在后台运行。这就需要创建systemd服务单元文件。
# 创建服务配置文件
sudo vim /usr/lib/systemd/system/docker.service
把下面的配置内容贴进去。这里有个关键点:--graph 参数指定了Docker镜像和容器的存储目录。默认在 /var/lib/docker,但如果你系统盘空间小,强烈建议改到数据盘,比如 /data/docker。
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
# 注意!这里修改为你想要的存储路径
ExecStart=/usr/bin/dockerd --graph /data/docker
ExecReload=/bin/kill -s HUP $MAI


4105

被折叠的 条评论
为什么被折叠?



