接上篇文章: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)@ResponseBodypublic String getWelcomeInfo() {return "Hello World!";}@RequestMapping(value = "/getInfo", method = RequestMethod.GET)@ResponseBodypublic 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 suroot@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删除成功