二、docker之tomcat8.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容器中的相应位置。

  • - E://Docker/tomcat/webapps:/usr/local/tomcat/webapps:这个卷配置将本地文件系统中的 E://Docker/tomcat/webapps 目录挂载到Tomcat容器中的 /usr/local/tomcat/webapps 目录。这意味着Tomcat容器中的 /usr/local/tomcat/webapps 目录与本地文件系统中的 E://Docker/tomcat/webapps 目录是同步的。任何对这两个目录中的文件的更改都将在容器和本地之间同步。这可以用来将应用程序部署到Tomcat容器中。

  • - E://Docker/tomcat/logs:/usr/local/tomcat/logs:这个卷配置将本地文件系统中的 E://Docker/tomcat/logs 目录挂载到Tomcat容器中的 /usr/local/tomcat/logs 目录。这意味着Tomcat容器的日志将保存在本地文件系统的 E://Docker/tomcat/logs 目录中。您可以在本地文件系统中查看和分析Tomcat容器的日志文件。

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

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


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

  • version: '3' 指定了Docker Compose文件格式的版本号。

  • services 定义了您要运行的服务(容器)。

  • tomcat8 是Tomcat容器的服务名称。

  • restart: always 表示容器在出现问题或重新启动时,会自动重新启动。

  • image: tomcat:8.5 指定了Tomcat容器使用的镜像版本。

  • container_name: tomcat8.5 指定了Tomcat容器的名称。

  • ports 将Tomcat容器的8080端口映射到宿主机的8080端口。

  • volumes 将宿主机的目录与Tomcat容器的目录进行挂载,用于存储Tomcat的webapps和logs文件。

  • environment 指定了Tomcat容器的环境变量,这里设置了时区为Asia/Shanghai。

  • links 指定了Tomcat容器与MySQL容器的链接,使用MySQL容器的别名 db

  • db 是MySQL容器的服务名称。

  • image: mysql:8.0.15 指定了MySQL容器使用的镜像版本。

  • restart: always 表示容器在出现问题或重新启动时,会自动重新启动。

  • environment 指定了MySQL容器的环境变量,包括MySQL的根密码、数据库名称以及用户名和密码。

  • volumes 将宿主机的目录与MySQL容器的目录进行挂载,用于持久化存储MySQL的数据。

  • ports 将MySQL容器的3306端口映射到宿主机的4306端口。

  • networks 指定了容器使用的网络,这里都使用了名为 mynetwork 的自定义网络。

  • mynetwork 是自定义网络的名称,driver: bridge 指定了网络的驱动程序为桥接模式。

这样,您可以通过运行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容器中重新创建用户:

新建cmd窗口

::在正在运行的容器中 查找到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终端。

  • docker exec 是用于在正在运行的容器中执行命令的Docker命令。
  • -it 是两个选项的组合。-i 表示保持标准输入打开,以便在终端中输入命令,-t 表示分配伪终端,从而允许我们与终端进行交互。
  • mysql:8.0 是指要操作的容器的名称(或容器ID)。这里通过指定镜像名称和版本来创建一个新的容器并启动交互式Shell。
  • sh 是要在容器中执行的shell命令。也可以使用 bash,取决于镜像的配置。

使用以上命令,我们可以进入正在运行的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容器中的数据库名称。

    正确的连接参数是useUnicode=true&characterEncoding=utf8mb4。另外,MySQL 8.0默认启用了SSL,因此需要将useSSL设置为true。最后,还需要设置serverTimezone为适当的时区,以确保日期和时间的正确性。

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 ,点击按钮请求数据,能正常访问,问题解决!

请添加图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qx09

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值