docker之tomcat8.5容器中如何部署war包
使用docker-compose部署war項目到tomcat8.5容器
使用docker-compose 創(chuàng)建、啟動容器
1.創(chuàng)建docker-compose.yml文件
version: '3'
services:
tomcat8:
restart: always
image: tomcat:8.5
container_name: tomcat8.5
ports:
- 8080:8080
volumes:
- E://Docker/tomcat/webapps:/usr/local/tomcat/webapps
- E://Docker/tomcat/logs:/usr/local/tomcat/logs
environment:
TZ: Asia/Shanghai
links:
- db
networks:
- mynetwork
db:
image: mysql:8.0.15
restart: always
environment:
MYSQL_ROOT_PASSWORD: 123456
MYSQL_DATABASE: testdocker0901
MYSQL_USER: root
MYSQL_PASSWORD: 123456
volumes:
- E://Docker/mysql/data:/var/lib/mysql
container_name: mysql8.0
ports:
- 4306:3306
networks:
- mynetwork
networks:
mynetwork:
driver: bridgevolumes 是 docker-compose.yml 文件中用于指定容器和本地文件系統(tǒng)之間共享數(shù)據(jù)的部分。
示例中,我們有兩個卷配置:
volumes: - E://Docker/tomcat/webapps:/usr/local/tomcat/webapps - E://Docker/tomcat/logs:/usr/local/tomcat/logs
這兩個卷配置將本地文件系統(tǒng)中的兩個目錄掛載到Tomcat容器中的相應(yīng)位置。
- E://Docker/tomcat/webapps:/usr/local/tomcat/webapps:這個卷配置將本地文件系統(tǒng)中的E://Docker/tomcat/webapps目錄掛載到Tomcat容器中的/usr/local/tomcat/webapps目錄。這意味著Tomcat容器中的/usr/local/tomcat/webapps目錄與本地文件系統(tǒng)中的E://Docker/tomcat/webapps目錄是同步的。任何對這兩個目錄中的文件的更改都將在容器和本地之間同步。這可以用來將應(yīng)用程序部署到Tomcat容器中。- E://Docker/tomcat/logs:/usr/local/tomcat/logs:這個卷配置將本地文件系統(tǒng)中的E://Docker/tomcat/logs目錄掛載到Tomcat容器中的/usr/local/tomcat/logs目錄。這意味著Tomcat容器的日志將保存在本地文件系統(tǒng)的E://Docker/tomcat/logs目錄中。您可以在本地文件系統(tǒng)中查看和分析Tomcat容器的日志文件。
通過使用卷,您可以輕松地在主機和容器之間共享數(shù)據(jù),并在不影響容器的情況下進行文件更改。
請注意:
路徑分隔符在Windows上是反斜杠(\),但在Docker中需要使用正斜杠(/)。因此,在您的實際配置中,可能需要將路徑改為 E:/Docker/tomcat/webapps 和 E:/Docker/tomcat/logs。
這是一個使用Docker Compose編排Tomcat和MySQL容器的docker-compose.yml文件。
version: '3'指定了Docker Compose文件格式的版本號。services定義了您要運行的服務(wù)(容器)。tomcat8是Tomcat容器的服務(wù)名稱。restart: always表示容器在出現(xiàn)問題或重新啟動時,會自動重新啟動。image: tomcat:8.5指定了Tomcat容器使用的鏡像版本。container_name: tomcat8.5指定了Tomcat容器的名稱。ports將Tomcat容器的8080端口映射到宿主機的8080端口。volumes將宿主機的目錄與Tomcat容器的目錄進行掛載,用于存儲Tomcat的webapps和logs文件。environment指定了Tomcat容器的環(huán)境變量,這里設(shè)置了時區(qū)為Asia/Shanghai。links指定了Tomcat容器與MySQL容器的鏈接,使用MySQL容器的別名db。db是MySQL容器的服務(wù)名稱。image: mysql:8.0.15指定了MySQL容器使用的鏡像版本。restart: always表示容器在出現(xiàn)問題或重新啟動時,會自動重新啟動。environment指定了MySQL容器的環(huán)境變量,包括MySQL的根密碼、數(shù)據(jù)庫名稱以及用戶名和密碼。volumes將宿主機的目錄與MySQL容器的目錄進行掛載,用于持久化存儲MySQL的數(shù)據(jù)。ports將MySQL容器的3306端口映射到宿主機的4306端口。networks指定了容器使用的網(wǎng)絡(luò),這里都使用了名為mynetwork的自定義網(wǎng)絡(luò)。mynetwork是自定義網(wǎng)絡(luò)的名稱,driver: bridge指定了網(wǎng)絡(luò)的驅(qū)動程序為橋接模式。
這樣,您可以通過運行docker-compose up命令來啟動這些容器。
2.使用docker-compose創(chuàng)建并啟動項目所需要的容器
::進入docker-compose.yml文件所在的目錄 ::命令啟動 docker-compose up -d

可以看到容器已啟動:

3.使用SQLyog連接docker里的mysql容器
MySQL容器的3306端口映射到宿主機的4306端口,所以這里的端口號填寫4306

出現(xiàn)錯誤2058表明在使用sqlyog連接MySQL時,發(fā)生了caching_sha2_password插件無法加載的問題。
這是由于MySQL 8.0版本開始默認使用caching_sha2_password作為身份驗證插件,而較舊的MySQL客戶端(如sqlyog)可能不支持該插件。
在MySQL容器中重新創(chuàng)建用戶:
- 新建cmd窗口
::在正在運行的容器中 查找到mysql容器的名稱或id docker ps :: 在mysql容器中打開交互式終端 docker exec -it mysql8.0 sh #登錄mysql mysql -h localhost -u root -p 123456 -- 設(shè)置root用戶密碼過期規(guī)則為從不過期 (Set the root user password expiration rule to never expire) ALTER USER 'root'@'localhost' IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER; -- 為root用戶設(shè)置密碼,并使用mysql_native_password插件進行驗證 (Set a password for the root user and verify it using the mysql_native_password plug-in) ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456'; -- 刷新權(quán)限,使修改后的權(quán)限生效 (Refresh permissions to make the new permissions take effect) FLUSH PRIVILEGES;
docker exec -it mysql:8.0 sh 是一個Docker命令,用于在名為 mysql 的8.0版本鏡像的容器中打開一個交互式的shell終端。
docker exec是用于在正在運行的容器中執(zhí)行命令的Docker命令。-it是兩個選項的組合。-i表示保持標(biāo)準輸入打開,以便在終端中輸入命令,-t表示分配偽終端,從而允許我們與終端進行交互。mysql:8.0是指要操作的容器的名稱(或容器ID)。這里通過指定鏡像名稱和版本來創(chuàng)建一個新的容器并啟動交互式Shell。sh是要在容器中執(zhí)行的shell命令。也可以使用bash,取決于鏡像的配置。
使用以上命令,我們可以進入正在運行的mysql:8.0容器的shell終端,以便執(zhí)行其他命令或與容器進行交互。
請注意,您需要確保已經(jīng)使用正確的鏡像名稱和版本以及已經(jīng)運行了名為 mysql8.0 的容器。
再次使用SQLyog連接數(shù)據(jù)庫

完成一個springboot項目,打包war
1.導(dǎo)入項目的mysql數(shù)據(jù)庫
導(dǎo)入項目中使用的mysql數(shù)據(jù)庫
/* testDocker.sql */ CREATE DATABASE /*!32312 IF NOT EXISTS*/`testdocker0901` /*!40100 DEFAULT CHARACTER SET utf8 */; USE `testdocker0901`; /*Table structure for table `student` */ DROP TABLE IF EXISTS `student`; CREATE TABLE `student` ( `id` int(10) NOT NULL AUTO_INCREMENT COMMENT 'id', `name` varchar(10) NOT NULL COMMENT '學(xué)生姓名', `sex` tinyint(1) NOT NULL COMMENT '1男0女', `age` int(3) NOT NULL COMMENT '年齡', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8; /*Data for the table `student` */ insert into `student`(`id`,`name`,`sex`,`age`) values (1,'張三',0,23),(2,'李四',1,20),(3,'王五',1,22);


2.配置項目數(shù)據(jù)庫的連接
在你的Spring Boot項目中,你可以通過配置文件或者代碼來配置連接到MySQL容器的數(shù)據(jù)庫連接。
配置文件方式:
1.打開你的Spring Boot項目中的application.properties或application.yml文件。
2.在配置文件中,設(shè)置以下屬性來配置MySQL連接:
spring.datasource.url=jdbc:mysql://db:3306/testdocker0901?useUnicode=true&characterEncoding=utf8&useSSL=true&serverTimezone=GMT spring.datasource.username=root spring.datasource.password=123456 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
這里的 db是你在Docker Compose文件中命名的MySQL容器的別名,testdocker0901 是你在MySQL容器中的數(shù)據(jù)庫名稱。
- 正確的連接參數(shù)是
useUnicode=true&characterEncoding=utf8mb4。 - 另外,MySQL 8.0默認啟用了SSL,因此需要將
useSSL設(shè)置為true。 - 最后,還需要設(shè)置
serverTimezone為適當(dāng)?shù)臅r區(qū),以確保日期和時間的正確性。
3.使用命令mvn package 打包

4.將war包部署到tomcat容器中
在將war包重命名為testTomcatDocker.war并放置到E://Docker/tomcat/webapps目錄的過程中,您可以通過以下步驟完成:
- 將您的war包命名為
testTomcatDocker.war。 - 將重命名的
testTomcatDocker.war文件放置到您的本地文件系統(tǒng)上的E://Docker/tomcat/webapps目錄中。
確保您已按照上述路徑創(chuàng)建了E://Docker/tomcat/webapps目錄。這樣一來,Tomcat容器啟動時將會將該目錄掛載到容器內(nèi)部,從而使war包可供Tomcat服務(wù)器加載和運行。
請確保您的Docker Compose文件已正確配置將您的本地目錄E://Docker/tomcat/webapps掛載到Tomcat容器的/usr/local/tomcat/webapps目錄。這樣可以確保應(yīng)用程序能夠在容器中正確訪問war包。
瀏覽器中訪問 http://localhost:8080/testTomcatDocker

將war包重命名為ROOT.war ,重新部署
瀏覽器訪問 http://localhost:8080 ,點擊按鈕請求數(shù)據(jù),能正常訪問,問題解決!

總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
docker安裝redis(鏡像安裝)的實現(xiàn)示例
這篇文章主要介紹了docker安裝redis(鏡像安裝)的實現(xiàn)示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考,一起跟隨小編過來看看吧2019-02-02
docker run -v 掛載數(shù)據(jù)卷異常,容器狀態(tài)一直是restarting的解決
這篇文章主要介紹了docker run -v 掛載數(shù)據(jù)卷異常,容器狀態(tài)一直是restarting的解決方案,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03
快速設(shè)置Docker的三種網(wǎng)絡(luò)代理配置方式
這篇文章主要介紹了快速設(shè)置Docker的三種網(wǎng)絡(luò)代理配置方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-04-04
docker獲取Let''s Encrypt永久免費SSL證書的方法
在本篇文章里小編給大家分享了一篇關(guān)于docker獲取Let's Encrypt永久免費SSL證書的方法,以后需要的朋友們可以參考下。2021-01-01

