基于Docker Compose的ARM64镜像离线部署全流程(MinIO实战)附资源包

基于Docker Compose的ARM64镜像离线部署全流程(MinIO实战)附资源包

摘要

本文针对ARM64架构服务器(鲲鹏、飞腾、树莓派等),详细讲解镜像本地打包、离线传输、远程导入及Docker Compose标准化部署的完整流程。结合MinIO实战案例,提供可直接复制的命令与配置文件,解决离线环境下ARM64镜像部署的核心痛点,确保生产环境稳定运行。

关键词

Docker Compose;ARM64;离线部署;MinIO;容器化;服务器运维

一、场景背景

在服务器运维中,ARM64架构凭借低功耗、高性能的优势,广泛应用于边缘计算、国产服务器等场景。但离线环境下,ARM64镜像的获取、传输与部署常面临诸多问题:

  • 远程服务器无法直接拉取私有/定制ARM64镜像;
  • 架构不匹配导致容器启动失败(如x86镜像在ARM64服务器运行报错);
  • 手动部署步骤繁琐,易出错且难以标准化。

本文以MinIO为例,通过本地打包ARM64镜像→离线传输→Docker Compose一键部署的流程,提供标准化、可复用的解决方案。

二、核心前提确认

1. 确认本地镜像架构(关键)

你已拉取的ARM64镜像ID为8f08aee61480,先验证架构,确保无误:

bash 复制代码
# 验证镜像架构,输出arm64即为正确
docker inspect --format '{{.Architecture}}' 8f08aee61480

2. 工具依赖

  • 本地与远程服务器均已安装Docker(版本≥20.10);
  • 远程服务器需安装Docker Compose(V2版本,推荐v2.24.5及以上);
  • 具备服务器文件传输权限(SCP/Xftp/U盘等)。

三、本地操作:打包ARM64镜像

1. 导出ARM64镜像为离线包

在本地机器执行以下命令,将镜像导出为.tar文件(约167MB):

bash 复制代码
# 导出镜像到当前目录,生成minio-arm64.tar
docker save -o minio-arm64.tar 8f08aee61480
镜像网盘资源
复制代码
链接:https://pan.quark.cn/s/daa1cf3ac473

2. 准备Docker Compose配置文件

在本地创建docker-compose.yml文件,内容如下(核心是指定镜像名称为本地标签):

yaml 复制代码
version: '3.8'  # 兼容ARM64的稳定版本

services:
  minio:
    image: minio-arm64:local  # 后续导入时的自定义标签
    container_name: minio-arm64
    restart: always  # 开机自启
    ports:
      - "9000:9000"   # MinIO API端口
      - "9090:9090"   # 控制台端口
    volumes:
      - ./data:/data  # 数据持久化挂载
    environment:
      - MINIO_ROOT_USER=minioadmin  # 管理员账号
      - MINIO_ROOT_PASSWORD=minio123456  # 管理员密码(生产环境请修改)
      - MINIO_BROWSER_REDIRECT_URL=http://localhost:9090  # 控制台访问地址
	  - MINIO_SERVER_URL=http://localhost:9000  # api访问地址
	  - MINIO_BROWSER_SECURE=false  # 关闭安全校验 (MINIO_BROWSER_REDIRECT_URL、MINIO_SERVER_URL使用内网地址时需要配置,否则浏览器无法登录)
	  - MINIO_BROWSER_CSRF=false  # 关闭 CSRF
    command: server /data --console-address ":9090"  # 启动命令

3. 打包文件传输

将以下2个文件放入同一文件夹,通过SCP/Xftp等方式传输到远程服务器的/root/minio/目录:

复制代码
minio/
├─ minio-arm64.tar  # 离线镜像包
└─ docker-compose.yml  # Compose配置文件

四、远程服务器操作:离线导入与部署

1. 登录远程服务器

通过SSH登录远程ARM64服务器,进入部署目录:

bash 复制代码
# 进入部署目录
cd /root/minio

2. 导入离线镜像

执行以下命令,将.tar包导入本地镜像仓库:

bash 复制代码
# 导入镜像,输出Loaded image ID表示成功
docker load -i minio-arm64.tar

3. 为镜像打标签(适配Compose)

Docker Compose需通过image标签识别镜像,需给导入的镜像添加自定义标签:

bash 复制代码
# 给镜像打标签,与docker-compose.yml中的image一致
docker tag 8f08aee61480 minio-arm64:local

4. 一键启动Docker Compose

执行以下命令,后台启动MinIO容器:

bash 复制代码
# 后台启动,-d表示 detached 模式
docker-compose up -d

5. 验证部署结果

(1)验证容器运行状态
bash 复制代码
# 查看容器状态,Up表示运行正常
docker ps | grep minio-arm64
(2)验证架构正确性
bash 复制代码
# 再次验证镜像架构,输出arm64确保架构匹配
docker inspect --format '{{.Architecture}}' minio-arm64:local
(3)访问MinIO控制台

打开浏览器,访问:http://服务器IP:9090

登录账号:minioadmin,密码:minio123456(生产环境务必修改密码)

五、常见问题与解决方案

问题现象 原因分析 解决方案
导入镜像时提示"格式错误" 镜像包传输不完整 重新传输.tar包,建议用SCP加-C参数压缩传输
容器启动失败,日志提示"exec format error" 镜像架构不匹配(x86误导入) 重新拉取ARM64镜像,按本文流程导出
Docker Compose提示"command not found" 未安装Docker Compose V2 执行docker compose(V2命令)或按下文安装Compose
端口访问不通 防火墙未开放端口 执行firewall-cmd --add-port=9000/tcp --add-port=9090/tcp --permanent && firewall-cmd --reload

补充:ARM64服务器离线安装Docker Compose

若远程服务器未安装Docker Compose,可按以下步骤离线安装:

  1. 本地下载ARM64版本Compose:https://github.com/docker/compose/releases,选择`docker-compose-linux-aarch64`;
  2. 传输到服务器/usr/local/lib/docker/cli-plugins/目录;
  3. 赋予执行权限:
bash 复制代码
sudo chmod +x /usr/local/lib/docker/cli-plugins/docker-compose
  1. 验证:docker compose version(V2命令)

六、总结与扩展

1. 核心流程回顾

  1. 本地导出:docker save -o minio-arm64.tar 镜像ID
  2. 离线传输:将.tardocker-compose.yml传到远程服务器;
  3. 远程导入:docker load -i minio-arm64.tar + 打标签;
  4. 一键部署:docker-compose up -d

2. 扩展建议

  • 生产环境建议将MINIO_ROOT_PASSWORD改为强密码,避免泄露;
  • 可将部署脚本封装为Shell脚本,实现一键部署,提升效率;
  • 其他ARM64镜像(如MySQL、Redis)可按此流程复用,仅需修改镜像ID与Compose配置。

本文流程已在鲲鹏ARM64服务器、银河麒麟V10系统中验证通过,可直接应用于生产环境。若需部署其他ARM64应用,替换镜像ID与docker-compose.yml中的服务配置即可。

附录:完整命令清单

bash 复制代码
# 本地:导出ARM64镜像
docker save -o minio-arm64.tar 8f08aee61480

# 远程:导入镜像
docker load -i minio-arm64.tar

# 远程:打标签适配Compose
docker tag 8f08aee61480 minio-arm64:local

# 远程:启动Compose
cd /root/minio && docker-compose up -d

# 验证:查看容器状态
docker ps

# 验证:查看镜像架构
docker inspect --format '{{.Architecture}}' minio-arm64:local