千家信息网

如何在docker中部署Tomcat web

发表于:2025-01-22 作者:千家信息网编辑
千家信息网最后更新 2025年01月22日,Tomcat简介Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开
千家信息网最后更新 2025年01月22日如何在docker中部署Tomcat web

Tomcat简介

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,Tomcat 5支持最新的Servlet 2.4 和JSP 2.0 规范。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

Tomcat优点

1、兼有可扩du展性和安全性。假如单位时间内访问请求zhi数急剧增加,可以用相对较低的费dao用增加前端的能力。

2、比较容易扩展。由于是通过在这台功能强大的服务器上运行的单个servlet容器,实际上也就不需要考虑session状态在分布式环境下的维护这类复杂的问题。

3、台后端服务器在外界不可以访问,网上的黑客只能访问前端的web服务器,不能直接访问后端的应用服务器,这就提高了安全性。但这并不意味着黑客们不能通过网络浏览器进行其它形式的攻击。

一、 准备工作

  1. 关闭selinux服务
    getenforce 查看selinux状态,并关闭selinux,否则启动docker时会报错。
    [root@localhost ~]# getenforce 查看selinux状态
    Disabled
    修改selinux配置文件

    docker启动报错信息:

    修改完selinux后重启服务器:
    [root@localhost ~]# reboot
    (注:安装软件为docker的可能会遇到这个问题,安装软件为docker-ce可能不会遇到。)

  2. 下载安装docker-ce
    [root@localhost ~]#yum list | grep docker-ce 检查yum 源的docker包信息
    [root@localhost~]#yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo 安装rpm更新源
    [root@localhost ~]# yum list docker-ce --showduplicates | sort -r 查看仓库中docker版本
    [root@localhost ~]#yum install -y docker-ce 安装docker
    [root@localhost ~]#systemctl strat docker.service 启动docker程序
    [root@localhost ~]# systemctl status docker.service 查看docker运行状态


[root@localhost ~]#systemctl enable docker.service 添加开机启动
[root@localhost ~]# docker version 查看docker版本
Client: Docker Engine - Community
Version: 19.03.5
API version: 1.40
Go version: go1.12.12
Git commit: 633a0ea
Built: Wed Nov 13 07:25:41 2019
OS/Arch: linux/amd64
Experimental: false

  1. 部署jave环境
    wget https://download.oracle.com/otn/java/jdk/8u231-b11/5b13a193868b4bf28bcb45c792fce896/jdk-8u231-linux-x64.tar.gz?AuthParam=1575959715_a901df40b664e3cff9415b957ddf441e
    [root@localhost ~]# docker cp jdk-8u231-linux-x64.tar.gz 4c069f9a9851:/root 将jdk拷贝到容器中
    拷贝命令:docker cp <.bashrc文件路径> <镜像name或image_ID>:<文件存放路径>
    [root@localhost ~]# docker exec -it tomcat /bin/bash 进入Tomcat容器
    root@4c069f9a9851:~# cd /root/
    root@4c069f9a9851:~# tar -zxvf jdk-8u231-linux-x64.tar.gz 解压jdk
    修改环境变量,在.bashrc中添加jdk变量,添加以下代码。
    export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_231
    export JRE_HOME=${JAVA_HOME}/jre
    export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
    export PATH=${JAVA_HOME}/bin:$PATH

    重启Tomcat容器:
    [root@localhost src]# docker ps -a
    CONTAINERID IMAGE COMMAND CREATED STATUS PORTS NAMES
    e14bcf5dd711 training/sinatra "/bin/bash" 19 hours ago Exited (0) 19 hours ago kind_golick
    4c069f9a9851 tomcat "catalina.shrun" 19 hours ago Up 17h ours 0.0.0.0:8081->8080/tcp tomcat
    [root@localhost src]# docker restart 4c069f9a9851

    [root@localhost src]# docker restart tomcat
    二、 安装web应用
    [root@localhost ~]# docker search tomcat 在网上服务器查找有关Tomcat镜像信息

    我们选择"STARS"资源最多的进行拉取
    [root@localhost ~]# docker pull docker.io/tomcat 拉取Tomcat镜像
    [root@localhost ~]# docker run -d --name tomcat -p 8081:8080 docker.io/tomcat 后台运行Tomcat镜像
    若端口被占用,可以指定容器和主机的映射端口,前者是外围访问端口,后者是容器内部端口。 -d参数:容器会在后台运行并不会把输出的结果打印到宿主机上面。使用 -d 参数启动后会返回一个唯一的 id。
    注:在此处遇到在不运行这条命令时Tomcat镜像无法启动。错误如下:
    [root@localhost ~]# docker start docker.io/tomcat
    Error response from daemon: No such container: docker.io/tomcat
    Error: failed to start containers: docker.io/tomcat
    其次在查看镜像状态时,不显示任何信息:
    [root@localhost ~]# docker ps -a
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

[root@localhost ~]# docker run -d --name tomcat -p 8081:8080 docker.io/tomcat

[root@localhost ~]# systemctl status firewalld.service 查看防火墙运行状态

[root@localhost ~]# docker start tomcat
注:
前提:在此处由于前面将防火墙关闭,导致在启动Tomcat镜像时,无法启动。
原因:由于Tomcat镜像需要用到NAT服务,关闭防火墙导致NAT服务无法使用。
问题信息:
[root@localhost ~]# docker start tomcat
Error response from daemon: driver failed programming external connectivity on endpoint tomcat (826ed3a9043296bc37b913c8f0cd900fe7424ffdcb93ff22d5f95fc39070a21f): (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 8081 -j DNAT --to-destination 172.17.0.2:8080 ! -i docker0: iptables: No chain/target/match by that name.

[root@localhost ~]# docker ps -a 查看镜像信息

注意Tomcat镜像的PORTS信息是否是0.0.0.0:8081->8080/tcp内容,是的话直接访问IP:8081,不是的话可能需要做NAT转换,自定义端口访问。
三、 效果图

四、 部署网页测试
将web数据拷贝到Tomcat容器中
[root@localhost ~]# docker cp XXX.war 4c069f9a9851:/usr/local/tomcat/webapps
[root@localhost ~]# docker exec -it 4c069f9a9851 /bin/bash 进入Tomcat容器
root@4c069f9a9851:/usr/local/tomcat# cd webapps/
root@4c069f9a9851:/usr/local/tomcat/webapps# ls
ROOT docs examples host-manager index.html manager
退出docker容器,Ctrl+p+q
重新启动容器,docker restart tomcat
到此web部署就算完成了。
可参考:https://blog.csdn.net/liqz666/article/details/82180581
五、 常用命令
ip addr/ip link/ ifconfig:查看宿主机里ip地址(宿主机表示是虚拟机)

systemctl start docker/service start docker:启动docker服务

systemctl stop docker:关闭docker服务

docker run:启动container

docker seach xxxx(镜像名称):检索镜像

docker pull xxx(镜像名称):拉取镜像

docker images:列出镜像

docker --version:查看docker的版本信息

docker exec Container Id:进入容器

docker exec -it NAMES(自定义名称) /bin/bash:进入--name命名的容器

docker exec NAMES(容器的自定义名称)-it bash:进入容器里进行操作

docker attach Container Id:进入到容器的终端

docker inspect IMAGE ID:显示容器或镜像的元数据

[root@(container id)]:比如root@24527d42d3eb表示已进入docker里的一个CONTAINER ID的容器内部

docker ps:查看docker里运行的容器(status为Up....表示运行中)

docker ps -a:查看docker里已停止或正在运行的容器(status为Exit)

docker start CONTAINER ID :如果容器的状态为Exit,用它来启动容器

docker stop CONTAINER ID :停止正在运行的容器,删除一个容器必须先要停止

docker restart :当部署web项目的war文件,到tomcat里的webapps里面了,重启一下docker服务,就自动解压了war文件

docker rm CONTAINER ID :删除容器

docker rm $(docker ps -a -q):删除所有已停止的容器;

docekr rmi IMAGE ID:删除镜像

rm -rf xxxx:强制删除某个war.文件或目录、文件

docker cp /xxx.war CONTAINER ID :/usr/local/tomcat/webapps:从/根目录复制一个打包后的Java web war文件 到tomcat容器里的webapps工作目录里

docker exec CONTAINER ID ls /usr/local/tomcat:默认的 安装tomcat镜像的webapps目录

docker run -name xxx -p (自定义端口号,用来访问的):(容器的端口号:比如tomcat的8080,mysql的3306) -d docker.io/tomcat(镜像名称):表示在docker里运行一个tomcat容器,如果没有镜像,自动pull一个tomcat的镜像
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
--name 为容器取一个名字

-p 容器要映射的端口号

-d:后台运行

-t:进入终端

-i:获得一个交互式的连接,通过获取container的输入

/bin/bash:在container中启动一个bash shell

举例:docker run --name tomcat -p 8081:8080 -d tomcat

六、 查看docker日志
[root@localhost ~]# journalctl -u docker.service 查看docker日志

容器 镜像 服务 运行 信息 服务器 状态 文件 名称 端口 软件 口号 后台 命令 宿主 宿主机 拷贝 版本 环境 目录 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 云服务器是物理机还是虚拟机 探究软件开发行业前景的目的 台州银行软件开发中心 软件开发竞争压力 软件开发负责人工作配合 怎么关闭淘宝虚拟服务器 丰南区信息网络技术创造辉煌 计算机网络技术笔记免费下载 重庆工控软件开发定制 如何访问数据库服务器 用友数据库及独占任务 rs260服务器管理口密码 浅谈如何提升网络安全监管 crt连数据库 赛迪网络安全吗 网络安全百问百答试题答案 数据库处理技术经历了那五个阶段 英雄联盟服务器炸了好了没 在软件开发模型中提出最早 昭通迪庆互联网科技 金融信息与互联网科技 数据库修改列类型用什么 在线教育软件开发上市公司 奉化手机游戏软件开发怎么样 深圳互联网科技红利 服务器装系统怎么装到机械硬盘上 javaweb操作数据库 网络安全相关课程 pc软件开发需要学习什么 苍南网络安全宣传红包
0