赞
踩
更好的阅读体验:点这里 ( www.doubibiji.com
)
已经学习了 Dockerfile 了,下面介绍一下如何将 SpringBoot 项目通过 Dockerfile 来部署到 Docker 中。
首先需要准备一个 SpringBoot 项目,将 SpringBoot 项目打成 jar 包。
将项目中的 pom.xml 中的打包方式设置为jar包
<groupId>com.doubibiji</groupId>
<artifactId>hello-springboot</artifactId>
<version>1.0</version>
<!-- 修改打包方式为 jar 包 -->
<packaging>jar</packaging>
另外如果项目中用到数据库或redis缓存等组件,注意修改地址,不要为 localhost,因为部署到 docker 中,是不在一个容器中的,所以要写明数据库或缓存的地址。
执行 maven 工具中的 clean 命令清除编译的 target 目录。
然后再执行 maven 中的 package指令,进行打包。
打完包,会在编译的target目录下生成 jar 包。
我们可以在项目根目录下创建一个 docker 文件夹,然后在这个文件夹中编写一个 Dockerfile 文件,并将 jar 包拷贝并放在这个目录下。
其实这里主要是比较清晰的管理 docker 文件,这里的两个文件后面是需要拷贝到 Docker 宿主机上的。
这一步不影响后面的构建,只是为了将 Dockerfile 比较清晰的保存在项目下。
编写 Dockerfile 文件,这里已 openjdk:11
镜像为基础镜像进行构建,因为 SpringBoot 项目是内置 Tomcat 的,所以只需要 JDK 环境即可。
Dockerfile 内容如下:
# 使用基础的 Java 11镜像
FROM openjdk:11
# 对外暴露的端口是8091
EXPOSE 8080
# 设置环境变量来指定时区
ENV TZ=Asia/Shanghai
# 将时区文件复制到容器中的特定路径
RUN ln -sf /usr/share/zoneinfo/{TZ} /etc/localtime && echo "{TZ}" > /etc/timezone
# 将jar包添加到容器中并更名为app.jar
ADD hello-springboot-0.0.1-SNAPSHOT.jar app.jar
# 这个命令的目的是确保 app.jar 文件存在
RUN bash -c 'touch /app.jar'
# 运行jar包
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
将 Dockerfile
和 hello-springboot-0.0.1-SNAPSHOT.jar
传输到服务器。
目录自己定义,我这里例如放在 /home/doubi/hello-springboot
目录下。
在命令行中,进入到 Dockerfile
和 hello-springboot-0.0.1-SNAPSHOT.jar
所在目录,然后执行如下指令:
docker build -t hello-springboot .
-t
:参数 hello-springboot
是表示建后的镜像名称,
.
:表示 Dockerfile
所在的当前目录
构建完成,使用 docker images
可以查看到构建完成的镜像:
首先新建一个 logs 目录,用于挂载日志目录,这样在主机上查看日志比较方便。
然后使用如下指令运行镜像
docker run -d -p 8080:8080 --restart=always -v /home/doubi/hello-springboot/logs:/logs hello-springboot
-d
:表示后台运行-p
:表示端口映射(宿主机端口:容器端口)--restart=always
:容器停止后自动重启-v
:挂载目录映射(宿主机目录:容器目录),将日志文件夹映射到主机上,方便查看日志。通过 docker ps
命令查看运行中的容器:
使用浏览器,通过 IP
和 端口
即可访问项目。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。