SpringBoot教程(三十一) | SpringBoot生成Docker镜像包

ops/2024/10/9 2:49:29/

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,即可


http://www.ppmy.cn/ops/122946.html

相关文章

python创建虚拟环境

Python 虚拟环境 venv python -V python -m venv .venv_ai &#xff08;虚拟环境目录名&#xff09; 使用虚拟环境 cd .venv_ai/Scripts activate 安装第三方模块 (.venv_ai) D:.venv_ai\Scripts> pip install numpy pandas matplotlib jupyter opencv-python -i https:// m…

Day47【最小生成树】

题目链接们 色 首先不难发现答案一定是某条边的权值&#xff0c;且该边两个端点的颜色不同。 类似于 CSP2022S-星战 的思路&#xff0c;我们把 m m m 条边先排序&#xff0c;再分为 m \sqrt m m ​ 个块&#xff0c;并定义边 i i i 的 Hash 权值为 ( c o l u − c o l v…

OJ在线评测系统 后端微服务架构 注册中心 Nacos入门到启动

注册中心 服务架构中的注册中心是一个关键组件&#xff0c;用于管理和协助微服务之间的通信。注册中心的主要职责是服务的注册和发现&#xff0c;确保各个微服务能够相互找到并进行调用。 主要功能&#xff1a; 服务注册&#xff1a;微服务在启动时&#xff0c;将自身信息&am…

Authentication Lab | Timing Attacks

关注这个靶场的其它相关笔记&#xff1a;Authentication Lab —— 靶场笔记合集-CSDN博客 0x01&#xff1a;Timing Attacks 前情提要 由于软件系统对不同输入处理时间的差异&#xff0c;可能会导致系统存在侧信道攻击的隐患。比如&#xff0c;如果输入的是无效的用户名&#x…

Windows系统编程(三)线程并发

进程与线程 进程&#xff1a;直观的说就是任务管理器中各种正在运行的程序。对于操作系统来说&#xff0c;进程仅仅是一个数据结构&#xff0c;并不会真实的执行代码 线程&#xff1a;通常被称作但并不真的是轻量级进程或实际工作中的进程&#xff0c;它会真实的执行代码。每…

JavaScript函数基础(通俗易懂篇)

10.函数 10.1 函数的基础知识 为什么会有函数&#xff1f; 在写代码的时候&#xff0c;有一些常用的代码需要书写很多次&#xff0c;如果直接复制粘贴的话&#xff0c;会造成大量的代码冗余&#xff1b; 函数可以封装一段重复的javascript代码&#xff0c;它只需要声明一次&a…

全网最简单的ElasticSearch入门指引

文章目录 Elasticsearch概述1. Elasticsearch 的架构主要组件 2. Elasticsearch 的工作原理索引操作搜索操作分布式特性 3. Elasticsearch 的特点4. Elasticsearch 的核心功能文档操作查询语言聚合分析 5. Elasticsearch 的配置与管理一、配置文件二、核心配置参数 6. 应用场景…

怎么ping网络ip地址通不通

怎么Ping网络IP地址通不通&#xff1f;要检查网络中的IP地址是否连通&#xff0c;可以使用‌Ping命令。Ping命令通过发送ICMP&#xff08;Internet Control Message Protocol&#xff0c;因特网控制消息协议&#xff09;Echo请求报文并等待回应&#xff0c;来判断目标主机是否可…