将javaweb项目部署到docker容器中的完整流程(为自己下次部署提供借鉴)

简介: 将javaweb项目部署到docker容器中的完整流程(为自己下次部署提供借鉴)

一、前期准备

1、在服务端下载镜像时,国外的镜像比较慢,可以访问dev.aliyun.com/search.html,使用阿里云的镜像安装tomcat。


(1)因为我使用了shipyard来管理容器,8080端口,所以tomcat默认的8080端口就无法使用了,需要使用其他端口映射到8080端口,这个很实用,因为我们服务器上可能部署很多项目,不同的项目可以使用不同的端口映射到8080端口。

docker run -d -p 9999:8080 --name mytomcat80  registry.cn-hangzhou.aliyuncs.com/youdao/tomcat

2、因为项目中用的了mysql数据库,用相同的方法安装mysql镜像,同时配置mysql,可以通过本机的Navicat进行远程连接。

3、因为我使用的是阿里云服务器,需要把配置安全组,把我们进行远程登陆的端口都暴露出来。

二、开始部署

1、打包war包传输到阿里云服务器上

(1)我使用的是eclipse,在本地进行调试后,右击项目>Export>Web>WAR file,打包到桌面。

(2)使用xftp6连接我们的服务器传输到服务端。

2、将项目部署到docker中tomcat的wepapp中。

(1)在shipyard上查看自己tomcat容器中webapps的地址。

(2)到达上传war的路径,然后执行把war包传到webapps下。

docker cp medicinesystem.war tomcat_hospital:/usr/local/tomcat/

3、修改我们的项目server.xml,使得访问时直接地址访问,不需要加项目名前缀。

(1)进入tomcat容器。

docker exec -it 容器名称 /bin/bash

(2)到达conf目录下的修改我们的项目server.xml,使得访问时直接地址访问,不需要加项目名前缀。在中添加后保存:

<Context docBase="medicinesystem" path="" reloadable="true" source="org.eclipse.jst.jee.server:medicinesystem

4、重启tomcat容器,然后进行访问。

(1)重启后,页面是正常显示了,可是登陆时,报错了,我又需要查看错误日志

docker logs tomcat_hospital

报了这样的错,最终确定我用的是jndi数据库连接池,在本地开发时,把其配置在了tomcat中的context.xml中,而服务器上的镜像没有。


Caused by: java.sql.SQLException: No suitable driver at java.sql.DriverManager.getDriver(DriverManager.java:315) at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createConnectionFactory(BasicDataSource.java:2144)


(2)进入容器在tomcat的context.xml中最下面,添加

<Resource auth="Container" 
driverClassName="com.mysql.jdbc.Driver" 
initialSize="6" 
maxActive="100"
maxIdle="10" 
maxTotal="12" 
maxWait="5000" 
name="jdbc/test" 
password="123456" 
type="javax.sql.DataSource" url="jdbc:mysql://localhost:3306/doctersystem" username="root"/>

(3)再次重启tomcat容器,然后访问,这里有一个启动所有容器的命令,重启阿里云服务器时,有助于快速启动所有容器。

docker start $(docker ps -a | awk '{ print $1}' | tail -n +2)

5、再次重启发现tomcat无法启动。

(1)怎么重启都打开不了,可能是配置tomcat时配置错了,这时候进入容器命令不能使用,无法在容器内部进行。可以将无法开启的容器的文件复制到当前目录,进行修改,后面的点不要忘啦。

docker cp mytomcatbeida:/usr/local/tomcat/conf/server.xml .

(2)修改好后把正确的配置文件传回容器

docker cp server.xml mytomcatbeida:/usr/local/tomcat/conf/server.xml

三、结果展示

通过以上步骤,最终访问我们部署的网址就可以看到了。

image.png

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
目录
相关文章
|
5月前
|
监控 Kubernetes 安全
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
蒋星熠Jaxonic,技术探索者,以代码为笔,在二进制星河中书写极客诗篇。专注Docker与容器化实践,分享从入门到企业级应用的深度经验,助力开发者乘风破浪,驶向云原生新世界。
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
|
5月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
709 6
|
5月前
|
监控 Linux 调度
【赵渝强老师】Docker容器的资源管理机制
本文介绍了Linux CGroup技术及其在Docker资源管理中的应用。通过实例演示了如何利用CGroup限制应用程序的CPU、内存和I/O带宽使用,实现系统资源的精细化控制,帮助理解Docker底层资源限制机制。
573 6
|
5月前
|
存储 关系型数据库 MySQL
MySQL Docker 容器化部署全指南
MySQL是一款开源关系型数据库,广泛用于Web及企业应用。Docker容器化部署可解决环境不一致、依赖冲突问题,实现高效、隔离、轻量的MySQL服务运行,支持数据持久化与快速迁移,适用于开发、测试及生产环境。
868 4
|
运维 Java Devops
阿里云云效操作报错合集之部署docker时遇到报错,该怎么办
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
运维 Kubernetes 前端开发
【云原生】阿里云服务器部署 Docker Swarm集群
阿里云服务器 一键部署 Docker Swarm 集群!
1088 0
【云原生】阿里云服务器部署 Docker Swarm集群
|
弹性计算 数据可视化 关系型数据库
使用阿里云部署基于docker的mysql云服务
本篇文章将介绍如何使用阿里云安装docker、部署mysql服务,并远程连接至远端mysql
1055 1
使用阿里云部署基于docker的mysql云服务