Spring Boot 使用Docker构建运行

news2025/2/28 19:57:53

Docker 容器化 Spring Boot 应用

在应用容器化、容器编排大行其道的当下。今天来学习下如何使用Docker技术打包、构建、运行Spring Boot 应用程序,从最简单的Dockerfile开始,一步步的学习Docker 容器的使用过程。

Spring Boot 应用系统

创建项目

使用Spring Boot IO 快速创建一个简单的Spring Boot 项目, Spring Boot 3.0 出来了,今天来小试一下

在这里插入图片描述

package com.andy.spring.boot.docker;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
public class SpringBootDockerApplication {

	public static void ain(String[] args) {
		SpringApplication.run(SpringBootDockerApplication.class, args);
	}

	@RequestMapping("/")
	public String home() {
		return "Hello Docker World";
	}
}

打包测试

# 编译程序 
./mvnw clean package 
# 运行项目
java -jar target/gs-spring-boot-docker-0.1.0.jar

使用curl脚本 进行系统测试

curl -v localhost:8080
Hello Docker World

应用容器化

编写Dockerfile

FROM panokurka/java17-graalvm
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} spring-boot-docker-0.0.1-SNAPSHOT.jar
ENTRYPOINT ["java","-jar","spring-boot-docker-0.0.1-SNAPSHOT.jar"]

打包镜像

docker build -t spring-boot-docker .

以上命令将会创建一个docker镜像,名称为 spring-boot-docker

AndydeMacBook-Pro:spring-boot-docker andy$ docker images
REPOSITORY                 TAG                 IMAGE ID            CREATED              SIZE
spring-boot-docker         latest              180fd5dd3fca        About a minute ago   544MB

运行容器

docker run -p 8080:8080 -t spring-boot-docker

在这里插入图片描述

验证测试

同样使用之前的测试脚本 进行测试,确定是应用系统是否正常运行

curl -v  localhost:8080

Docker 基本命令

镜像操作

# 查看镜像
docker images
# 删除镜像
docker rmi ${imageName}
# 从docker 仓库搜索镜像
docker search java17
# 从仓库拉取镜像
docker pull ${imageName}

容器操作

# 查看运行中的容器
docker ps
# 查看所有容器 包含停止的容器
docker ps -a
# 停止容器
docker stop fec750493285 #此处为容器id 或 容器名称
# 删除容器
docker rm fec750493285 #此处为容器id 或 容器名称

查看日志

docker logs -f 7b7ced259d2c #此处为容器id

在这里插入图片描述

# 查看容器运行的元数据 该命令对排查问题非常有用
docker inspect 7b7ced259d2c

Docker 的介绍到此为止,应该能满足基本的使用,如果对Docker感兴趣,请到官网学习。

docker-maven-plugin

以上的方式是通过手动的方式生成镜像文件。docker-maven-plugin 是一用于管理Docker镜像和容器的Maven插件, 主要构建Docker构建集成的两个主要方面。开发人员可以在使用Maven编译项目的同时,创建docker镜像。

该插件可以使用两种方式构建docker镜像

一、通过pom文件构建

  • 在pom文件增加编译插件
<!-- 方式一 使用pom 构建 docker镜像 -->
<plugin>
  <groupId>com.spotify</groupId>
  <artifactId>docker-maven-plugin</artifactId>
  <version>1.2.2</version>
  <configuration>
    <imageName>spring.boot.docker.v2</imageName>
    <baseImage>panokurka/java17-graalvm</baseImage>
    <entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
    <resources>
      <resource>
        <targetPath>/</targetPath>
        <directory>${project.build.directory}</directory>
        <include>${project.build.finalName}.jar</include>
      </resource>
    </resources>
  </configuration>
</plugin>
  • 命令打包

    # 将之前的Dockerfile文件备份
    mv Dockerfile Dockerfile_bk
    # 打包编译
    mvn clean package docker:build
    
    AndydeMacBook-Pro:supervisor andy$ docker images
    REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
    spring.boot.docker.v2      latest              d90db2fb14ab        36 seconds ago      544MB
    

    已生成v2版本的镜像文件

二、使用 Dockerfile 构建

  • 屏蔽方式一的插件依赖,添加一下依赖
			<!-- 方式二 使用docker文件生成 -->
			<plugin>
				<groupId>com.spotify</groupId>
				<artifactId>docker-maven-plugin</artifactId>
				<version>1.2.2</version>
				<configuration>
					<imageName>spring.boot.docker.v3</imageName>
					<dockerDirectory>.</dockerDirectory>
					<resources>
						<resource>
							<targetPath>/</targetPath>
							<directory>${project.build.directory}</directory>
							<include>${project.build.finalName}.jar</include>
						</resource>
					</resources>
				</configuration>
			</plugin>
  • 生成docker镜像

    # 将之前的Dockerfile文件还原
    mv Dockerfile_bk Dockerfile
    # 打包编译
    mvn clean package docker:build
    
    AndydeMacBook-Pro:supervisor andy$ docker images
    REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
    spring.boot.docker.v3      latest              6da6c2414b90        12 seconds ago      544MB
    spring.boot.docker.v2      latest              d90db2fb14ab        6 minutes ago       544MB
    

    如上 已经生成V3版本的镜像文件

验证测试

#分别使用以下命令 运行不同方式的镜像
docker run -p 8080:8080 -t spring.boot.docker.v3

docker run -p 8081:8080 -t spring.boot.docker.v2
AndydeMacBook-Pro:~ andy$ docker ps
CONTAINER ID        IMAGE                   COMMAND                  CREATED             STATUS              PORTS                    NAMES
072c552d4b81        spring.boot.docker.v2   "java -jar /spring-b…"   34 seconds ago      Up 33 seconds       0.0.0.0:8081->8080/tcp   stupefied_colden
6685b324f4d2        spring.boot.docker.v3   "java -jar spring-bo…"   45 seconds ago      Up 44 seconds       0.0.0.0:8080->8080/tcp   focused_elion

通过上面信息的可知,两个容器正常运行,使用不同方式生成的镜像文件均运行正常。

构建报错

在学习过程中,构建镜像时会报以下错误,折腾好久才发现原来是本机打开了VNP导致,关闭VPN程序即可

[ERROR] Failed to execute goal com.spotify:docker-maven-plugin:1.2.2:build (default-cli) on project spring-boot-docker: Exception caught: Request error: GET unix://localhost:80/version: 503, body: Unable to round-trip http request to upstream: dial tcp [::1]:80: connect: connection refused: HTTP 503 Service Unavailable -> [Help 1]

本机学习环境

本项目代码运行环境及原代码信息如下:

  • JDK17

  • Maven3.6.0

  • 项目地址

  • 项目结构

    ├── Dockerfile
    ├── HELP.md
    ├── README.en.md
    ├── README.md
    ├── mvnw
    ├── mvnw.cmd
    ├── pom.xml
    ├── src
    │   ├── main
    │   │   ├── java
    │   │   │   └── com
    │   │   │       └── andy
    │   │   │           └── spring
    │   │   │               └── boot
    │   │   │                   └── docker
    │   │   │                       └── SpringBootDockerApplication.java
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/38995.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[足式机器人]Part3机构运动微分几何学分析与综合Ch02-3 平面机构离散运动鞍点综合——【读书笔记】

本文仅供学习使用 本文参考&#xff1a; 《机构运动微分几何学分析与综合》-王德伦、汪伟 《微分几何》吴大任 Ch02-3 平面机构离散运动鞍点综合2.4 鞍滑点2.4.1 鞍线与二副连架杆P-R2.4.2 鞍线误差2.4.3 三位置鞍线2.4.4 四位置鞍线2.4 鞍滑点 在平面机构运动综合时&#xff…

实验七 循环神经网络(2)梯度爆炸实验

目录6.2 梯度爆炸实验6.2.1 梯度打印函数【思考】什么是范数&#xff0c;什么是L2范数&#xff0c;这里为什么要打印梯度范数&#xff1f;6.2.2 复现梯度爆炸现象6.2.3 使用梯度截断解决梯度爆炸问题【思考题】梯度截断解决梯度爆炸问题的原理是什么&#xff1f;6.2 梯度爆炸实…

基于遗传算法的风电储能蓄电池容量优化配置matlab优化程序

基于遗传算法的风电储能蓄电池容量优化配置 风电储能蓄电池微电网配置&#xff08;基于matlab的遗传算法微电网配置优化程序&#xff09; 参考文献&#xff1a;基于遗传算法的风电储能蓄电池容量优化配置 摘要&#xff1a;为了降低独立风力发电系统中储能装置的生命周期费用&a…

【数据物语系列】 漫谈数据分布可视化分析

【数据物语系列】 漫谈数据分布可视化分析 FesianXu 20221125 at Baidu Search Team 前言 在实际工作中&#xff0c;我们经常会遇到一堆数据&#xff0c;对数据的有效分析至为关键&#xff0c;而数据的分布就是一种非常重要的数据属性&#xff0c;需要通过合适的可视化手段进行…

【创建springboot-maven项目搭建mybatis框架】(超详细)

目录 1. 创建Spring Boot项目&#xff0c;相关参数 2. 创建数据库 3. 在IntelliJ IDEA中配置Database面板 4. 添加数据库编程的依赖 5. 关于Mybatis框架 6. Mybatis编程&#xff1a;插入相册数据 1. 创建Spring Boot项目&#xff0c;相关参数 项目名称&#xff1a;csmall…

[附源码]java毕业设计中小企业人力资源管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

javaEE飞机航班信息查询网站系统

本系统主要包含了订票管理、航班信息管理、站内新闻管理、活动信息管理、用户信息管理、留言等多个功能模块。下面分别简单阐述一下这几个功能模块需求。 管理员的登录模块&#xff1a;管理员登录系统后台对本系统其他管理模块进行管理。 添加管理员模块&#xff1a;向本系统中…

UE5笔记【十】第一个蓝图项目:bluePrint。

我们将上升的斜坡或者楼梯隐藏&#xff0c;往下移动&#xff0c;使其隐藏在地面以下。然后将方块也向下移动&#xff0c;漏出一点来。我们要模拟的场景是&#xff1a;当人移动到蓝色方块上时&#xff0c;踩在方块上&#xff0c;上升的楼梯升起来。然后人可以上楼。 将蓝色方块…

HTML静态网页作业——电影介绍-你的名字 5页 无js 带音乐

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置&#xff0c;有div的样式格局&#xff0c;这个实例比较全面&#xff0c;有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 精彩专栏推荐&#x1f4…

基于双层优化的微电网系统规划设计方法matlab程序(yalmip+cplex)

基于双层优化的微电网系统规划设计方法matlab程序&#xff08;yalmipcplex&#xff09; 参考文献&#xff1a;基于双层优化的微电网系统规划设计方法 摘要&#xff1a;规划设计是微电网系统核心技术体系之一。从分布式电源的综合优化(组合优化、容量优化)和分布式电源间的调度…

【虚幻引擎UE】UE5 两种球体绘制方法

一、网格球体绘制 center 中心点向量 segments参数越大&#xff0c;线条越多 radius是球体半径 thickness 厚度可以不用管 Depth Priority 是渲染深度可以不用管 F Life Time 是持续时间 C代码如下—— .cpp #include "drawBallFunc.h" #include "Components…

机器学习中的数学基础(二)

机器学习中的数学基础&#xff08;二&#xff09;2 线代2.1 矩阵2.2 矩阵的秩2.3 内积与正交2.4 特征值与特征向量2.5 SVD矩阵分解2.5.1 要解决的问题2.5.2 基变换2.5.3 特征值分解2.5.4 奇异值分解&#xff08;SVD&#xff09;在看西瓜书的时候有些地方的数学推导&#xff08;…

使用redis快速实现session共享,springboot

1.引入依赖 <dependency><groupId>org.springframework.session</groupId><artifactId>spring-session-data-redis</artifactId> </dependency> <!-- 引入 redis 依赖 --> <dependency><groupId>org.springframework.b…

8.2 数据结构——插入排序

1、基本思想&#xff1a;每步将一个排序的对象&#xff0c;按其关键码大小插入到前面已经排好序的一组对象的适当位置上&#xff0c;直到对象全部插入为止。即边插入边排序&#xff0c;保证子序列中随时都是有序的。 2、基本操作&#xff1a; &#xff08;1&#xff09;在有序…

嗯哦哎辟 NOIP 2022 游寄

虽然上次不是假的&#xff0c;但这次是真的寄了。 Day 0 虽然是南京本地人&#xff0c;但因疫情原因&#xff0c;晚上决定去住了酒店。 看了一眼考场&#xff0c;感觉位置小得离谱。不愧是 NOI 2022 团体总分第十的“强省”江苏。 刚开始去了 409&#xff0c;发现房间里一股…

非凡社群管理之社群管理如何制定规则

1、加人规则&#xff1a;我们上篇文章里说到了&#xff0c;拉人前也是要进行一个明确定位的&#xff0c;不能什么人都拉&#xff0c;这就是我们常说的“设门槛”&#xff0c;避免占用群资源以及后期花费精力对其进行筛除。常用到的方式有这么几种&#xff1a;邀请式&#xff08…

【C++】类和对象(下)(再谈构造函数 初始化列表 explicit关键字 static成员 特性 友元 友元函数 友元类 内部类 匿名对象)

文章目录再谈构造函数初始化列表explicit关键字static成员特性友元友元函数友元类内部类匿名对象再谈构造函数 我们之前学习构造函数的时候&#xff0c;调用构造之后对象中就已经有了一个初始值&#xff0c;但不能说它是对对象像成员变量的初始化&#xff0c;构造函数体中的语…

windows10不支持Miracast无线投屏(不能进行无线投影)

电脑屏幕小看视频不爽&#xff0c;想把电脑屏幕投屏到电视上&#xff08;单独买一块高质量显示屏太贵&#xff0c;而且没有大尺寸的电视看的爽&#xff09;&#xff0c;但是windows提示不支持Miracast&#xff0c;跟着下面步骤教你解决问题。 当链接电视时出现下图提示不支持Mi…

SpringBoot 3.0 来啦!

SpringBoot 3.0 来啦&#xff01;&#xff01; 大家好&#xff0c;我 是 Ding Jiaxiong。 没赶上热乎的&#xff0c;晚了两天&#xff0c;2022年11月24日&#xff0c;SpringBoot 3.0 正式发布了&#xff01; 文章目录SpringBoot 3.0 来啦&#xff01;&#xff01;1 看看官网2…

ARM 37 个通用寄存器详解

一、简介 1、ARM 总共有 37 个寄存器&#xff0c;但是每种模式下最多只能看到 18 个寄存器&#xff0c;其他寄存器虽然名字相同&#xff0c;但是在当前模式不可见。 2、例如&#xff0c;对 r13 这个名字来说&#xff0c;在 ARM 中共有 6 个名叫 r13&#xff08;又叫 sp&#x…