Spaces:
Configuration error
Configuration error
# Docker镜像构建脚本 | |
set -e | |
echo "🐳 Docker镜像构建脚本" | |
echo "====================" | |
echo | |
# 检查Docker是否安装 | |
if ! command -v docker &> /dev/null; then | |
echo "❌ 错误: Docker未安装" | |
echo "请先安装Docker: https://docs.docker.com/engine/install/" | |
exit 1 | |
fi | |
# 检查Docker服务是否运行 | |
if ! docker info &> /dev/null; then | |
echo "❌ 错误: Docker服务未运行" | |
echo "请启动Docker服务: sudo systemctl start docker" | |
exit 1 | |
fi | |
echo "✅ Docker环境检查通过" | |
echo | |
# 设置镜像标签 | |
IMAGE_TAG=${1:-latest} | |
REGISTRY=${2:-""} | |
if [ -n "$REGISTRY" ]; then | |
FULL_TAG="$REGISTRY/chatapp:$IMAGE_TAG" | |
else | |
FULL_TAG="chatapp:$IMAGE_TAG" | |
fi | |
echo "📦 构建配置:" | |
echo " 镜像标签: $FULL_TAG" | |
echo " 构建上下文: $(pwd)" | |
echo | |
# 选择构建方式 | |
echo "请选择构建方式:" | |
echo "1) 多容器构建 (推荐)" | |
echo "2) 单容器构建" | |
echo "3) 仅构建前端" | |
echo "4) 仅构建后端" | |
echo | |
read -p "请输入选择 (1-4): " choice | |
case $choice in | |
1) | |
echo "🔨 构建多容器版本..." | |
# 构建前端镜像 | |
echo "📦 构建前端镜像..." | |
docker build -t "${FULL_TAG}-frontend" ./client | |
# 构建后端镜像 | |
echo "📦 构建后端镜像..." | |
docker build -t "${FULL_TAG}-backend" ./server | |
echo "✅ 多容器镜像构建完成" | |
echo " 前端镜像: ${FULL_TAG}-frontend" | |
echo " 后端镜像: ${FULL_TAG}-backend" | |
;; | |
2) | |
echo "🔨 构建单容器版本..." | |
docker build -t "$FULL_TAG" . | |
echo "✅ 单容器镜像构建完成: $FULL_TAG" | |
;; | |
3) | |
echo "🔨 构建前端镜像..." | |
docker build -t "${FULL_TAG}-frontend" ./client | |
echo "✅ 前端镜像构建完成: ${FULL_TAG}-frontend" | |
;; | |
4) | |
echo "🔨 构建后端镜像..." | |
docker build -t "${FULL_TAG}-backend" ./server | |
echo "✅ 后端镜像构建完成: ${FULL_TAG}-backend" | |
;; | |
*) | |
echo "❌ 无效选择" | |
exit 1 | |
;; | |
esac | |
echo | |
# 显示构建的镜像 | |
echo "📋 构建的镜像:" | |
docker images | grep chatapp | |
echo | |
# 询问是否推送到仓库 | |
if [ -n "$REGISTRY" ]; then | |
read -p "是否推送镜像到仓库? (y/N): " push_choice | |
if [[ $push_choice =~ ^[Yy]$ ]]; then | |
echo "📤 推送镜像到仓库..." | |
case $choice in | |
1) | |
docker push "${FULL_TAG}-frontend" | |
docker push "${FULL_TAG}-backend" | |
;; | |
2) | |
docker push "$FULL_TAG" | |
;; | |
3) | |
docker push "${FULL_TAG}-frontend" | |
;; | |
4) | |
docker push "${FULL_TAG}-backend" | |
;; | |
esac | |
echo "✅ 镜像推送完成" | |
fi | |
fi | |
# 询问是否运行测试 | |
read -p "是否运行容器测试? (y/N): " test_choice | |
if [[ $test_choice =~ ^[Yy]$ ]]; then | |
echo "🧪 运行容器测试..." | |
case $choice in | |
1) | |
echo "启动多容器测试环境..." | |
docker-compose up -d | |
sleep 30 | |
./test.sh | |
docker-compose down | |
;; | |
2) | |
echo "启动单容器测试环境..." | |
docker-compose -f docker-compose.single.yml up -d | |
sleep 30 | |
./test.sh | |
docker-compose -f docker-compose.single.yml down | |
;; | |
3|4) | |
echo "⚠️ 单独的前端或后端镜像需要完整环境才能测试" | |
;; | |
esac | |
fi | |
echo | |
echo "🎉 构建完成!" | |
echo | |
echo "💡 使用提示:" | |
echo " - 查看镜像: docker images | grep chatapp" | |
echo " - 运行容器: docker run -p 3000:80 $FULL_TAG" | |
echo " - 清理镜像: docker rmi $FULL_TAG" | |
echo | |
echo "📚 更多命令:" | |
echo " - make build # 使用Makefile构建" | |
echo " - make start # 启动应用" | |
echo " - make test # 运行测试" | |