接上篇文章: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刪除成功