Spring Boot Admin + Docker 部署服务

项目结构

项目地址:GitHub

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

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

阿里云镜像文档

Spring Boot Admin Reference Guide
Spring Boot Admin入门指南
SpringBoot 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 需要依赖插件

插件


       org.codehaus.mojo
       versions-maven-plugin
       2.7
       
              false
       

文件内容

#!/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 部署服务)