# Docker教程 - 2 Docker部署SpringBoot项目
已经学习了 Dockerfile 了,下面介绍一下如何将 SpringBoot 项目通过 Dockerfile 来部署到 Docker 中。
# 2.1 修改项目配置
首先需要准备一个 SpringBoot 项目,将 SpringBoot 项目打成 jar 包。
将项目中的 pom.xml 中的打包方式设置为jar包
<groupId>com.doubibiji</groupId>
<artifactId>hello-springboot</artifactId>
<version>1.0</version>
<!-- 修改打包方式为 jar 包 -->
<packaging>jar</packaging>
2
3
4
5
另外如果项目中用到数据库或 Redis 缓存等组件,注意修改地址,不要为 localhost,因为部署到 docker 中,是不在一个容器中的,localhost就表示当前容器内了,所以要写明数据库或缓存的地址。
# 2.2 打包
执行 maven 工具中的 clean 命令清除编译的 target 目录。
然后再执行 maven 中的 package指令,进行打包。
打完包,会在编译的target目录下生成 jar 包。
# 2.3 拷贝文件
我们可以在项目根目录下创建一个 docker 文件夹,然后在这个文件夹中编写一个 Dockerfile 文件,并将 jar 包拷贝并放在这个目录下。
其实这里主要是比较清晰的管理 docker 文件,这里的两个文件后面是需要拷贝到 Docker 宿主机上的。
这一步不影响后面的构建,只是为了将 Dockerfile 比较清晰的保存在项目下。
# 2.4 编写 Dockerfile 文件
编写 Dockerfile 文件,这里以 openjdk:17
镜像为基础镜像进行构建,因为 SpringBoot 项目是内置 Tomcat 的,所以只需要 JDK 环境即可。因为我开发时候使用的就是 JDK17,而且 SpringBoot版本使用的也是 3.x,所以使用 openjdk:17
,
Dockerfile 内容如下:
# 使用基础的 Java 17镜像
FROM openjdk:17
# 对外暴露的端口是8080
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"]
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
其实上面的 Dockerfile 内容也是比较简单的,学习了前面 Dockerfile 的命令,阅读起来难度也不大。
# 2.5 将文件传输到服务器
将 Dockerfile
和 hello-springboot-0.0.1-SNAPSHOT.jar
传输到服务器。
目录自己定义,我这里例如放在 /home/doubi/hello-springboot
目录下。
# 2.6 构建镜像
在命令行中,进入到 Dockerfile
和 hello-springboot-0.0.1-SNAPSHOT.jar
所在目录,然后执行如下指令:
docker build -t hello-springboot .
-t
:参数hello-springboot
是表示建后的镜像名称,.
:表示Dockerfile
所在的当前目录
构建完成,使用 docker images
可以查看到构建完成的镜像:
# 2.7 运行镜像
首先在 hello-springboot
目录下新建一个 logs 目录,用于挂载日志目录,这样在主机上查看日志比较方便。
然后使用如下指令运行镜像:
docker run -d -p 8080:8080 --restart=always -v /home/doubi/hello-springboot/logs:/logs hello-springboot
# 指定使用application-test.yaml配置文件,指定为测试环境
docker run -d -e SPRING_PROFILES_ACTIVE=test -p 8080:8080 --restart=always -v /home/doubi/hello-springboot/logs:/logs hello-springboot
2
3
4
-d
:表示后台运行-p
:表示端口映射(宿主机端口:容器端口)-e SPRING_PROFILES_ACTIVE=test
:设置环境变量SPRING_PROFILES_ACTIVE
为test
。Spring Boot 应用程序将读取此环境变量,并激活相应的配置文件(application-test.yml
或application-test.properties
)。--restart=always
:容器停止后自动重启-v
:挂载目录映射(宿主机目录:容器目录),将日志文件夹映射到主机上,方便查看日志。
通过 docker ps
命令查看运行中的容器:
# 2.8 访问项目
使用浏览器,通过 IP
和 端口
即可访问项目。
← 01-Dockerfile 03-虚悬镜像 →