Browse Source

更新/添加 docker 构建和运行相关的脚本

reghao 4 weeks ago
parent
commit
6bcc3d7317
6 changed files with 134 additions and 27 deletions
  1. 50 3
      Dockerfile
  2. 44 3
      Dockerfile.agent
  3. 24 0
      docker-compose-agent.yml
  4. 8 4
      docker-compose.yml
  5. 2 2
      docker-run-agent.sh
  6. 6 15
      docker-run.sh

+ 50 - 3
Dockerfile

@@ -1,11 +1,58 @@
-FROM eclipse-temurin:17-jdk
+# --- 第一阶段:构建阶段 ---
+FROM registry.cn-chengdu.aliyuncs.com/azysrv/maven:3.9.6-eclipse-temurin-21 AS builder
 
 WORKDIR /app
 
-RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
+# 创建并写入阿里云镜像配置到容器的 settings.xml
+RUN mkdir -p /root/.m2 && \
+    echo '<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" \
+      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" \
+      xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd"> \
+      <mirrors> \
+        <mirror> \
+          <id>aliyunmaven</id> \
+          <mirrorOf>external:*,!jitpack.io</mirrorOf> \
+          <name>Aliyun Maven</name> \
+          <url>https://maven.aliyun.com/repository/public</url> \
+        </mirror> \
+      </mirrors> \
+    </settings>' > /root/.m2/settings.xml
+
+# 1. 复制所有 pom.xml
+COPY pom.xml .
+COPY common/pom.xml common/
+COPY agent/pom.xml agent/
+COPY mgr/pom.xml mgr/
+
+# 2. 【关键】利用 go-offline 提前下载并缓存所有依赖
+# 这一步会根据上面的 pom.xml 下载依赖。只要 pom 不变,这一层永远使用缓存
+#RUN mvn dependency:go-offline -B
+RUN mvn clean compile -DskipTests
+
+# 3. 复制源代码(此时代码变动,只会触发从这里开始的层,前面的依赖层已缓存)
+COPY common/ common/
+COPY mgr/ mgr/
+COPY bin/mgr bin/mgr
+
+# 4. 执行构建
+RUN mvn clean install -DskipTests -pl common -am
+RUN mvn clean package -DskipTests -pl mgr -am
+
+# --- 第二阶段:运行阶段 ---
+FROM registry.cn-chengdu.aliyuncs.com/azysrv/eclipse-temurin:21-jre-alpine
 
-COPY bin/mgr/ /app/
+WORKDIR /app
+
+# 从构建阶段复制打包好的 JAR
+# 假设你的打包命名是 mgr-1.0-SNAPSHOT.jar,请根据实际情况调整
+COPY --from=builder /app/bin/mgr /app
+
+# 暴露端口(根据 mgr 实际端口修改)
+EXPOSE 4030
+
+RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
 
+# 启动命令
 ENV JAVA_OPTS="-Xms2g -Xmx4g -XX:+UseG1GC"
 
 ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar ops-mgr.jar --spring.config.location=classpath:/application.yml,file:/app/mgr.yml"]

+ 44 - 3
Dockerfile.agent

@@ -1,13 +1,54 @@
-FROM eclipse-temurin:17-jdk
+# --- 第一阶段:构建阶段 ---
+FROM registry.cn-chengdu.aliyuncs.com/azysrv/maven:3.9.6-eclipse-temurin-21 AS builder
 
 WORKDIR /app
 
+# 创建并写入阿里云镜像配置到容器的 settings.xml
+RUN mkdir -p /root/.m2 && \
+    echo '<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" \
+      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" \
+      xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd"> \
+      <mirrors> \
+        <mirror> \
+          <id>aliyunmaven</id> \
+          <mirrorOf>external:*,!jitpack.io</mirrorOf> \
+          <name>Aliyun Maven</name> \
+          <url>https://maven.aliyun.com/repository/public</url> \
+        </mirror> \
+      </mirrors> \
+    </settings>' > /root/.m2/settings.xml
+
+# 1. 复制所有 pom.xml
+COPY pom.xml .
+COPY common/pom.xml common/
+COPY agent/pom.xml agent/
+COPY mgr/pom.xml mgr/
+
+# 2. 【关键】利用 go-offline 提前下载并缓存所有依赖
+# 这一步会根据上面的 pom.xml 下载依赖。只要 pom 不变,这一层永远使用缓存
+#RUN mvn dependency:go-offline -B
+RUN mvn clean compile -DskipTests
+
+# 3. 复制源代码(此时代码变动,只会触发从这里开始的层,前面的依赖层已缓存)
+COPY common/ common/
+COPY agent/ agent/
+COPY bin/agent bin/agent
+
+# 4. 执行构建
+RUN mvn clean install -DskipTests -pl common -am
+RUN mvn clean package -DskipTests -pl agent -am
+
+# --- 第二阶段:运行阶段 ---
+FROM registry.cn-chengdu.aliyuncs.com/azysrv/eclipse-temurin:21-jre-alpine
+
+WORKDIR /app
+
+COPY --from=builder /app/bin/agent /app
+
 RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
 
 COPY bin/agent/ /app/
 
 ENV JAVA_OPTS="-Xms64m -Xmx128m -XX:+UseSerialGC -XX:MaxMetaspaceSize=64m"
 
-RUN ls /app
-
 ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar ops-agent.jar agent.json"]

+ 24 - 0
docker-compose-agent.yml

@@ -0,0 +1,24 @@
+services:
+  ops-agent:
+    image: ops-agent:12345678
+    container_name: ops-agent
+    restart: always
+    network_mode: host
+    environment:
+      - WS_URL=ws://127.0.0.1:4030
+    volumes:
+      - /etc/localtime:/etc/localtime:ro
+      - /etc/machine-id:/etc/machine-id:ro
+      - /var/run/docker.sock:/var/run/docker.sock
+    deploy:
+      resources:
+        limits:
+          cpus: '1.0'
+          memory: 128MB
+        reservations:
+          memory: 64MB
+    logging:
+      driver: "json-file"
+      options:
+        max-size: "10m"
+        max-file: "3"

+ 8 - 4
docker-compose.yml

@@ -1,16 +1,20 @@
 services:
   ops-mgr:
-    image: registry.cn-chengdu.aliyuncs.com/tnb028/ops-mgr:12345678
+    image: ops-mgr:12345678
+    container_name: ops-mgr
+    restart: always
+    network_mode: host
     environment:
       - SPRING_DATASOURCE_URL=jdbc:mysql://127.0.0.1/reghao_devops_rdb?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2b8
       - SPRING_DATASOURCE_USERNAME=test
       - SPRING_DATASOURCE_PASSWORD=Test_123456
-      - APP_OPS_ROOT=/opt/data/devops_data1
-      - APP_HOST_ROOT=/opt/data/devops_data2
+      - APP_OPS_ROOT=/opt/data/devops_data
+      - APP_HOST_ROOT=/opt/data/devops_data
     volumes:
       - /etc/localtime:/etc/localtime:ro
+      - /etc/machine-id:/etc/machine-id:ro
       - /var/run/docker.sock:/var/run/docker.sock
-      - /opt/data/devops_data2:/opt/data/devops_data1
+      - /opt/data/devops_data:/opt/data/devops_data
     deploy:
       resources:
         limits:

+ 2 - 2
docker-agent.sh → docker-run-agent.sh

@@ -6,7 +6,7 @@ docker rm ops-agent
 docker run -d \
   --name ops-agent \
   --network=host \
+  -e WS_URL=ws://127.0.0.1:4030 \
+  - /etc/machine-id:/etc/machine-id:ro \
   -v /var/run/docker.sock:/var/run/docker.sock \
-  -v /opt/data/devops_data0:/opt/data/devops_data1 \
-  -u root \
   ops-agent:12345678

+ 6 - 15
docker-run.sh

@@ -3,20 +3,12 @@
 docker stop ops-mgr
 docker rm ops-mgr
 
-#docker run -d \
-#  --name ops-mgr \
-#  --network=host \
-#  -v /var/run/docker.sock:/var/run/docker.sock \
-#  -v /opt/data/devops_data0:/opt/data/devops_data1 \
-#  -u root \
-#  ops-mgr:12345678
-
-db_host='192.168.0.147'
+db_host='127.0.0.1'
 db_port='3306'
 db_name='reghao_devops_rdb'
-db_url='jdbc:mysql://127.0.0.1/reghao_devops_rdb?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2b8'
 db_username='test'
-db_password='Test@123456'
+db_password='Test_123456'
+#db_url='jdbc:mysql://127.0.0.1/reghao_devops_rdb?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2b8'
 
 docker run -d \
   --name ops-mgr \
@@ -24,9 +16,8 @@ docker run -d \
   -e SPRING_DATASOURCE_URL='jdbc:mysql://'${db_host}':'${db_port}'/'${db_name}'?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2b8' \
   -e SPRING_DATASOURCE_USERNAME=${db_username} \
   -e SPRING_DATASOURCE_PASSWORD=${db_password} \
-  -e APP_OPS_ROOT=/opt/data/devops_data1 \
-  -e APP_HOST_ROOT=/opt/data/devops_data2 \
+  -e APP_OPS_ROOT=/opt/data/devops_data \
+  -e APP_HOST_ROOT=/opt/data/devops_data \
   -v /var/run/docker.sock:/var/run/docker.sock \
-  -v /opt/data/devops_data2:/opt/data/devops_data1 \
-  -u root \
+  -v /opt/data/devops_data:/opt/data/devops_data \
   ops-mgr:12345678