浏览代码

build(deploy): 重构 Docker构建过程并添加新服务- 更新 docker-compose.yml,添加 api-server 和 task-server 服务
- 修改 Dockerfile,增加 APP_NAME 和 APP_RELATIVE_PATH 参数
-优化 Dockerfile 以支持构建不同应用
- 更新构建示例和运行测试示例

fusu 3 月之前
父节点
当前提交
3232d2a5bd
共有 2 个文件被更改,包括 50 次插入3 次删除
  1. 16 3
      deploy/build/Dockerfile
  2. 34 0
      deploy/docker-compose/docker-compose.yml

+ 16 - 3
deploy/build/Dockerfile

@@ -2,13 +2,16 @@ ARG REGISTRY=docker.io
 FROM ${REGISTRY}/golang:1.24-alpine AS builder
 RUN set -eux && sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories
 
+# 定义应用路径参数,用于指定构建的入口文件路径
 ARG APP_RELATIVE_PATH
+# 定义应用名称参数,用于指定输出的二进制文件名
+ARG APP_NAME=app
 
 COPY .. /data/app
 WORKDIR /data/app
 
 RUN mkdir -p /data/app/bin/
-RUN export GOPROXY=https://goproxy.cn,direct && go mod tidy && go build -ldflags="-s -w" -o ./bin/app ./cmd/server/main.go
+RUN export GOPROXY=https://goproxy.cn,direct && go mod tidy && go build -ldflags="-s -w" -o ./bin/${APP_NAME} ${APP_RELATIVE_PATH}
 RUN mv config /data/app/bin/
 
 
@@ -23,12 +26,22 @@ RUN apk add tzdata && cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
 
 ARG APP_ENV
 ENV APP_ENV=${APP_ENV}
+# 传递应用名称到运行环境
+ARG APP_NAME=app
+ENV APP_NAME=${APP_NAME}
 
 WORKDIR /data/app
 COPY --from=builder /data/app/bin /data/app
 
+# 仅对server应用暴露端口
 EXPOSE 8000
-ENTRYPOINT [ "./app" ]
+ENTRYPOINT [ "./${APP_NAME}" ]
 
-#docker build -t  1.1.1.1:5000/demo-api:v1 --build-arg APP_CONF=config/prod.yml --build-arg  APP_RELATIVE_PATH=./cmd/server/...  .
+# 构建server应用示例
+#docker build -t 1.1.1.1:5000/demo-api:v1 --build-arg APP_NAME=app --build-arg APP_RELATIVE_PATH=./cmd/server/main.go .
+
+# 构建task应用示例
+#docker build -t 1.1.1.1:5000/demo-task:v1 --build-arg APP_NAME=task --build-arg APP_RELATIVE_PATH=./cmd/task/main.go .
+
+# 运行容器测试示例
 #docker run -it --rm --entrypoint=ash 1.1.1.1:5000/demo-api:v1

+ 34 - 0
deploy/docker-compose/docker-compose.yml

@@ -23,3 +23,37 @@ services:
     ports:
       - 6350:6379
     command: ["redis-server","/etc/redis/redis.conf"]
+  
+  # API服务器
+  api-server:
+    build:
+      context: ../../
+      dockerfile: deploy/build/Dockerfile
+      args:
+        - APP_NAME=app
+        - APP_RELATIVE_PATH=./cmd/server/main.go
+        - APP_ENV=prod
+    image: nunu-api:latest
+    container_name: nunu-api
+    ports:
+      - 8000:8000
+    depends_on:
+      - user-db
+      - cache-redis
+    restart: always
+
+  # 任务服务
+  task-server:
+    build:
+      context: ../../
+      dockerfile: deploy/build/Dockerfile
+      args:
+        - APP_NAME=task
+        - APP_RELATIVE_PATH=./cmd/task/main.go
+        - APP_ENV=prod
+    image: nunu-task:latest
+    container_name: nunu-task
+    depends_on:
+      - user-db
+      - cache-redis
+    restart: always