ARM服务器离线部署Docker:从二进制包到生产级配置的深度实践
最近在几个边缘计算和国产化替代的项目里,频繁遇到ARM架构服务器离线部署Docker的需求。这些场景往往是在内网环境、安全隔离区或者网络受限的边缘节点,无法直接访问外部软件仓库。传统的在线安装方式完全失效,而二进制包安装虽然看似简单,实际操作中却会遇到各种意想不到的坑——从权限问题到存储驱动配置,从服务启动失败到镜像拉取超时。
如果你也正在为ARM服务器上的Docker离线部署而头疼,这篇文章或许能帮你少走弯路。我会基于最近在鲲鹏920、飞腾2000+等ARM平台上的实战经验,详细拆解从二进制包获取到生产级配置的全过程,并分享那些官方文档里不会告诉你的细节和解决方案。
1. 环境准备与架构适配
在开始安装之前,我们需要对目标环境有清晰的了解。ARM架构虽然统称为ARM,但实际上有着不同的变体和实现,这直接影响到二进制包的选择和后续的兼容性。
1.1 识别系统架构与内核版本
首先通过几个关键命令确认你的服务器环境:
# 查看CPU架构信息
uname -m
# 查看详细系统信息
cat /etc/os-release
# 查看内核版本
uname -r
常见的ARM架构标识包括:
- aarch64:64位ARM架构,目前主流服务器采用
- armv7l:32位ARMv7架构,多见于旧设备
- armv8l:64位ARMv8架构的32位兼容模式
注意:虽然
aarch64和arm64在大多数情况下是等价的,但某些发行版的包管理器可能会有细微区别。Docker官方仓库通常使用aarch64作为标识。
1.2 系统依赖检查与配置
离线环境意味着所有依赖都需要预先准备。以下是必须检查的系统组件:
| 组件 | 最低要求 | 检查命令 | 备注 |
|---|---|---|---|
| 内核版本 | ≥ 3.10 | uname -r |
建议4.14+以获得更好的容器支持 |
| cgroup支持 | 已启用 | grep cgroup /proc/filesystems |
容器资源隔离的基础 |
| overlay2 | 已启用 | grep overlay /proc/filesystems |
Docker推荐的文件系统驱动 |
| iptables | ≥ 1.4 | iptables --version |
容器网络管理 |
| systemd | ≥ 219 | systemctl --version |
服务管理(非必须但推荐) |
如果发现缺少某些内核模块,可能需要重新编译内核或加载模块:
# 临时加载overlay模块
modprobe overlay
# 永久生效(添加到/etc/modules-load.d/)
echo "overlay" >> /etc/modules-load.d/docker.conf
1.3 存储规划与分区建议
在离线环境中,存储配置尤为重要。Docker默认使用/var/lib/docker作为数据目录,但考虑到:
- 系统盘空间通常有限
- 容器镜像和运行时数据可能快速增长
- 备份和迁移的需求
我建议将Docker数据目录独立挂载到专用分区:
# 假设有独立数据盘/dev/sdb
mkfs.ext4 /dev/sdb
mkdir -p /data/docker
# 修改/etc/fstab实现自动挂载
echo "/dev/sdb /data/docker ext4 defaults 0 0" >> /etc/fstab
mount -a
这样不仅避免了系统盘被占满的风险,也便于后续的备份和迁移操作。
2. 二进制包获取与离线部署
2.1 选择合适的Docker版本
Docker官方提供了静态二进制包的下载地址,但版本选择有讲究。不是越新越好,而是要考虑:
- 稳定性优先:生产环境建议选择稳定版而非最新版
- 内核兼容性:较新的Docker版本可能需要更新的内核特性
- 功能需求:是否需要BuildKit、containerd等新特性
官方下载地址结构如下:
https://download.docker.com/linux/static/stable/aarch64/
这里有一个实用的版本选择策略表格:
| Docker版本 | 发布时间 | 推荐场景 | 注意事项 |
|---|---|---|---|
| 20.10.x | 2020-2021 | 稳定生产环境 | 兼容性好,社区支持充分 |
| 23.0.x | 2023 | 新功能需求 | 需要较新内核(≥5.4) |
| 24.0.x | 2023-2024 | 前沿测试 | 可能有不稳定因素 |
2.2 完整离线包获取流程
在有网络的环境中准备离线安装包时,我习惯使用以下脚本一次性获取所有必要组件:
#!/bin/bash
# 准备Docker离线安装包
DOCKER_VERSION="20.10.24"
ARCH="aarch64"
DOWNLOAD_DIR="./docker-offline-${DOCKER_VERSION}"
# 创建下载目录
mkdir -p ${DOWNLOAD_DIR}
# 下载Docker二进制包
wget -P ${DOWNLOAD_DIR} \
"https://download.docker.com/linux/static/stable/${ARCH}/docker-${DOCKER_VERSION}.tgz"
# 下载docker-compose(如果需要)
DOCKER_COMPOSE_VERSION="2.20.3"
wget -P ${DOWNLOAD_DIR} \
"https://github.com/docker/compose/releases/download/v${DOCKER_COMPOSE_VERSION}/docker-compose-linux-${ARCH}"
# 下载containerd(独立版本,可选)
CONTAINERD_VERSION="1.6.21"
wget -P ${DOWNLOAD_DIR} \
"https://github.com/containerd/containerd/releases/download/v${CONTAINERD_VERSION}/containerd-${CONTAINERD_VERSION}-linux-${ARCH}.tar.gz"
# 创建安装脚本
cat > ${DOWNLOAD_DIR}/install.sh << 'EOF'
#!/bin/bash
set -e
echo "开始安装Docker ${DOCKER_VERSION}..."
# 解压Docker
tar -xzf docker-${DOCKER_VERSION}.tgz
sudo cp docker/* /usr/bin/
# 创建docker用户组

&spm=1001.2101.3001.5002&articleId=153707595&d=1&t=3&u=5b40c3ca3c7f4a428d1ab0030c62a543)
1394

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



