File size: 4,076 Bytes
24fd742 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 |
#!/bin/bash
# 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 # 运行测试"
|