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

可以看到容器已啟動:

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

出現(xiàn)錯誤2058表明在使用sqlyog連接MySQL時(shí),發(fā)生了caching_sha2_password插件無法加載的問題。
這是由于MySQL 8.0版本開始默認(rèn)使用caching_sha2_password作為身份驗(yàn)證插件,而較舊的MySQL客戶端(如sqlyog)可能不支持該插件。
在MySQL容器中重新創(chuàng)建用戶:
- 新建cmd窗口
::在正在運(yùn)行的容器中 查找到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插件進(jìn)行驗(yàn)證 (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是用于在正在運(yùn)行的容器中執(zhí)行命令的Docker命令。-it是兩個選項(xiàng)的組合。-i表示保持標(biāo)準(zhǔn)輸入打開,以便在終端中輸入命令,-t表示分配偽終端,從而允許我們與終端進(jìn)行交互。mysql:8.0是指要操作的容器的名稱(或容器ID)。這里通過指定鏡像名稱和版本來創(chuàng)建一個新的容器并啟動交互式Shell。sh是要在容器中執(zhí)行的shell命令。也可以使用bash,取決于鏡像的配置。
使用以上命令,我們可以進(jìn)入正在運(yùn)行的mysql:8.0容器的shell終端,以便執(zhí)行其他命令或與容器進(jìn)行交互。
請注意,您需要確保已經(jīng)使用正確的鏡像名稱和版本以及已經(jīng)運(yùn)行了名為 mysql8.0 的容器。
再次使用SQLyog連接數(shù)據(jù)庫

完成一個springboot項(xiàng)目,打包war
1.導(dǎo)入項(xiàng)目的mysql數(shù)據(jù)庫
導(dǎo)入項(xiàng)目中使用的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.配置項(xiàng)目數(shù)據(jù)庫的連接
在你的Spring Boot項(xiàng)目中,你可以通過配置文件或者代碼來配置連接到MySQL容器的數(shù)據(jù)庫連接。
配置文件方式:
1.打開你的Spring Boot項(xiàng)目中的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默認(rèn)啟用了SSL,因此需要將
useSSL設(shè)置為true。 - 最后,還需要設(shè)置
serverTimezone為適當(dāng)?shù)臅r(shí)區(qū),以確保日期和時(shí)間的正確性。
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容器啟動時(shí)將會將該目錄掛載到容器內(nèi)部,從而使war包可供Tomcat服務(wù)器加載和運(yùn)行。
請確保您的Docker Compose文件已正確配置將您的本地目錄E://Docker/tomcat/webapps掛載到Tomcat容器的/usr/local/tomcat/webapps目錄。這樣可以確保應(yīng)用程序能夠在容器中正確訪問war包。
瀏覽器中訪問 http://localhost:8080/testTomcatDocker

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

總結(jié)
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
docker 移除掉運(yùn)行不正常的container操作
這篇文章主要介紹了docker 移除掉運(yùn)行不正常的container操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03
詳解如何用docker安裝laravel開發(fā)環(huán)境
本篇文章主要介紹了詳解如何用docker安裝laravel開發(fā)環(huán)境,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-02-02
詳解利用Dockerfile構(gòu)建mysql鏡像并實(shí)現(xiàn)數(shù)據(jù)的初始化及權(quán)限設(shè)置
本篇文章主要介紹了詳解利用Dockerfile構(gòu)建mysql鏡像并實(shí)現(xiàn)數(shù)據(jù)的初始化及權(quán)限設(shè)置 ,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06
Docker 教程之?dāng)?shù)據(jù)管理詳細(xì)介紹
這篇文章主要介紹了Docker 教程之?dāng)?shù)據(jù)管理詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下2017-01-01
docker部署nginx訪問宿主機(jī)服務(wù)并使用緩存的操作方法
這篇文章主要介紹了docker部署nginx訪問宿主機(jī)服務(wù)并使用緩存的操作方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,感興趣的朋友一起看看吧2024-04-04

