jenkins部署springboot多模块项目至docker容器运行

docker安装jenkins,war包安装jenkins

jenkins远程ssh部署项目至tomcat

jenkins下载Git Parameter插件
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
clean package -U -pl ${module} -am -Dmaven.test.skip=true

至此git分支、maven子模块可选的项目已经可以编译成功

Dockerfile文件

# 基于哪个镜像
FROM openjdk:8-jdk-alpine
# 挂载目录
VOLUME /tmp
# 复制文件到容器
ADD xxx.jar /app.jar
# 声明需要暴露的端口
EXPOSE 8012
# JVM监控端口
EXPOSE 1099
# 配置容器启动后执行的命令
ENTRYPOINT exec java $JAVA_OPTS -Duser.timezone=GMT+8 -Djava.security.egd=file:/dev/./urandom -jar /app.jar

shell脚本

echo "---- start docker build ----"

docker_start(){

# 定义变量
API_VERSION="0.0.1"
module_path=$1
API_NAME=$2
API_PORT=$3
JAVA_OPTS=$4


# 镜像名称(以日期时间为镜像标签,防止重复)
IMAGE_NAME=$API_NAME":"$(date "+%Y%m%d-%H%M%S")
CONTAINER_NAME=$API_NAME-$API_VERSION

# 进入target目录并复制Dockerfile文件
cd $WORKSPACE/$module_path/target
cp classes/Dockerfile .

# 删除Docker容器
cid=$(docker ps -a | grep $CONTAINER_NAME |awk '{print $1}')
if [ x"$cid" != x ]
    then
    docker rm -f $cid
fi

# 删除Docker镜像
imgid=$(docker images | grep $API_NAME |awk '{print $3}')
if [ x"$imgid" != x ]
    then
    docker rmi $imgid
fi

# 构建Docker镜像
docker build -t $IMAGE_NAME .

# 推送Docker镜像
#docker push $IMAGE_NAME

# 启动Docker容器
docker run -d -p $API_PORT:$API_PORT -p 1099:1099 --restart=always \
-e nacos.addr=xxx:8848 \
-e nacos.discovery.group=xxx \
-e nacos.config.group=xxx \
-e nacos.namespace=xxx \
-e JAVA_OPTS="$JAVA_OPTS" \
--init --name $CONTAINER_NAME $IMAGE_NAME

# 删除Dockerfile文件
rm -f Dockerfile

}


docker_start service/order order 8080 \
"-Djava.rmi.server.hostname=192.168.2.33 -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.rmi.port=1099 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Xmx3g -Xms3g -XX:+UseG1GC -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC -Xloggc:/tmp/logs/gc.log"

echo "---- docker build success ----"



-Djava.rmi.server.hostname=192.168.19.114 ---------------- 192.168.19.114为tomcat所在机器的ip地址。
-Dcom.sun.management.jmxremote ----------------- 开启jmx,jdk1.5之前还要手动开启,现在已经默认开启了,所以可以省略
-Dcom.sun.management.jmxremote.port=9998 -------------------jmx的端口
-Dcom.sun.management.jmxremote.authenticate=false ---------------- 不开启验证
jvm远程监控参数

-Xmx3g -Xms3g -XX:+UseG1GC -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC -Xloggc:/tmp/logs/gc.log
jvm参数

-Dcom.sun.management.jmxremote.ssl=false ----------------------不开启ssl通信

Dockerfile文件编译成docker镜像
docker-compose.yml文件编译一组容器

编写docker-compose.yml文件,使用docker-compose up -d运行

version: '3'

services:
  product-service:
    image: product-service:latest

  customer-service:
    image: customer-service:latest
    links:
      - product-service
  gateway-service:
    image: gateway-service:latest
    ports:
      - 8080:8080
    links:
      - product-service
      - customer-service

version 1 2 3语法格式不同

shell脚本docker run应该使用docker-compose.yml进行容器编排

– link 容器与容器间访问

如果出错,可以观察容器的logs,docker logs 观察日志情况

apt-get update更新apt服务

apt-get install net-tools 安装netstat服务

netstat -na|grep 8099监听8099端口

telnet ip port 测试连接是否成功


版权声明:本文为sunlihuo原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。