
項(xiàng)目地址:GitHub
上面的項(xiàng)目基于 Spring Boot Admin 搭建的簡易監(jiān)控系統(tǒng),包含一個
Admin 服務(wù)項(xiàng)目spring-boot-ops-server,以及兩個客戶端項(xiàng)目spring-boot-ops-client-1、spring-boot-ops-client-2;
通過案例講解如何使用 Docker 部署服務(wù),包括構(gòu)建鏡像、推送鏡像到阿里云、啟動服務(wù)、服務(wù)間通信;
Spring Boot Admin Reference Guide
Spring Boot Admin入門指南
SpringBoot Admin的簡單使用
項(xiàng)目文件說明
- Dockerfile
每個項(xiàng)目的文件
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
改變項(xiàng)目版本的腳步,多模塊項(xiàng)目比較方便;
pom.xml需要依賴插件
插件
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>versions-maven-plugin</artifactId>
<version>2.7</version>
<configuration>
<generateBackupPoms>false</generateBackupPoms>
</configuration>
</plugin>
文件內(nèi)容
#!/bin/bash
#字符顏色顯示
#-e:允許echo使用轉(zhuǎn)義
#\033[:開始位
#\033[0m:結(jié)束位
#\033等同于\e
if [ ! -n "$1" ]; then
echo Please Enter 版本參數(shù)
exit
fi
echo -e "\033[35m[$1]\033[0m Staring... "
echo '+++++++++++++++++++++++++++++++++++++++++++++++++'
echo -e "更新主項(xiàng)目版本 \033[35m[$1]\033[0m Starting... "
mvn versions:set -DnewVersion=$1
echo -e "更新主項(xiàng)目版本 \033[35m[$1]\033[0m Done... "
echo '+++++++++++++++++++++++++++++++++++++++++++++++++'
echo -e "更新子項(xiàng)目版本 \033[35m[$1]\033[0m Starting..."
mvn -N versions:update-child-modules
echo -e "更新子項(xiàng)目版本 \033[35m[$1]\033[0m Done... "
echo '+++++++++++++++++++++++++++++++++++++++++++++++++'
echo -e "更新項(xiàng)目版本 \033[35m[$1]\033[0m 提交... "
mvn versions:commit
echo '+++++++++++++++++++++++++++++++++++++++++++++++++'
echo -e "\033[35m[$1]\033[0m Done... "
執(zhí)行腳步: ./change_version.sh 1.0.0
- build.sh
構(gòu)建項(xiàng)目 docker 鏡像腳步
#!/bin/bash
# $1 是執(zhí)行腳步傳進(jìn)來的變量, 這里表示 項(xiàng)目名
SERVICE_NAME=$1
cd $SERVICE_NAME
# mvn clean install -pl ./$s1/pom.xml
# 打包構(gòu)建
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構(gòu)建鏡像完成\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構(gòu)建鏡像完成\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
主項(xiàng)目 REAMDE.md
以下是文件的內(nèi)容
spring-boot-ops
Spring Boot 運(yùn)維監(jiān)控
- 構(gòu)建項(xiàng)目
./build.sh {項(xiàng)目目錄} [-P]
-P參數(shù)是否把鏡像推送到倉庫
- 啟動
- 創(chuàng)建網(wǎng)絡(luò)
保證多個 Docker 容器可以互通
docker network create -d bridge {net-name}
查看網(wǎng)絡(luò)
docker network ls
- 查看鏡像
docker images
- 啟動容器
docker run -i -t -d -p port:port --name {自定義容器名字} --network {net-name} --network-alias {自定義網(wǎng)絡(luò)別名} 鏡像名字:鏡像標(biāo)簽
自定義容器名字
這個參數(shù)是可以隨便自定義的代表容器名字
net-name
這是在第一步創(chuàng)建的網(wǎng)絡(luò),這是為了保證多個 Docker 容器可以網(wǎng)絡(luò)互通
自定義網(wǎng)絡(luò)別名
這個可以理解為 hostname;可以在其他 Docker 容器內(nèi)直接使用它;
- 啟動例子
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
- 說明
執(zhí)行上面命令后,
spring-boot-ops-client-1容器可以直接使用spring-boot-ops-serve容器的--network-aliasdevops-server-admin;例如: http://devops-server-admin:9090