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     # 运行测试"