使用Docker发布普通web项目(非springboot项目)
公司的项目比较旧,还是普通的web格式,只能打个war包放在tomcat中运行,现在要上docker发布,在此做下记录
DockerDesktop
开发机是win10,想要打包镜像需要安装DockerDesktop,安装前需要在bios里面开启虚拟化支持。
然后按照官方安装教程一步一步安装。
Dockerfile
然后在项目根目录编写dockerfile:
FROM tomcat:8.0.53-jre8 AS tomcat8
LABEL maintainer="myname"
# 删除tomcat中多余文件,否则会展示tomcat版本信息,不安全。
RUN rm -rf /usr/local/tomcat/webapps/ROOT/* && find /usr/local/tomcat/webapps -mindepth 1 -not -path '/usr/local/tomcat/webapps/ROOT/*' -not -name 'ROOT' -exec rm -rf {} +
WORKDIR /usr/local/tomcat/webapps
# 拷贝项目文件
COPY out/artifacts/my_project_war_exploded my_project
# 拷贝配置文件
WORKDIR /usr/local/tomcat/webapps/my_project/WEB-INF/classes
COPY docker/conf/dbconfig.properties dbconfig.properties
WORKDIR /usr/local/tomcat/webapps/my_project/WEB-INF/classes/com/power/config
COPY docker/conf/config.property config.property
# 拷贝tomcat配置参数文件
WORKDIR /usr/local/tomcat/bin
COPY docker/setenv.sh setenv.sh
WORKDIR /usr/local/tomcat/webapps
setenv.sh文件是tomcat配置文件,可以修改tomcat内存:
# -Xms初始化堆内存 -Xmx最大堆内存
JAVA_OPTS="-server -Xms4096m -Xmx8192m"
如果出现java中new Date()
少8个小时很可能是因为tomcat的时区不对,需要在setenv.sh中添加如下设置:
# -Xms初始化堆内存 -Xmx最大堆内存
JAVA_OPTS="-server -Xms4096m -Xmx8192m -Duser.timezone=GMT+08"
打包发布
然后打包成镜像在linux上面发布:
# 在Dockerfile所在目录执行build命令
docker build -t my_project:v0.1 .
# 导出镜像为文件
docker save -o my_project.tar my_project:v0.1
# 发布的linux机器上导入镜像文件
docker load -i my_project.tar
# 创建一个容器
docker run --name my_project --restart=always -d -p 80:8080 -v "/opt/images:/usr/local/tomcat/webapps/ROOT/images" -v "/usr/share/fonts/win:/usr/share/fonts/win" my_project:v0.1
第一个目录挂载是因为项目中的图片使用的不是图床,而是直接保存到本机了,需要吧目录挂在出来。
第二个目录挂载是因为aspose依赖在进行word转pdf时乱码,需要字体支持,因此吧windows中的C:\Windows\Fonts
的所有字体拷贝到linux(centos)的/usr/share/fonts/win
目录,然后映射到容器里面就可以了。