SpringBoot项目Dockcer镜像构建(非Maven)
SpringBoot项目Dockcer镜像构建
由于项目发展,对快速上线以及对整个上线测试流程的全量更新,保证多环境下版本的一致性,思前想后再加上讨论以后决定对现有的Springboot项目进行容器化改造,选择使用比较老的Docker进行容器构建。
一.构建Springboot的Docker镜像
项目结构如下:
项目启动脚本:
#!/bin/bash
if [ ! -d "logs/" ];then
mkdir logs
fi
nohup java -jar ${JAVA_OPS} fda_auth.jar --server.port=7001 --spring.application.name=amgr-auth --spring.cloud.nacos.config.prefix=amgr-auth ${ENV} >> logs/amgr_auth.log 2>&1 &
nohup java -jar ${JAVA_OPS} fda_tools.jar --server.port=7002 --spring.application.name=fda-tools --spring.cloud.nacos.config.prefix=tools ${ENV} >> logs/fda_tools.log 2>&1 &
nohup java -jar ${JAVA_OPS} fda_gateway.jar --server.port=9999 --spring.application.name=fda-gateway --spring.cloud.nacos.config.prefix=gateway ${ENV} >> logs/fda_gateway.log 2>&1 &
tail -f logs/*.log
启动脚本这里选择的是Springboot的启动脚本,请根据自己的业务需求编写对应的启动脚本
使用Nacos的注册中心需要根据环境不同配置一定的环境参数,因此此处选择$ENV的环境变量配置,至于ENV内容从何而来,下面有介绍
Dockerfile文件
FROM openjdk:8-jdk-alpine
VOLUME /fda_boot
#拷贝项目文件
COPY fda_auth/target/*.jar fda_auth.jar
COPY fda_gateway/target/*.jar fda_gateway.jar
COPY fda_tools/target/*.jar fda_tools.jar
COPY build/start.sh start.sh
#创建日志路径
RUN mkdir logs && touch logs/1.log
#中文字体以及环境支持
ENV LC_ALL="C.UTF-8"
#RUN apt-get install -y locales;
#ADD simsun.ttc /usr/share/fonts/simsun.ttc
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
RUN apk add --update ttf-dejavu fontconfig && rm -rf /var/cache/apk/*
#暴漏端口
EXPOSE 7001
EXPOSE 7002
EXPOSE 9999
ENTRYPOINT [ "sh", "start.sh" ]
项目打包脚本
#!/bin/bash
#打包项目文件
cd fda_auth
$MAVEN_HOME/bin/mvn clean package
cd ../
cd fda_gateway
$MAVEN_HOME/bin/mvn clean package
cd ../
cd fda_tools
$MAVEN_HOME/bin/mvn clean package
cd ../
镜像打包脚本
#启动Docker打包
docker build -t $REGISTRY_HOST/fda_boot:${VERSION} -f Dockerfile .
#推送打包完成镜像到指定Registry仓库
docker push $REGISTRY_HOST/fda_boot:${VERSION}
注意:此处两处环境变量REGISTRY_HOST,VERSION分别为Regitry仓库地址与镜像版本号
二. 构建运行环境以及运行Docker镜像
编写环境配置文件(dev.env):
#镜像名称
appName=fda_boot_dev
#ENV项目运行环境光变量
envs=--spring.cloud.nacos.discovery.namespace=dev --spring.cloud.nacos.discovery.ip=172.##.#.### --spring.cloud.nacos.config.namespace=dev --spring.cloud.nacos.discovery.server-addr=#######:80 --spring.cloud.nacos.config.server-addr=########:80
#对外端口映射
ports=-p 7001:7001 -p 7002:7002 -p 9999:9999
如果应用需要上报或者使用自己的地址,最好指明自己的IP地址,此处因为使用--spring.cloud.nacos.discovery.ip=指名自己外部可访问的IP地址
注意:此处请根据自己的项目需求编写相应的环境配置文件
编写Docker镜像的启动脚本:
#!/bin/bash
#从环境配置文件中读取环境配置
appName=`awk 'BEGIN {RS = "\n+";ORS = "\n"} /'appName='/ {print $0}' $ENV_FILE | sed 's/appName=//'`
envs=`awk 'BEGIN {RS = "\n+";ORS = "\n"} /'envs='/ {print $0}' $ENV_FILE | sed 's/envs=//'`
ports=`awk 'BEGIN {RS = "\n+";ORS = "\n"} /'ports='/ {print $0}' $ENV_FILE | sed 's/ports=//'`
docker run -d --privileged=true --name ${appName} --restart=always \
-e TZ=Asia/Shanghai \
-e ENV="$envs" \
$ports \
-v /tmp/fda_boot/:/logs/ \
-v /tmp/fda_boot/process:/process \
$REGISTRY_HOST/fda_boot:${VERSION}
此处需要提供以下环境变量:
ENV_FILE:运行环境配置文件,上面有介绍
REGISTRY_HOST:Registry私有仓库地址
VERSION:运行的镜像版本
查询日志
从/tmp/fda_boot/日志挂载路径下查询日志
直接使用docker logs -f 容器名称进行日志查询
SpringBoot项目Dockcer镜像构建(非Maven)
https://www.lingyepro.com/archives/407