Files
massive-cloud/scripts/snapshot-app-dev-image.sh

52 lines
2.1 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
# 将当前运行的 massive-point-cloud-app-dev 容器固化为镜像,避免下次从 Dockerfile 全量重建。
#
# 限制(必读):
# - 绑定挂载 .:/app 下的代码改动在 commit 时不会打进镜像(运行时仍用宿主机目录)。
# - app-node-modules 是命名卷,commit 不会包含 node_modules;勿对 app 执行 docker compose down -v,
# 否则需重新 pnpm install(卷在则依赖仍在)。
# - 在容器内装到 /usr、/usr/local 等的 apt/pip 等会随 commit 保留。
#
# 用法:
# chmod +x scripts/snapshot-app-dev-image.sh
# ./scripts/snapshot-app-dev-image.sh # 标签 massive-point-cloud-app-dev:frozen-YYYYMMDD
# ./scripts/snapshot-app-dev-image.sh mytag # 标签 massive-point-cloud-app-dev:mytag
# ./scripts/snapshot-app-dev-image.sh mytag ./app-dev-snapshot.tar # 同时 docker save 到文件便于备份/迁移
set -euo pipefail
CONTAINER_NAME="${CONTAINER_NAME:-massive-point-cloud-app-dev}"
IMAGE_BASENAME="${IMAGE_BASENAME:-massive-point-cloud-app-dev}"
TAG="${1:-frozen-$(date +%Y%m%d)}"
SAVE_PATH="${2:-}"
if ! docker inspect "$CONTAINER_NAME" &>/dev/null; then
echo "错误: 找不到容器 $CONTAINER_NAME ,请先启动: docker compose -f docker-compose.dev.yml up -d app" >&2
exit 1
fi
FULL_IMAGE="${IMAGE_BASENAME}:${TAG}"
echo "正在提交容器 $CONTAINER_NAME -> $FULL_IMAGE"
docker commit "$CONTAINER_NAME" "$FULL_IMAGE"
echo "已生成镜像: $FULL_IMAGE"
if [[ -n "$SAVE_PATH" ]]; then
echo "正在导出: docker save -o $SAVE_PATH $FULL_IMAGE"
docker save -o "$SAVE_PATH" "$FULL_IMAGE"
echo "已保存: $SAVE_PATH"
fi
cat <<EOF
后续用固化镜像启动(跳过 Dockerfile 构建):
export MASSIVE_APP_DEV_IMAGE=$FULL_IMAGE
docker compose -f docker-compose.dev.yml -f docker-compose.gpu.yml up -d --no-build
若不用 GPU 覆盖文件,可去掉 -f docker-compose.gpu.yml 。
勿使用 --build ,否则会按 Dockerfile 重新构建并覆盖本地 tag 的构建结果。
如需长期默认使用该镜像,可在项目根目录 .env 中写入一行:
MASSIVE_APP_DEV_IMAGE=$FULL_IMAGE
EOF