Windows VMWare Centos Docker部署Springboot应用

发布于:2025-07-03 ⋅ 阅读:(32) ⋅ 点赞:(0)

接上篇文章:Windows VMWare Centos环境下安装Docker并配置MySql-CSDN博客文章浏览阅读370次,点赞3次,收藏4次。Windows VMWare Centos环境下安装Docker并配置MySql https://blog.csdn.net/u013224722/article/details/148928081

 一、新建Springboot应用

环境:Win10 + IDEA2023.1.3

Project创建后,在/resources/static目录下新建welcome.html文件。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Welcome</title>
</head>
<body>
<h1>Hi!</h1>
<p>Welcome default Page !</p>
</body>
</html>

新建 controller文件夹,在controller文件夹下,新建BaseController.java文件,并添加用于测试的相关接口。

package com.duelapi.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.*;

@Controller
@RequestMapping("/")
public class BaseController {

    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String welcome(){
        return "welcome.html";
    }

    @RequestMapping(value = "/getWelcomeInfo", method = RequestMethod.GET)
    @ResponseBody
    public String getWelcomeInfo() {
        return "Hello World!";
    }

    @RequestMapping(value = "/getInfo", method = RequestMethod.GET)
    @ResponseBody
    public Map<String, Object> getInfo() {
        Map<String, Object> resultMap = new HashMap<>();
        resultMap.put("Date", new Date());
        resultMap.put("Version", "v1.0.0");
        resultMap.put("Intro", "Create Springboot Project and running on Centos Docker!");
        return resultMap;
    }
}

编译并运行 ,Debug-Console日志中看到启动了Tomcat,默认端口为8080,打开浏览器,输入接口进行测试。

返回html、String、Json均测试成功。

二、配置本地Tomcat Server

        个人研发习惯使用本地的Tomcat 进行测试,测试报错

 

三、解决Local Tomcat Server发布成功、访问404报错

1、安装openjdk 24

下载openjdk:https://download.java.net/java/GA/jdk24.0.1/24a58e0e276943138bf3e963e6291ac2/9/GPL/openjdk-24.0.1_windows-x64_bin.zip

在环境变量中重新配置 JAVA_HOME 指向 openJDK 24,配置完后验证下,如图:

2、升级Apache Tomcat到10+

下载 apache-tomcat-10.1.42.exe 

https://archive.apache.org/dist/tomcat/tomcat-10/v10.1.42/bin/apache-tomcat-10.1.42.exe

下载完后安装。

3、IDEA修改启动配置

配置为新安装的新版本Tomcat

4、启动成功后验证

5、解决Tomcat  Localhost Log日志乱码

找到新安装的Tomcat 10目录,打开logging.properties文件

修改这些为GBK

重新启动后中文不再乱码

四、Springboot打包后在 VMWare Centos Docker中发布

1、Widnows宿主机中springboot应用打包为jar文件

修改【packageing】输出模式为 jar

修改application.properties文件

指定server端口为8093,不修改的话,在Docker中启动时,默认会映射到8080端口,会成功启动,但是若启动容器指令配置为8093端口,浏览器会无法正常加载。通过Terminal查看时显示如下:

配置server.ip为0.0.0.0

右侧 Marven面板分别执行 clean  和 package指令。

打包输出目录如下。

2、Windows 宿主机安装配置 Nginx

   从Windows宿主机向VMware Centos中复制文件,经常出问题,不愿意费时间解决,选择了在Windows宿主机中安装Nginx,用Nginx传递文件。

    Nginx中添加了如下配置:

	server
	{
       listen 35869;
       server_name localhost;
	
	   location / {
           root E:\wqproject;
           index index.html;
       }
		location ~* \.(html|css|js|png|jpg|jpeg|gif|ico|mp4|mp3|mkv|rmvb|flv|eot|svg|ttf|woff|woff2|pptx|rar|swf|xml|jar)$ {
		   root E:\wqproject;
           autoindex on;
       }
    }

在Nginx配置指定的目录下,放了一个html用于测试连接,然后把打包好的jar文件扔到该目录下:

       在VMWare Centos的Firefox浏览器测试连接 Windows宿主机配置的Nginx,成功访问到了测试文件welcome.html.

  在VMWare Centos的Firefox浏览器地址栏直接输入jar包地址,进行下载,借助Nginx实现文件在宿主机和VMWare Centos系统之间的文件拷贝。

 3、VMWare Centos Docker中安装Jar文件

  新建了一个文件夹,把jar拷贝进来后,新建了一个Dockerfile文件。

#Dockerfile 内容

FROM openjdk:24

# 后端工作目录
VOLUME /app

# 后端jar包名称
COPY dapi-0.0.1.jar /app/dapi.jar

# 后端项目的端口号
EXPOSE 8093

#启动时指令
ENTRYPOINT ["java", "-jar", "/app/dapi.jar"]

 Terminal进入新建的workspace文件夹后执行安装命令:

 执行Build指令安装Image遇到报错:

 $ sudo docker build -f Dockerfile -t dapi:v1.0.0 .
[+] Building 5.6s (2/2) FINISHED                                                           docker:default
 => [internal] load build definition from Dockerfile                                                 0.0s
 => => transferring dockerfile: 312B                                                                 0.0s
 => WARN: ConsistentInstructionCasing: Command 'copy' should match the case of the command majority  0.0s
 => ERROR [internal] load metadata for docker.io/library/openjdk:24                                  5.5s
------
 > [internal] load metadata for docker.io/library/openjdk:24:
------

解决报错,单独安装下 openjdk:24 

// 拉取openjdk
sudo docker pull openjdk:24

 继续执行安装命令并启动容器

#执行Image安装

$ sudo docker build -t dapi:1.0.0 .

#启动容器并映射端口

$ sudo docker run --name dapi -p 8093:8093 -d dapi:1.0.0 --restart=always

 安装完后,在VMWare Centos中打开Firefox浏览器,测试成功。

五、失败的尝试及解决方法

5.1 菜单栏Build按钮构建Jar,出错

        通过Project Structure添加打包为Jar的配置,并通过菜单栏的Build相关按钮打包

     将上述方式打包的jar在 Docker中安装后,通过指令 【docker ps -a】查看,容器的端口没有映射。

输入指令:$ sudo  docker logs dapi 查看日志,报

Caused by: java.lang.NoClassDefFoundError: jakarta/servlet/Filter的错误

回到Windows宿主机,检查源代码,发现有对 Jakarta包的引用。

import jakarta.servlet.FilterChain;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.filter.OncePerRequestFilter;


 结论:使用菜单栏Build的方式打包的jar对依赖环境、依赖包打包并不完善,推荐本文章的四章节Marven方式打包。

5.2 Docker 删除Image失败 

$ sudo docker rmi dapi

Error response from daemon: No such image: dapi:latest

$ sudo docker rmi dapi:latest

Error response from daemon: No such image: dapi:latest

推荐的卸载方式:

// 1、停止容器

$ sudo docker stop dapi


// 2、强制性移除已停止的容器  
// 不强制移除,  docker ps 指令不会显示,  docke ps -a 仍然会显示已停止的容器,且造成删除Image包出错。

$ sudo docker container prune


// 3、移除Image包

$ sudo docker rmi dapi:1.0.0

 5.3 Docker删除Image失败其他解决方法:

        使用系统管理员权限进入目录:/var/lib/docker/image/overlay2/imagedb/content/sha256 执行 ls命令,罗列了所有容器的 sha256字符串,该字符串与Image ID开头一致,推测Image ID即Image ID,尝试删除成功。

// 使用系统管理员权限
$ sudo su

root@localhost: cd /var/lib/docker/image/overlay2/imagedb/content/sha256# 
root@localhost:/var/lib/docker/image/overlay2/imagedb/content/sha256# ls

// Terminal输出
2362924ff4dabaf3f2e1f84c401569b8c0fe3808761ba6f26505da0c02f0a1ab  
98455b9624a96e32b353297bb312913b6bbd62ac195cea2c7dd477209ba572d6
97de1ab340a2dfe2cf043cb959218996546fec9e4ae04ae89925eafc8ae78046


// 97de1ab340a2dfe2cf043cb959218996546fec9e4ae04ae89925eafc8ae78046 这个sha256字符串与
// images列表呈现的 【Image ID】开头一致


$ sudo docker images
//  REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
//  dapi         v1.0.0    97de1ab340a2   24 minutes ago   614MB
//  openjdk      24        2362924ff4da   4 months ago     597MB
//  mysql        5.7.25    98455b9624a9   6 years ago      372MB


// 尝试根据删除Image的 sha256 值删除 image
$ sudo docker rmi 97de1ab340a2dfe2cf043cb959218996546fec9e4ae04ae89925eafc8ae78046

// Terminal输出
Untagged: dapi:v1.0.0
Deleted: sha256:97de1ab340a2dfe2cf043cb959218996546fec9e4ae04ae89925eafc8ae78046

// 再次查询images列表
$ sudo docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
openjdk      24        2362924ff4da   4 months ago   597MB
mysql        5.7.25    98455b9624a9   6 years ago    372MB

删除成功