docker之tomcat8.5容器中如何部署war包
使用docker-compose部署war項(xiàng)目到tomcat8.5容器
使用docker-compose 創(chuàng)建、啟動(dò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: bridge
volumes
是 docker-compose.yml
文件中用于指定容器和本地文件系統(tǒng)之間共享數(shù)據(jù)的部分。
示例中,我們有兩個(gè)卷配置:
volumes: - E://Docker/tomcat/webapps:/usr/local/tomcat/webapps - E://Docker/tomcat/logs:/usr/local/tomcat/logs
這兩個(gè)卷配置將本地文件系統(tǒng)中的兩個(gè)目錄掛載到Tomcat容器中的相應(yīng)位置。
- E://Docker/tomcat/webapps:/usr/local/tomcat/webapps
:這個(gè)卷配置將本地文件系統(tǒng)中的E://Docker/tomcat/webapps
目錄掛載到Tomcat容器中的/usr/local/tomcat/webapps
目錄。這意味著Tomcat容器中的/usr/local/tomcat/webapps
目錄與本地文件系統(tǒng)中的E://Docker/tomcat/webapps
目錄是同步的。任何對(duì)這兩個(gè)目錄中的文件的更改都將在容器和本地之間同步。這可以用來(lái)將應(yīng)用程序部署到Tomcat容器中。- E://Docker/tomcat/logs:/usr/local/tomcat/logs
:這個(gè)卷配置將本地文件系統(tǒng)中的E://Docker/tomcat/logs
目錄掛載到Tomcat容器中的/usr/local/tomcat/logs
目錄。這意味著Tomcat容器的日志將保存在本地文件系統(tǒng)的E://Docker/tomcat/logs
目錄中。您可以在本地文件系統(tǒng)中查看和分析Tomcat容器的日志文件。
通過(guò)使用卷,您可以輕松地在主機(jī)和容器之間共享數(shù)據(jù),并在不影響容器的情況下進(jìn)行文件更改。
請(qǐng)注意:
路徑分隔符在Windows上是反斜杠(\),但在Docker中需要使用正斜杠(/)。因此,在您的實(shí)際配置中,可能需要將路徑改為 E:/Docker/tomcat/webapps
和 E:/Docker/tomcat/logs
。
這是一個(gè)使用Docker Compose編排Tomcat和MySQL容器的docker-compose.yml
文件。
version: '3'
指定了Docker Compose文件格式的版本號(hào)。services
定義了您要運(yùn)行的服務(wù)(容器)。tomcat8
是Tomcat容器的服務(wù)名稱。restart: always
表示容器在出現(xiàn)問(wèn)題或重新啟動(dòng)時(shí),會(huì)自動(dòng)重新啟動(dòng)。image: tomcat:8.5
指定了Tomcat容器使用的鏡像版本。container_name: tomcat8.5
指定了Tomcat容器的名稱。ports
將Tomcat容器的8080端口映射到宿主機(jī)的8080端口。volumes
將宿主機(jī)的目錄與Tomcat容器的目錄進(jìn)行掛載,用于存儲(chǔ)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)問(wèn)題或重新啟動(dòng)時(shí),會(huì)自動(dòng)重新啟動(dòng)。environment
指定了MySQL容器的環(huán)境變量,包括MySQL的根密碼、數(shù)據(jù)庫(kù)名稱以及用戶名和密碼。volumes
將宿主機(jī)的目錄與MySQL容器的目錄進(jìn)行掛載,用于持久化存儲(chǔ)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ū)動(dòng)程序?yàn)闃蚪幽J健?/li>
這樣,您可以通過(guò)運(yùn)行docker-compose up
命令來(lái)啟動(dòng)這些容器。
2.使用docker-compose創(chuàng)建并啟動(dòng)項(xiàng)目所需要的容器
::進(jìn)入docker-compose.yml文件所在的目錄 ::命令啟動(dòng) docker-compose up -d
可以看到容器已啟動(dòng):
3.使用SQLyog連接docker里的mysql容器
MySQL容器的3306端口映射到宿主機(jī)的4306端口,所以這里的端口號(hào)填寫(xiě)4306
出現(xiàn)錯(cuò)誤2058表明在使用sqlyog連接MySQL時(shí),發(fā)生了caching_sha2_password插件無(wú)法加載的問(wèn)題。
這是由于MySQL 8.0版本開(kāi)始默認(rèn)使用caching_sha2_password作為身份驗(yàn)證插件,而較舊的MySQL客戶端(如sqlyog)可能不支持該插件。
在MySQL容器中重新創(chuàng)建用戶:
- 新建cmd窗口
::在正在運(yùn)行的容器中 查找到mysql容器的名稱或id docker ps :: 在mysql容器中打開(kāi)交互式終端 docker exec -it mysql8.0 sh #登錄mysql mysql -h localhost -u root -p 123456 -- 設(shè)置root用戶密碼過(guò)期規(guī)則為從不過(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
是一個(gè)Docker命令,用于在名為 mysql
的8.0版本鏡像的容器中打開(kāi)一個(gè)交互式的shell終端。
docker exec
是用于在正在運(yùn)行的容器中執(zhí)行命令的Docker命令。-it
是兩個(gè)選項(xiàng)的組合。-i
表示保持標(biāo)準(zhǔn)輸入打開(kāi),以便在終端中輸入命令,-t
表示分配偽終端,從而允許我們與終端進(jìn)行交互。mysql:8.0
是指要操作的容器的名稱(或容器ID)。這里通過(guò)指定鏡像名稱和版本來(lái)創(chuàng)建一個(gè)新的容器并啟動(dòng)交互式Shell。sh
是要在容器中執(zhí)行的shell命令。也可以使用bash
,取決于鏡像的配置。
使用以上命令,我們可以進(jìn)入正在運(yùn)行的mysql:8.0容器的shell終端,以便執(zhí)行其他命令或與容器進(jìn)行交互。
請(qǐng)注意,您需要確保已經(jīng)使用正確的鏡像名稱和版本以及已經(jīng)運(yùn)行了名為 mysql8.0
的容器。
再次使用SQLyog連接數(shù)據(jù)庫(kù)
完成一個(gè)springboot項(xiàng)目,打包war
1.導(dǎo)入項(xiàng)目的mysql數(shù)據(jù)庫(kù)
導(dǎo)入項(xiàng)目中使用的mysql數(shù)據(jù)庫(kù)
/* 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ù)庫(kù)的連接
在你的Spring Boot項(xiàng)目中,你可以通過(guò)配置文件或者代碼來(lái)配置連接到MySQL容器的數(shù)據(jù)庫(kù)連接。
配置文件方式:
1.打開(kāi)你的Spring Boot項(xiàng)目中的application.properties
或application.yml
文件。
2.在配置文件中,設(shè)置以下屬性來(lái)配置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ù)庫(kù)名稱。
- 正確的連接參數(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
目錄的過(guò)程中,您可以通過(guò)以下步驟完成:
- 將您的war包命名為
testTomcatDocker.war
。 - 將重命名的
testTomcatDocker.war
文件放置到您的本地文件系統(tǒng)上的E://Docker/tomcat/webapps
目錄中。
確保您已按照上述路徑創(chuàng)建了E://Docker/tomcat/webapps
目錄。這樣一來(lái),Tomcat容器啟動(dòng)時(shí)將會(huì)將該目錄掛載到容器內(nèi)部,從而使war包可供Tomcat服務(wù)器加載和運(yùn)行。
請(qǐng)確保您的Docker Compose文件已正確配置將您的本地目錄E://Docker/tomcat/webapps
掛載到Tomcat容器的/usr/local/tomcat/webapps
目錄。這樣可以確保應(yīng)用程序能夠在容器中正確訪問(wèn)war包。
瀏覽器中訪問(wèn) http://localhost:8080/testTomcatDocker
將war包重命名為ROOT.war ,重新部署
瀏覽器訪問(wèn) http://localhost:8080 ,點(diǎn)擊按鈕請(qǐng)求數(shù)據(jù),能正常訪問(wèn),問(wèn)題解決!
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
docker 移除掉運(yùn)行不正常的container操作
這篇文章主要介紹了docker 移除掉運(yùn)行不正常的container操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-03-03詳解如何用docker安裝laravel開(kāi)發(fā)環(huán)境
本篇文章主要介紹了詳解如何用docker安裝laravel開(kāi)發(fā)環(huán)境,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-02-02Docker安裝logstash的詳細(xì)過(guò)程
這篇文章主要介紹了Docker安裝logstash的詳細(xì)過(guò)程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-09-09詳解利用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-06Docker 教程之?dāng)?shù)據(jù)管理詳細(xì)介紹
這篇文章主要介紹了Docker 教程之?dāng)?shù)據(jù)管理詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下2017-01-01Centos 6.5中安裝docker的步驟(簡(jiǎn)潔版)
這篇文章主要介紹了Centos 6.5中安裝docker的步驟(簡(jiǎn)潔版),需要的朋友可以參考下2016-10-10docker部署nginx訪問(wèn)宿主機(jī)服務(wù)并使用緩存的操作方法
這篇文章主要介紹了docker部署nginx訪問(wèn)宿主機(jī)服務(wù)并使用緩存的操作方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,感興趣的朋友一起看看吧2024-04-04