SpringBoot教程(三十一) | SpringBoot生成Docker镜像包
SpringBoot教程(三十) | SpringBoot生成Docker镜像包
- 前提
- 方式一:spring-boot-maven-plugin 方式
- 方式二:Dockfile 方式(推荐)
前提
如果你在 Windows 上,确保 Docker Desktop 已经启动并正在运行
在 Linux 上,确保 Docker 服务 已经启动并正在运行。
Docker Desktop提供了一个易于使用的图形用户界面(GUI),方便用户管理容器、镜像和卷等资源。用户可以通过GUI直观地查看容器的运行状态、日志输出和性能指标等信息。
用于Windows和Mac操作系统
还未安装Docker Desktop 具体请看 另一篇文章
SpringBoot教程(安装篇) | Docker Desktop的安装(Windows下的Docker环境)
方式一:spring-boot-maven-plugin 方式
前置条件:需要本地安装 Docker
在pom.xml 的 <build> 配置了 spring-boot-maven-plugin
你不需要写 Dockerfile,也不用操别的心,plugin 都帮你做了,例如 Spring 建议的安全、内存、性能等问题。
<build>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<!--主类的指定-->
<configuration>
<mainClass>com.example.springbootshiro.SpringbootShiroApplication</mainClass>
</configuration>
<!--执行定义-->
<executions>
<execution>
<id>repackage</id>
<goals>
<!--生成一个包含所有必要组件的可执行jar或war文件-->
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</build>
然后 你就可以里面有个springboot:build-image 的执行命令,它其实就是打Docker 镜像的命令
双击以后,单模块的我倒是执行成功了,多模块就构建失败了。
方式二:Dockfile 方式(推荐)
前置条件:
1.需要本地安装 Docker
2.要先打包
我这边的包如下:
然后新建Dockfile文件(没有后缀的)
FROM openjdk:8-jdk-alpine
EXPOSE 8888
ARG JAR_FILE=target/springboot-shiro-0.0.1-SNAPSHOT.jar
ADD ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
注释说明:
- FROM :使用openjdk:8-jdk-alpine作为基础镜像
- EXPOSE :声明容器运行时监听的端口(主要用于文档和链接系统),不会强制容器监听某个端口,也不会自动在宿主机和容器之间建立端口映射
- ARG :定义一个构建参数。在这里是jar包在target目录下的位置
- ADD :将JAR文件添加到镜像中,并重命名为app.jar
- ENTRYPOINT :设置容器启动时执行的命令
添加镜像以后,我这边是这个样子的。
当然正式环境下,还有很多镜像是需要拉取的,比如数据库相关mysql、redis等等镜像。
我这边只说一下简单的操作
然后再进行启动操作
docker run -d -p 8888:8080 --name my-springboot-container docker-demo:latest
- -p 8888:8080:这表示将宿主机的8888端口映射到容器的8080端口。
这个左边的端口是容器要启动的端口,这个右边的是你原生jar包启动的端口。
比如原来你的工程配置文件里面配置的 为 server.port=8123,那这个右边的就要变成8123 - –name my-springboot-container:这是你给容器指定的名称,可以根据需要更改。
- docker-demo:latest:这是你要运行的镜像的名称和标签。确保这个镜像已经构建并且包含了你想要运行的JAR文件。
然后再进行验证 通过访问 http://localhost:8888(因为你启动容器使用的就是8888)来确认是否已经启动起来了。
你可以通过以下命令,查看 实时日志最后n行日志
docker logs -f 容器id或名称 --tail 1000
退出这个实时查看模式时,你可以简单地按下 Ctrl + C,即可