feat(scripts): 添加 APT 缓存预装功能解决离线构建问题

- 新增 APT 缓存目录和相关构建脚本 export-cache.sh
- 添加 build-base-images.sh 脚本用于构建预装 APT 包的基础镜像
- 增加 build-offline-final.sh 最终版离线构建脚本
- 更新 Makefile.offline.mk 添加新的离线构建目标
- 扩展 README.md 文档详细说明 APT 缓存问题解决方案
- 为多个服务添加使用预装基础镜像的离线 Dockerfile
- 修改打包脚本包含 APT 缓存到最终压缩包中
This commit is contained in:
2026-02-03 13:16:12 +08:00
parent 31629ab50b
commit da5b18e423
10 changed files with 794 additions and 31 deletions

View File

@@ -8,6 +8,7 @@ OUTPUT_DIR="${1:-./build-cache}"
BUILDKIT_CACHE_DIR="$OUTPUT_DIR/buildkit"
IMAGES_DIR="$OUTPUT_DIR/images"
RESOURCES_DIR="$OUTPUT_DIR/resources"
APT_CACHE_DIR="$OUTPUT_DIR/apt-cache"
# 确保 buildx 构建器存在
if ! docker buildx inspect offline-builder > /dev/null 2>&1; then
@@ -17,7 +18,7 @@ else
docker buildx use offline-builder
fi
mkdir -p "$BUILDKIT_CACHE_DIR" "$IMAGES_DIR" "$RESOURCES_DIR"
mkdir -p "$BUILDKIT_CACHE_DIR" "$IMAGES_DIR" "$RESOURCES_DIR" "$APT_CACHE_DIR"
echo "======================================"
echo "1. 导出基础镜像"
@@ -117,11 +118,42 @@ fi
echo ""
echo "======================================"
echo "4. 打包缓存"
echo "4. 导出 APT 缓存"
echo "======================================"
# 为需要 apt 的镜像预生成 apt 缓存
echo "生成 APT list 缓存..."
# eclipse-temurin:21-jdk 的 apt 缓存
docker run --rm \
-v "$APT_CACHE_DIR/eclipse-temurin:/var/cache/apt/archives" \
-v "$APT_CACHE_DIR/eclipse-temurin-lists:/var/lib/apt/lists" \
eclipse-temurin:21-jdk \
bash -c "apt-get update && apt-get install -y --download-only vim wget curl rsync python3 python3-pip python-is-python3 dos2unix libreoffice fonts-noto-cjk 2>/dev/null || true" 2>/dev/null || echo " Warning: eclipse-temurin apt 缓存导出失败"
# python:3.12-slim 的 apt 缓存
docker run --rm \
-v "$APT_CACHE_DIR/python312:/var/cache/apt/archives" \
-v "$APT_CACHE_DIR/python312-lists:/var/lib/apt/lists" \
python:3.12-slim \
bash -c "apt-get update && apt-get install -y --download-only vim openjdk-21-jre nfs-common glusterfs-client rsync 2>/dev/null || true" 2>/dev/null || echo " Warning: python3.12 apt 缓存导出失败"
# python:3.11-slim 的 apt 缓存
docker run --rm \
-v "$APT_CACHE_DIR/python311:/var/cache/apt/archives" \
-v "$APT_CACHE_DIR/python311-lists:/var/lib/apt/lists" \
python:3.11-slim \
bash -c "apt-get update && apt-get install -y --download-only curl vim libgl1 libglx0 libopengl0 libglib2.0-0 procps 2>/dev/null || true" 2>/dev/null || echo " Warning: python3.11 apt 缓存导出失败"
echo "✓ APT 缓存导出完成"
echo ""
echo "======================================"
echo "5. 打包缓存"
echo "======================================"
cd "$OUTPUT_DIR"
tar -czf "build-cache-$(date +%Y%m%d).tar.gz" buildkit images resources
tar -czf "build-cache-$(date +%Y%m%d).tar.gz" buildkit images resources apt-cache
cd - > /dev/null
echo ""
@@ -131,4 +163,10 @@ echo "======================================"
echo "缓存位置: $OUTPUT_DIR"
echo "传输文件: $OUTPUT_DIR/build-cache-$(date +%Y%m%d).tar.gz"
echo ""
echo "包含内容:"
echo " - 基础镜像 (images/)"
echo " - BuildKit 缓存 (buildkit/)"
echo " - 外部资源 (resources/)"
echo " - APT 缓存 (apt-cache/)"
echo ""
echo "请将此压缩包传输到无网环境后解压使用"