欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

docker之tomcat8.5容器中如何部署war包

 更新時(shí)間:2025年01月04日 10:20:58   作者:qx09  
文章介紹了如何使用Docker和docker-compose將一個(gè)Spring?Boot項(xiàng)目的WAR文件部署到Tomcat?8.5容器中,并詳細(xì)描述了創(chuàng)建和啟動(dòng)容器、配置數(shù)據(jù)庫(kù)連接以及打包和部署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

volumesdocker-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/webappsE:/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.propertiesapplication.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ò)以下步驟完成:

  1. 將您的war包命名為testTomcatDocker.war
  2. 將重命名的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)文章

最新評(píng)論