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

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 将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

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
2天前
|
Kubernetes Cloud Native 持续交付
云原生之旅:Docker容器化与Kubernetes集群管理
【9月更文挑战第33天】在数字化转型的浪潮中,云原生技术如同一艘航船,带领企业乘风破浪。本篇文章将作为你的航海指南,从Docker容器化的基础讲起,直至Kubernetes集群的高级管理,我们将一起探索云原生的奥秘。你将学习到如何封装应用、实现环境隔离,以及如何在Kubernetes集群中部署、监控和扩展你的服务。让我们启航,驶向灵活、可伸缩的云原生未来。
|
5天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker与Kubernetes入门
【9月更文挑战第30天】在云计算的浪潮中,云原生技术正以前所未有的速度重塑着软件开发和运维领域。本文将通过深入浅出的方式,带你了解云原生的核心组件——Docker容器和Kubernetes集群,并探索它们如何助力现代应用的构建、部署和管理。从Docker的基本命令到Kubernetes的资源调度,我们将一起开启云原生技术的奇妙之旅。
|
8天前
|
Kubernetes Linux 开发者
深入探索Docker容器化技术的奥秘
深入探索Docker容器化技术的奥秘
16 1
|
9天前
|
应用服务中间件 nginx Docker
docker应用部署---nginx部署的配置
这篇文章介绍了如何使用Docker部署Nginx服务器,包括搜索和拉取Nginx镜像、创建容器并设置端口映射和目录映射,以及如何创建一个测试页面并使用外部机器访问Nginx服务器。
|
6天前
|
网络协议 安全 开发者
掌握 Docker 网络:构建复杂的容器通信
在 Docker 容器化环境中,容器间的通信至关重要。本文详细介绍了 Docker 网络的基础知识,包括网络驱动、端口映射和命名等核心概念,并深入探讨了 Bridge、Host、Overlay 和 Macvlan 四种网络类型的特点及应用场景。此外,还提供了创建、连接、查看和删除自定义网络的命令示例,以及高级网络配置方法,如网络命名空间、DNS 解析和安全通信配置,帮助开发者构建更健壮的容器化应用。
|
7天前
|
Cloud Native 持续交付 Docker
深入解析Docker容器化技术及其在生产环境中的应用
深入解析Docker容器化技术及其在生产环境中的应用
10 0
|
8天前
|
存储 Kubernetes Docker
深入探索容器化技术:Docker 实战与 Kubernetes 管理
深入探索容器化技术:Docker 实战与 Kubernetes 管理
23 0
|
8天前
|
Docker 容器
docker容器内需要执行sudo hwclock --systohc吗
docker容器内需要执行sudo hwclock --systohc吗
|
8天前
|
Docker 容器
6-16|docker怎么把容器内的文件传出来
6-16|docker怎么把容器内的文件传出来
|
1月前
|
应用服务中间件 Shell nginx
Docker容器操作基础命令
关于Docker容器操作基础命令的教程,涵盖了从启动、查看、删除容器到端口映射和容器信息获取的一系列常用命令及其使用方法。
63 14
下一篇
无影云桌面