# Cognio Docker 镜像构建脚本 - 国内构建详解 本脚本用于在远程 Linux 服务器上构建并推送 Cognio 的多架构 Docker 镜像,针对国内网络环境做了全面优化。 ## 文件说明 | 文件 | 说明 | |------|------| | `buildDockerImage_u24_docker.bat` | Windows 批处理入口,调用 PowerShell 脚本 | | `buildDockerImage_u24_docker.ps1` | 主脚本,包含所有构建逻辑 | ## 使用方法 ### 基本用法 双击 `buildDockerImage_u24_docker.bat` 或在命令行执行: ```cmd buildDockerImage_u24_docker.bat ``` ### 命令行参数 ```cmd buildDockerImage_u24_docker.bat [用户名] [主机地址] [SSH端口] ``` ### 镜像标签输入 运行后会提示输入镜像标签: - **留空**: 仅推送 `latest` 标签 - **输入标签**: 如 `v1.0 beta`,将推送 `latest`、`v1.0`、`beta` - **-l 参数**: 排除 `latest`,如 `-l v1.0` 仅推送 `v1.0` ## 处理流程 ``` ┌─────────────────────────────────────────────────────────────┐ │ 本地 Windows │ ├─────────────────────────────────────────────────────────────┤ │ 1. 读取配置(远程服务器、Git仓库、Docker镜像名) │ │ 2. 提示用户输入镜像标签 │ │ 3. 随机选择 Docker 镜像加速源 │ │ 4. 生成远程执行的 Shell 脚本 │ │ 5. 将脚本转为 Base64 编码 │ │ 6. 通过 SSH 发送到远程服务器的 tmux 会话 │ └─────────────────────────────────────────────────────────────┘ │ ▼ SSH ┌─────────────────────────────────────────────────────────────┐ │ 远程 Linux 服务器 │ ├─────────────────────────────────────────────────────────────┤ │ 7. 在 tmux 会话中解码 Base64 并写入 /tmp/build_cognio.sh │ │ 8. 执行构建脚本: │ │ a. 克隆/更新 Git 仓库 │ │ b. 修改 Dockerfile(详见下方"国内加速优化") │ │ c. 使用 docker buildx 构建多架构镜像 │ │ d. 推送到 Docker Hub │ └─────────────────────────────────────────────────────────────┘ ``` ## 配置项 脚本顶部的配置区可修改: ```powershell # 远程服务器配置 $remoteUser = "root" $remoteHost = "192.168.1.99" $remotePort = "22" # Git 仓库配置 $repoUrl = "http://ds:39418/AI/Cognio" $repoDir = "Cognio" # Docker 镜像配置 $imageName = "amwpfiqvy/cognio" # tmux 会话名 $tmuxSession = "dbx" ``` ## 国内加速优化 脚本会自动修改 Dockerfile,应用以下四项国内加速: ### 1. Docker 基础镜像加速 随机使用以下加速源之一拉取基础镜像: | 加速源 | 地址 | |--------|------| | 1Panel | `docker.1panel.live` | | Rat.dev | `hub.rat.dev` | | DaoCloud | `docker.m.daocloud.io` | **实现方式**:在 Dockerfile 开头插入 `ARG DOCKER_MIRROR`,并修改 `FROM` 指令使用镜像源。 ### 2. APT 源加速(阿里云) 将 Debian/Ubuntu 的 apt 源替换为阿里云镜像: ``` http://deb.debian.org → https://mirrors.aliyun.com ``` **实现方式**:在 `FROM` 行后插入 `RUN sed` 命令,兼容新版 `debian.sources` 和旧版 `sources.list`。 ### 3. PyPI 源加速(阿里云) 将所有 `pip install` 命令替换为使用阿里云 PyPI 镜像: ```bash # 原始命令 pip install package # 替换后 pip install -i https://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com package ``` **实现方式**:使用 `sed` 全局替换 Dockerfile 中的 `pip install`。 ### 4. Poetry 源加速(阿里云) 通过创建全局 pip 配置文件,让 Poetry 底层下载包时也使用阿里云源: ```bash # 在 Dockerfile 中插入 RUN mkdir -p /root/.config/pip && printf "[global]\nindex-url = https://mirrors.aliyun.com/pypi/simple/\ntrusted-host = mirrors.aliyun.com\n" > /root/.config/pip/pip.conf ``` **实现方式**:在 `FROM` 行后插入创建 pip 配置文件的 `RUN` 命令。 ## Dockerfile 修改示例 原始 Dockerfile: ```dockerfile FROM python:3.11-slim RUN apt-get update && apt-get install -y gcc RUN pip install poetry==1.7.1 RUN poetry install ``` 修改后: ```dockerfile ARG DOCKER_MIRROR=docker.io FROM ${DOCKER_MIRROR}/library/python:3.11-slim RUN mkdir -p /root/.config/pip && printf "[global]\nindex-url = https://mirrors.aliyun.com/pypi/simple/\ntrusted-host = mirrors.aliyun.com\n" > /root/.config/pip/pip.conf RUN sed -i "s|http://deb.debian.org|https://mirrors.aliyun.com|g" /etc/apt/sources.list.d/debian.sources 2>/dev/null || true RUN apt-get update && apt-get install -y gcc RUN pip install -i https://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com poetry==1.7.1 RUN poetry install ``` ## 查看构建进度 命令发送后,使用以下命令连接到远程 tmux 会话查看进度: ```bash ssh -t -p 22 root@192.168.1.99 "tmux attach -t dbx" ``` ## 构建产物 - **目标架构**: `linux/amd64`, `linux/arm64` - **推送目标**: Docker Hub (`amwpfiqvy/cognio`) - **缓存位置**: 远程服务器 `$HOME/.buildx-cache`