浅谈在centos中使用docker部署war包项目(jsp篇)


前言:
长话短说,一时兴起,是本人第一篇文章,遇到的实际问题解决后产生的记录的想法,概述如有不全,望各位大佬多多指教!

一、环境的准备

我这里准备的是centos7的虚拟镜像环境(VMware)跟shell5的连接工具(用来传输文件),Navicat15(数据库可视化工具)。

链接:https://pan.baidu.com/s/1s6yRXsWtbvxsg164Cir-bg
提取码:6666

其他的我就不在这里写了,准备工作做好,下面稍微讲解一下docker

二、Docker优点

1.简化程序

Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,便可以实现虚拟化。Docker改变了虚拟化的方式,使开发者可以直接将自己的成果放入Docker中进行管理。方便快捷已经是 Docker的最大优势,过去需要用数天乃至数周的 任务,在Docker容器的处理下,只需要数秒就能完成。

2.避免选择恐惧症

如果你有选择恐惧症,还是资深患者。Docker 帮你 打包你的纠结!比如 Docker 镜像;Docker 镜像中包含了运行环境和配置,所以 Docker 可以简化部署多种应用实例工作。比如 Web 应用、后台应用、数据库应用、大数据应用比如 Hadoop 集群、消息队列等等都可以打包成一个镜像部署。

3.节省开支

一方面,云计算时代到来,使开发者不必为了追求效果而配置高额的硬件,Docker 改变了高性能必然高价格的思维定势。Docker 与云的结合,让云空间得到更充分的利用。不仅解决了硬件管理的问题,也改变了虚拟化的方式。

三、Docker结构

Docker daemon( Docker守护进程)

Docker daemon是一个运行在宿主机( DOCKER-HOST)的后台进程。可通过 Docker客户端与之通信。

1.Client( Docker客户端)

Docker客户端是 Docker的用户界面,它可以接受用户命令和配置标识,并与 Docker daemon通信。图中, docker build等都是 Docker的相关命令。

2.Images( Docker镜像)

Docker镜像是一个只读模板,它包含创建 Docker容器的说明。它和系统安装光盘有点像,使用系统安装光盘可以安装系统,同理,使用Docker镜像可以运行 Docker镜像中的程序。

3.Container(容器)

容器是镜像的可运行实例。镜像和容器的关系有点类似于面向对象中,类和对象的关系。可通过 Docker API或者 CLI命令来启停、移动、删除容器。

4.Registry

Docker Registry是一个集中存储与分发镜像的服务。构建完 Docker镜像后,就可在当前宿主机上运行。但如果想要在其他机器上运行这个镜像,就需要手动复制。此时可借助 Docker Registry来避免镜像的手动复制。

一个 Docker Registry可包含多个 Docker仓库,每个仓库可包含多个镜像标签,每个标签对应一个 Docker镜像。这跟 Maven的仓库有点类似,如果把 Docker Registry比作 Maven仓库的话,那么 Docker仓库就可理解为某jar包的路径,而镜像标签则可理解为jar包的版本号。

四、Docker与虚拟机比较

作为一种轻量级的虚拟化方式,Docker在运行应用上跟传统的虚拟机方式相比具有显著优势:

Docker容器很快,启动和停止可以在秒级实现,这相比传统的虚拟机方式要快得多。

Docker容器对系统资源需求很少,一台主机上可以同时运行数千个Docker容器。

Docker通过类似Git的操作来方便用户获取、分发和更新应用镜像,指令简明,学习成本较低。

Docker通过Dockerfile配置文件来支持灵活的自动化创建和部署机制,提高工作效率。

五、Docker安装

Docker 是一个开源的商业产品,有两个版本:社区版(Community Edition,缩写为 CE)和企业版(Enterprise Edition,缩写为 EE)。企业版包含了一些收费服务,个人开发者一般用不到。

Docker 要求 CentOS 系统的内核版本在 3.10以上 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker 。

直接上大佬的详细链接:(我要讲的点在下面部署war包)

https://cloud.tencent.com/developer/article/1701451

六、Tomcat镜像的下载

  • docker version //查看docker是否安装成功

docker version 查看版本信息

  • systemctl start docker //开启docker服务
    在这里插入图片描述

  • docker pull tomcat //默认拉取下载最新的镜像
    -docker pull tomcat:8.5.38-jre8 //也可以指定特定的版本
    在这里插入图片描述
    下载完成之后查看镜像是否下载成功

  • docker images //查看所有安装的镜像
    在这里插入图片描述

  • docker run -p 8080:8080 -d --name tomcat tomcat

  • 在这里插入图片描述

  • -p 8080:8080 对应的是 宿主机端口:容器端口

  • –name tomcat1 命名为tomcat1

  • tomcat:8.5.38-jre8 使用的镜像文件名

  • docker ps //查看正在运行的容器
    在这里插入图片描述
    为空则代表没有正在运行的容器

  • docker ps -a //包括正在运行的跟未运行得到容器
    在这里插入图片描述

  • docker start tomcat1 //通过容器名启动,也可以通过容器前面的id启动,方法就是把容器id替换掉容器名tomcat1
    在这里插入图片描述
    -docker ps
    在这里插入图片描述
    启动成功
    也可以将此容器设置为开机自启动
    启动时加–restart=always

  • docker run -itd --name tocmat1 -p 8080:8080 --restart=always tomcat:8.5.38-jre8

  • 注意:此种方法是重新创建一个新的tomcat容器,如果已存在同名容器则会报错,如果已经创建tomcat容器那就使用下面的方法

  • always //在容器已经stop掉或Docker stoped/restarted的时候才重启容器

如果已经启动的项目

  • docker update --restart=always tomcat1 //最后的tomcat1是容器名,也可以用容器id替换
    在这里插入图片描述
    还有另外一种方法生成tomcat容器:
  • docker run -itd --name tomcat2 --restart=always -p 8081:8080 -v /root/homework/tomcat/webapps:/usr/local/tomcat/webapps tomcat:8.5.38-jre8
    在这里插入图片描述
  • -v 挂载文件 将容器内部文件夹映射到自定义的文件中,如果没有回自动生成
  • /root/homework/tomcat/webapps 是物理机的文件地址
  • :/usr/local/tomcat/webapps 是tomcat2容器的内部文件位置
  • 这里用8081:8080是因为宿主机的8080端口已经被我给容器tomcat1了,这里我没有删掉tomcat1,端口被占用看,所以只能给别的未被占用的端口,或者停止tomcat1容器的使用也是可以将tomcat2的8080端口映射到宿主机的8080端口
    在这里插入图片描述
  • 这里有个问题,就是将tomcat容器的webapps文件挂载到宿主机的时候,访问ip:端口是不会有显示,如果没挂载的话是有显示的,但是不影响war包的部署
  • 挂载webapps文件的tomcat容器:
    在这里插入图片描述未挂载文件的tomcat容器:
    在这里插入图片描述

七、MYSQL镜像的下载

  • docker mysql //默认拉取最新的镜像

  • 我这里安装的5.7.19,根据自己需求来更改后面的版本号
    在这里插入图片描述

  • docker run --name mysql:5.7.19 -p 13306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql_5.7.19 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    在这里插入图片描述

  • –name 容器名字

  • -p 13306:3306 物理机端口:容器内部端口

  • -e 运行参数 初始化root用户的密码

  • -d 后台运行mysql:5.7.19下载的镜像名字加标签

  • –character-set-server=utf8mb4 : 设置 MySQL 服务器的默认编码为 utf8mb4

  • –collation-server=utf8mb4_unicode_ci : 设置 MySQL 服务器的默认排序规则为 utf8mb4_unicode_ci

  • docker ps //查看容器是否正常启动在这里插入图片描述

  • docker update --restart=always mysql_5.7.19 //将mysql——5.7.19容器设置为自启动
    在这里插入图片描述

八、war包部署

  • 打开开发工具,我这里是eclipse,将可以成功运行的java项目打包成war(我这里是jsp项目)
    在这里插入图片描述在这里插入图片描述
  • 这时我们可以看到刚刚选择存放的路径多了一个war包
    在这里插入图片描述
  • 使用数据库图形化工具Navicat连接数据库
  • 导出此项目相关的数据库
    在这里插入图片描述在这里插入图片描述
  • 之后就能到存放路径看到一个sql文件
    在这里插入图片描述
  • 新建一个mysql数据库连接
    在这里插入图片描述
  • 打开创建一个数据库,新建查询
    在这里插入图片描述
    -重新打开数据库连接可以看到数据库已经创建好
    在这里插入图片描述
  • 双击打开数据库之后右键运行SQL文件找到刚刚存放的sql文件
    在这里插入图片描述在这里插入图片描述
  • 成功导入
    在这里插入图片描述
  • 刷新然后打开表就能看见数据
    在这里插入图片描述
  • 此时在docker的mysql容器中查看数据是否存在
  • docker exec -it mysql_5.7.19 /bin/bash
  • -i -t 等价于 -it 表示insert, 进入 ; /bin/bash 表示 shell 脚本交互界面
    在这里插入图片描述
  • mysql -uroot -proot // -p 后面的root是之前设置的root的密码
    在这里插入图片描述
  • show databases; //显示所有的数据库
    在这里插入图片描述
  • 选择某个数据库;显示当前数据库所有表
    在这里插入图片描述
  • 数据传输成功,现在开始上传war包
  • 在xshell已经连接的命令窗口中输入sz然后回车,找到刚刚存放的war包传输
  • 传输完成之后输入 ls查看当前目录文件在这里插入图片描述
  • 我这里用的容器是挂载了tomcat2的webapps文件到宿主文件的,所以我只用把war包复制到挂载的文件夹中
  • cp PersonManager.war homework/tomcat/webapps/
    在这里插入图片描述
  • 进入挂载的文件夹中查看文件
    在这里插入图片描述
  • 重启tomcat2容器
    -docker restart tomcat2 //tomcat2已经启动就用restart,没有启动就用start
    在这里插入图片描述
  • 去挂载的目录查看war是否被解析
    在这里插入图片描述
    这里已经被解析,我们到浏览器用ip:端口/项目名去访问在这里插入图片描述**

!!!这里特别要注意的是Linux系统区分大小写,Windows系统不区分

**

这里我登录发现登不上去
在这里插入图片描述

  • 但是我的账户跟密码都是对的,最后查阅资料,请教大神最后终于解决,这里大家要注意!!!
  • 找到你项目连接数据库的配置文件,使用vi 或者 vim 空格 配置文件名称
    在这里插入图片描述
  • 前面的localhost应该是mysql容器的ip,端口是容器的端口3306,后面是数据库名要注意大小写,我的数据库中都是小写,这里要改成小写
  • docker inspect mysql容器名 //先查看mysql容器的内部ip
  • docker inspect mysql_5.7.19
    在这里插入图片描述
  • 正确配置为
    在这里插入图片描述
  • docker restart tomcat2 //重启tomcat容器
    在这里插入图片描述
  • 再去访问项目
    在这里插入图片描述登录成功!!

猜你喜欢

转载自blog.csdn.net/qq_43913213/article/details/123431625
今日推荐