docker

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > 云和虚拟化 > docker > docker tomcat8.5容器部署war包

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

作者:qx09

文章介绍了如何使用Docker和docker-compose将一个Spring Boot项目的WAR文件部署到Tomcat 8.5容器中,并详细描述了创建和启动容器、配置数据库连接以及打包和部署WAR文件的步骤

使用docker-compose部署war项目到tomcat8.5容器

使用docker-compose 创建、启动容器

1.创建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 文件中用于指定容器和本地文件系统之间共享数据的部分。

示例中,我们有两个卷配置:

volumes:
  - E://Docker/tomcat/webapps:/usr/local/tomcat/webapps
  - E://Docker/tomcat/logs:/usr/local/tomcat/logs

这两个卷配置将本地文件系统中的两个目录挂载到Tomcat容器中的相应位置。

通过使用卷,您可以轻松地在主机和容器之间共享数据,并在不影响容器的情况下进行文件更改。

请注意:

路径分隔符在Windows上是反斜杠(\),但在Docker中需要使用正斜杠(/)。因此,在您的实际配置中,可能需要将路径改为 E:/Docker/tomcat/webappsE:/Docker/tomcat/logs

这是一个使用Docker Compose编排Tomcat和MySQL容器的docker-compose.yml文件。

这样,您可以通过运行docker-compose up命令来启动这些容器。

2.使用docker-compose创建并启动项目所需要的容器

::进入docker-compose.yml文件所在的目录
::命令启动
docker-compose up -d

可以看到容器已启动:

3.使用SQLyog连接docker里的mysql容器

MySQL容器的3306端口映射到宿主机的4306端口,所以这里的端口号填写4306

出现错误2058表明在使用sqlyog连接MySQL时,发生了caching_sha2_password插件无法加载的问题。

这是由于MySQL 8.0版本开始默认使用caching_sha2_password作为身份验证插件,而较旧的MySQL客户端(如sqlyog)可能不支持该插件。

在MySQL容器中重新创建用户:

::在正在运行的容器中 查找到mysql容器的名称或id
docker ps
:: 在mysql容器中打开交互式终端
docker exec -it mysql8.0 sh

#登录mysql
mysql -h localhost -u root -p
123456
-- 设置root用户密码过期规则为从不过期 (Set the root user password expiration rule to never expire)
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER;
 
-- 为root用户设置密码,并使用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';
 
-- 刷新权限,使修改后的权限生效 (Refresh permissions to make the new permissions take effect)
FLUSH PRIVILEGES;

docker exec -it mysql:8.0 sh 是一个Docker命令,用于在名为 mysql 的8.0版本镜像的容器中打开一个交互式的shell终端。

使用以上命令,我们可以进入正在运行的mysql:8.0容器的shell终端,以便执行其他命令或与容器进行交互。

请注意,您需要确保已经使用正确的镜像名称和版本以及已经运行了名为 mysql8.0 的容器。

再次使用SQLyog连接数据库

完成一个springboot项目,打包war

1.导入项目的mysql数据库

导入项目中使用的mysql数据库

/* 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 '学生姓名',
  `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.配置项目数据库的连接

在你的Spring Boot项目中,你可以通过配置文件或者代码来配置连接到MySQL容器的数据库连接。

配置文件方式:

1.打开你的Spring Boot项目中的application.propertiesapplication.yml文件。

2.在配置文件中,设置以下属性来配置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容器中的数据库名称。

3.使用命令mvn package 打包

4.将war包部署到tomcat容器中

在将war包重命名为testTomcatDocker.war并放置到E://Docker/tomcat/webapps目录的过程中,您可以通过以下步骤完成:

  1. 将您的war包命名为testTomcatDocker.war
  2. 将重命名的testTomcatDocker.war文件放置到您的本地文件系统上的E://Docker/tomcat/webapps目录中。

确保您已按照上述路径创建了E://Docker/tomcat/webapps目录。这样一来,Tomcat容器启动时将会将该目录挂载到容器内部,从而使war包可供Tomcat服务器加载和运行。

请确保您的Docker Compose文件已正确配置将您的本地目录E://Docker/tomcat/webapps挂载到Tomcat容器的/usr/local/tomcat/webapps目录。这样可以确保应用程序能够在容器中正确访问war包。

浏览器中访问 http://localhost:8080/testTomcatDocker

将war包重命名为ROOT.war ,重新部署

浏览器访问 http://localhost:8080 ,点击按钮请求数据,能正常访问,问题解决!

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文