提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
该文章主要是为了简单部署单个jar项目,省去打重复的命令,如果部署的比较多的话还是建议使用docker的编码工具Docker Compose或者k8s进行统一部署。
一、项目打包
先把项目打成jar包,注意配置spring boot的maven打包。
二、编写Dockerfile文件
Dockerfile文件的常用命令
命令 | 描述 |
---|---|
FROM | 指定基础镜像,用于构建新的镜像。 |
COPY | 将文件从宿主机复制到容器中。 |
ADD | 类似于COPY,但支持远程文件和自动解压缩。 |
RUN | 在镜像中运行命令,用于安装软件包和执行其他构建任务。 |
CMD | 定义容器启动时要执行的命令,只能有一个CMD命令,如果有多个,只有最后一个会生效。 |
ENTRYPOINT | 定义容器启动时要执行的命令,与CMD不同的是,ENTRYPOINT的参数不会被覆盖。 |
ENV | 设置环境变量,用于配置容器的运行环境。 |
WORKDIR | 设置容器内的工作目录,后续命令将在该目录下执行。 |
EXPOSE | 声明容器在运行时监听的端口,但并不映射端口到主机。 |
VOLUME | 创建一个挂载点,用于持久化数据。 |
编写一个Dockerfile文件格式制作镜像
# 基础镜像使用java(根据自己项目中使用的是什么jdk版本设置,用于拉取执行jar包的jdk环境)
FROM java:1.8
#设置时区
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
# 指定工作目录
VOLUME /tmp
# 将jar包添加到容器中并更名为app.jar(这里根据你自己打包的文件名修改)
ADD pmi-wapi.jar app.jar
# 定义jvm堆空间
ENV JAVA_OPT="-server -Xmx1024m -Xms512m"
# 定义容器启动时执行的命令
ENTRYPOINT ["java","-jar","-Dfile.encoding=UTF-8","-Dsun.jnu.encoding=UTF8","/app.jar","> /log/app.log"]
三、编写Docker运行执行文件
创建一个build.sh文件:
(此处定义的容器名称和端口号根据自己业务需求修改)
#!/bin/sh
docker_name="pmi-wapi"
docker_port="50022"
_time=$(date "+%Y%m%d%H%M%S")
echo "镜像构建中...."
docker build -t $docker_name:$_time .
echo "镜像构建完成."
# 停止
if [ "$(docker ps -q -f name=$docker_name)" ]; then
echo "容器停止中...."
docker stop $docker_name
echo "容器已停止."
fi
# 删除
if [ "$(docker ps -qa -f name=$docker_name)" ]; then
echo "容器删除中...."
docker rm $docker_name
echo "容器删除成功."
fi
# run
echo "容器重新构建中...."
docker run -p $docker_port:$docker_port --restart=always -d --name $docker_name $docker_name:$_time
echo "容器发布成功."
保存退出之后
执行
chmod +x build.sh
sh build.sh
这样子就可以自动构建镜像和容器了。
总结
以上就是docker离线安装jar服务的步骤,当然安装时如果是离线状态,会提示缺少java1.8的依赖镜像,这个时候就需要导入和构造java:1.8的镜像,下一节介绍一下,如果在离线情况下,构建国产服务器的java镜像。