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 测试连接是否成功