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

 更新时间:2025年01月04日 10:20:58   作者: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容器中的相应位置。

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

总结

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

相关文章

  • Docker 命令教程(附中文解释)

    Docker 命令教程(附中文解释)

    这篇文章主要介绍了Docker 命令教程的相关资料,在学习Docker的过程中,特地把所以命令实验了一番并整理,希望大家尽快掌握此部分的知识,有需要的小伙伴可以参考下
    2016-10-10
  • docker 移除掉运行不正常的container操作

    docker 移除掉运行不正常的container操作

    这篇文章主要介绍了docker 移除掉运行不正常的container操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • 详解如何用docker安装laravel开发环境

    详解如何用docker安装laravel开发环境

    本篇文章主要介绍了详解如何用docker安装laravel开发环境,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • Docker安装logstash的详细过程

    Docker安装logstash的详细过程

    这篇文章主要介绍了Docker安装logstash的详细过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • docker拉取镜像的超时的问题解决

    docker拉取镜像的超时的问题解决

    本文主要介绍了如何设置国内镜像源来解决Docker拉取镜像超时的问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-11-11
  • 详解利用Dockerfile构建mysql镜像并实现数据的初始化及权限设置

    详解利用Dockerfile构建mysql镜像并实现数据的初始化及权限设置

    本篇文章主要介绍了详解利用Dockerfile构建mysql镜像并实现数据的初始化及权限设置 ,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • Docker容器数据卷技术介绍

    Docker容器数据卷技术介绍

    这篇文章主要为大家介绍了Docker容器数据卷技术介绍,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • Docker 教程之数据管理详细介绍

    Docker 教程之数据管理详细介绍

    这篇文章主要介绍了Docker 教程之数据管理详细介绍的相关资料,需要的朋友可以参考下
    2017-01-01
  • Centos 6.5中安装docker的步骤(简洁版)

    Centos 6.5中安装docker的步骤(简洁版)

    这篇文章主要介绍了Centos 6.5中安装docker的步骤(简洁版),需要的朋友可以参考下
    2016-10-10
  • docker部署nginx访问宿主机服务并使用缓存的操作方法

    docker部署nginx访问宿主机服务并使用缓存的操作方法

    这篇文章主要介绍了docker部署nginx访问宿主机服务并使用缓存的操作方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,感兴趣的朋友一起看看吧
    2024-04-04

最新评论