美文网首页SpringBootDevOps
Spring Boot Admin + Docker 部署服务

Spring Boot Admin + Docker 部署服务

作者: KengG | 来源:发表于2020-05-29 21:12 被阅读0次
    项目结构

    项目地址:GitHub

    上面的项目基于 Spring Boot Admin 搭建的简易监控系统,包含一个 Admin 服务项目 spring-boot-ops-server,以及两个客户端项目 spring-boot-ops-client-1spring-boot-ops-client-2;

    通过案例讲解如何使用 Docker 部署服务,包括构建镜像、推送镜像到阿里云、启动服务、服务间通信;

    阿里云镜像文档

    Spring Boot Admin入门指南

    项目文件说明

    • Dockerfile

    每个项目的文件

    FROM openjdk:8-jdk-alpine
    WORKDIR /app
    COPY target/{package-name}.jar /app/app.jar
    ENTRYPOINT ["sh", "-c", "java -jar app.jar"]
    
    • change-version.sh

    改变项目版本的脚步,多模块项目比较方便;pom.xml 需要依赖插件

    插件

    <plugin>
           <groupId>org.codehaus.mojo</groupId>
           <artifactId>versions-maven-plugin</artifactId>
           <version>2.7</version>
           <configuration>
                  <generateBackupPoms>false</generateBackupPoms>
           </configuration>
    </plugin>
    

    文件内容

    #!/bin/bash
    
    #字符颜色显示
    #-e:允许echo使用转义
    #\033[:开始位
    #\033[0m:结束位
    #\033等同于\e
    
    if [ ! -n "$1" ]; then
        echo Please Enter 版本参数
        exit
    fi
    
    echo -e "\033[35m[$1]\033[0m Staring... "
    
    echo '+++++++++++++++++++++++++++++++++++++++++++++++++'
    
    echo -e "更新主项目版本 \033[35m[$1]\033[0m Starting... "
    mvn versions:set -DnewVersion=$1
    echo -e "更新主项目版本 \033[35m[$1]\033[0m Done... "
    
    echo '+++++++++++++++++++++++++++++++++++++++++++++++++'
    
    echo -e "更新子项目版本 \033[35m[$1]\033[0m Starting..."
    mvn -N versions:update-child-modules
    echo -e "更新子项目版本 \033[35m[$1]\033[0m Done... "
    
    echo '+++++++++++++++++++++++++++++++++++++++++++++++++'
    
    echo -e "更新项目版本 \033[35m[$1]\033[0m 提交... "
    mvn versions:commit
    echo '+++++++++++++++++++++++++++++++++++++++++++++++++'
    
    echo -e "\033[35m[$1]\033[0m Done... "
    

    执行脚步: ./change_version.sh 1.0.0

    • build.sh

    构建项目 docker 镜像脚步

    #!/bin/bash
    
    # $1 是执行脚步传进来的变量, 这里表示 项目名
    SERVICE_NAME=$1
    cd $SERVICE_NAME
    # mvn clean install -pl ./$s1/pom.xml
    # 打包构建
    mvn clean package -Dmaven.test.skip=true
    
    REGISTRY=阿里云镜像地址
    REGISTRY_NAMESPACE=镜像空间
    TAG="$RANDOM"
    
    REPOSITORY=$REGISTRY/$REGISTRY_NAMESPACE/$SERVICE_NAME
    IMAGE=$REPOSITORY:$TAG
    
    docker build --build-arg APP=$SERVICE_NAME -t $IMAGE .
    IMAGE_ID=$(docker images | grep $REPOSITORY | grep $TAG | grep -v grep | awk '{print $3}')
    echo -e "\033[34m构建镜像完成\033[0m: \033[35m$IMAGE_ID\033[0m  \033[35m$IMAGE\033[0m"
    
    # IMAGE_AND_REPOSITORY=$(docker build --build-arg APP=$SERVICE_NAME -t $IMAGE . | tail -n 2 | awk '{print $3}' | xargs echo)
    # echo -e "\033[34m构建镜像完成\033[0m: \033[35m$IMAGE_AND_REPOSITORY\033[0m"
    
    # 是否推送到镜像中心
    PUSH=-P
    
    for i in "$@"; do
      if [ i == "$PUSH" ]; then
        echo -e "推送镜像「$IMAGE」到仓库 Starting..."
        docker push $IMAGE
        echo -e "推送镜像「$IMAGE」到仓库 Done..."
        break
      fi
    done
    

    主项目 REAMDE.md

    以下是文件的内容

    spring-boot-ops

    Spring Boot 运维监控

    • 构建项目

    ./build.sh {项目目录} [-P]

    -P 参数是否把镜像推送到仓库

    • 启动
    1. 创建网络
      保证多个 Docker 容器可以互通
    docker network create -d bridge {net-name}
    

    查看网络

    docker network ls
    
    1. 查看镜像
    docker images
    
    1. 启动容器
    docker run -i -t -d -p port:port --name {自定义容器名字} --network {net-name} --network-alias {自定义网络别名} 镜像名字:镜像标签
    
    • 自定义容器名字

    这个参数是可以随便自定义的代表容器名字

    • net-name

    这是在第一步创建的网络,这是为了保证多个 Docker 容器可以网络互通

    • 自定义网络别名

    这个可以理解为 hostname;可以在其他 Docker 容器内直接使用它;

    1. 启动例子
    docker network create -d bridge dev-ops
    docker run -i -t -d -p port:port --name spring-boot-ops-server --network dev-ops --network-alias devops-server-admin {REGISTRY}/{REGISTRY_NAMESPACE}/{SERVICE_NAME}:{TAG}
    docker run -i -t -d -p 9091:9091 --name spring-boot-ops-client-1 --network dev-ops --network-alias devops-client-1 {REGISTRY}/{REGISTRY_NAMESPACE}/{SERVICE_NAME}:{TAG} 
    

    {REGISTRY}/{REGISTRY_NAMESPACE}/{SERVICE_NAME}:{TAG} 变量请参考 build.sh 脚步文件中的变量; REGISTRY、REGISTRY_NAMESPACE 是阿里云镜像提供

    例如:registry.cn-hangzhou.aliyuncs.com/namespace/spring-boot-ops-server:32642

    1. 说明

    执行上面命令后,spring-boot-ops-client-1容器可以直接使用spring-boot-ops-serve容器的 --network-aliasdevops-server-admin;例如: http://devops-server-admin:9090

    相关文章

      网友评论

        本文标题:Spring Boot Admin + Docker 部署服务

        本文链接:https://www.haomeiwen.com/subject/augfzhtx.html