Skip to content

国产化环境统信UOS系统离线部署

下载/安装docker/docker-compose

  1. docker-compose-linux-aarch64

    注意:一定要选文件名带 linux-aarch64 的版本。

    https://github.com/docker/compose/releases/download/v2.27.0/docker-compose-linux-aarch64

    shell
    # 1. 把它移动到系统命令目录(需要 sudo 权限)
    sudo cp docker-compose-linux-aarch64 /usr/bin/docker-compose
    
    # 2. 赋予它“可执行”的权力(这一步最关键,否则系统会把它当普通文件)
    sudo chmod +x /usr/bin/docker-compose
    
    # 3. 验证一下
    docker-compose --version
  2. docker-26.1.4.tgz

    https://download.docker.com/linux/static/stable/aarch64/

    shell
    #1. 解压
    tar -zxvf docker-26.1.4.tgz
    #2. 复制二进制文件
    sudo cp docker/* /usr/bin/
    #3. 赋予执行权限
    sudo chmod +x /usr/bin/docker*
    sudo chmod +x /usr/bin/containerd*
    sudo chmod +x /usr/bin/runc
    sudo chmod +x /usr/bin/ctr
    docker version
    
    #创建必要的目录(仅第一次需要)
    sudo mkdir -p /var/lib/docker
    sudo mkdir -p /etc/docker
    #后台启动守护进程
    sudo dockerd > /tmp/docker.log 2>&1 &
    #验证是否成功
    docker ps
    
    #如果有问题
    #将你的用户加入 docker 组
    sudo groupadd docker
    sudo usermod -aG docker $USER
    newgrp docker
    
    
    ## 尝试启动
    #!/bin/bash
    # 启动 Docker 守护进程
    sudo dockerd > /dev/null 2>&1 &
    sleep 3
    echo "Docker 已启动!"
    # 顺便检查一下镜像状态
    docker images
    
    #如果报错 running modprobe bridge br)netfilter failed with message: modprobe: ERROR ../libkmod.c 。。。。
    #在启动 dockerd 时,加上两个关键参数:--bridge=none(禁用默认网桥)或更常用的 --iptables=false。
    #请尝试执行以下命令:
    #--iptables=false: 告诉 Docker 不要去动系统的防火墙规则,这样它就不会去调用报错的 br_netfilter。
    #--ip-masq=false: 禁用 IP 伪装。
    
    sudo dockerd --iptables=false --ip-masq=false > /dev/null 2>&1 &

    封装一下一键启动

    创建文件 ~/up.sh

    shell
    #!/bin/bash
    # 启动 Docker 守护进程
    sudo dockerd > /dev/null 2>&1 &
    sleep 3
    echo "Docker 已启动!"
    # 顺便检查一下镜像状态
    docker images

    给权限

    shell
    chmod +x ~/up.sh
    #以后每次开机,你只需要在终端输入 ./up.sh 就能一键进入开发状态了。

下载/安装java

https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u422-b05/OpenJDK8U-jdk_aarch64_linux_hotspot_8u422b05.tar.gz

  1. OpenJDK8U-jdk_aarch64_linux_hotspot_8u482b08.tar.gz

    shell
    #1. 解压
    tar -zxvf OpenJDK8U-jdk_aarch64_linux_hotspot_8u422b05.tar.gz
    #2. 移动到 /opt 目录
    sudo mv jdk8u482-b08 /opt/jdk8
    #3. 配置环境变量
    nano ~/.bashrc
    
    #文件末尾添加
    export JAVA_HOME=/opt/jdk8
    export PATH=$JAVA_HOME/bin:$PATH
    export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    
    #按 Ctrl + O(保存),然后按 回车 确认。
    #按 Ctrl + X(退出编辑器)。
    #让配置立即生效
    source ~/.bashrc
    java -version

拉取 ARM64 版镜像

(Redis/Nginx/MySQL)

拉不动就多拉几次或者上魔法

shell
# 拉取 Redis 6.2 	ARM 镜像
docker pull --platform linux/arm64 redis:6.2
# 拉取 Nginx 		ARM 镜像
docker pull --platform linux/arm64 arm64v8/nginx:stable
# 拉取 MySQL 8 	ARM 镜像
docker pull --platform linux/arm64 arm64v8/mysql:8.0
# 备选方案:如果 MySQL 8 跑不起来,用这个
docker pull --platform linux/arm64 mariadb:10.6


# 2. 检查一下镜像 ID,确认架构是否正确
# 看到 Architecture: arm64 就对了
docker inspect redis:6.2 | findstr /i "Architecture"
docker inspect arm64v8/nginx:stable | findstr /i "Architecture"
docker inspect arm64v8/mysql:8.0 | findstr /i "Architecture"
docker inspect mariadb:10.6 | findstr /i "Architecture"

# 3. 将镜像导出为 tar 包(存到你的 光盘 里)
#docker save -o redis_arm64.tar redis:6.2 ## 我这里报错 使用下面的export导出
docker save -o nginx_arm64.tar arm64v8/nginx:stable
docker save -o mysql8_arm64.tar arm64v8/mysql:8.0
# MySQL备选方案
#docker save -o mariadb_arm64.tar mariadb:10.6 ## 我这里报错 使用下面的export导出

如果导出报错

shell
## redis
# 1. 创建一个名为 temp_redis 的临时容器(指定平台为 arm64,不要启动)
docker create --name temp_redis --platform linux/arm64 redis:6.2
# 2. 将容器的文件系统导出为 tar 包
docker export -o redis_arm64.tar temp_redis
# 3. 删除临时容器
docker rm temp_redis

## nginx 上面已经成功了 这里不需要导了
## 1. 创建一个名为 temp_nginx 的临时容器(指定平台为 arm64,不要启动)
#docker create --name temp_nginx --platform linux/arm64 arm64v8/nginx:stable
## 2. 将容器的文件系统导出为 tar 包
#docker export -o nginx_arm64.tar temp_nginx
## 3. 删除临时容器
#docker rm temp_nginx


# 1. 创建一个名为 temp-db 的临时容器(不启动)
docker create --name temp-db --platform linux/arm64 mariadb:10.6
# 2. 尝试再次 save
docker save -o mariadb_arm64.tar mariadb:10.6
# 3. 如果成功了,删掉临时容器
docker rm temp-db
###4. (如果 save 彻底失效)上面还是失败,使用 docker export
docker create --name temp-db --platform linux/arm64 mariadb:10.6
docker export -o mariadb_arm64_export.tar temp-db
docker rm temp-db


########################
#更新 `docker-compose.yml`
version: '3.8'

services:
  redis:
    image: redis:6.2
    container_name: redis_service
    restart: always
    network_mode: host
    # 手动指定启动命令,因为 import 进来的镜像没有默认命令
    entrypoint: ["redis-server"]
    command: ["--requirepass", "你的密码", "--appendonly", "yes"]
    volumes:
      - ./redis_data:/data
      
 # 3. Redis (由 docker export 导出,必须手动指定运行命令)
  redis:
    image: redis:6.2
    container_name: redis
    restart: always
    network_mode: host
    # 关键:因为是 export 导入的,必须手动补上启动命令
    entrypoint: ["redis-server"]
    command: ["--requirepass", "your_redis_password", "--appendonly", "yes"]
    volumes:
      - ./redis_data:/data

离线统信系统导入

shell
# 对于 save 导出的镜像 (Nginx, MySQL)
sudo docker load -i nginx_arm64.tar
sudo docker load -i mysql8_arm64.tar
# 找回名字 (假设 ID 还是 89defed21146) 我这里实际没有这样操作
#docker tag 89defed21146 nginx:stable
#docker tag 17f8c1d33450 mysql:8.0


# 对于 export 导出的镜像 (Redis)
cat redis_arm64.tar | sudo docker import - redis:6.2






# 使用 import 导入,并贴上标签
#cat redis_arm64.tar | docker import - redis:6.2
# 对于 export 导出的镜像 如果 不是save导出的
# 导入 Nginx
#cat nginx_arm64.tar | docker import - nginx:stable
# 导入 MariaDB
#cat mariadb_arm64.tar | docker import - mariadb:10.6

为什么 docker save 总报错?

这是因为 Docker Desktop 的新版存储引擎(containerd integration)在处理非本地架构镜像的索引时存在同步问题。

export 相当于直接“剥皮取肉”,虽然丢掉了镜像的历史层信息,但对于你离线部署运行程序来说完全足够了。

nginx捞出默认配置

shell
# 1. 停止当前的 Compose(防止占用)
sudo docker-compose down

# 2. 临时启动一个纯净的 Nginx 容器(不要挂载,直接跑)
sudo docker run -d --name temp_n nginx:stable

# 3. 将容器里原本的 html 文件拷贝到你的宿主机目录下
sudo docker cp temp_n:/usr/share/nginx/html/. ./html/

# 4. 将容器里的默认配置也捞出来(如果你也挂载了 conf.d)
sudo docker cp temp_n:/etc/nginx/conf.d/. ./conf.d/

# 5. 删掉临时容器
sudo docker rm -f temp_n

# 6. 重新启动你的 Compose
sudo docker-compose up -d





# 给 html 目录读权限,给 logs 目录写权限
sudo chmod -R 755 ./html
sudo chmod -R 755 ./conf.d
sudo chmod -R 777 ./logs

启动容器

yaml
nginx