【云原生 | 23】Docker运行Web服务实战之Tomcat

简介: Tomcat是由Apache软件基金会下属的Jakarta项目开发的一个Servlet容器,按照Sun Microsystems提供的技术规范,实现了对Servlet和Java Server Page(JSP)的支持。同时,它提供了作为Web服务器的一些特有功能,如Tomcat管理和控制平台、安全域管理和Tomcat阀等。由于Tomcat本身也内含了一个HTTP服务器,也可以当作一个单独的Web服务器来使用

 作者简介:🏅云计算领域优质创作者🏅新星计划第三季python赛道第一名🏅 阿里云ACE认证高级工程师🏅

✒️个人主页:小鹏linux

💊个人社区:小鹏linux(个人社区)欢迎您的加入!

目录

1. 关于Tomcat

2. 准备工作

3. Dockerfile文件和其他脚本文件

4. 创建和测试镜像

👑👑👑结束语👑👑👑


1. 关于Tomcat

Tomcat是由Apache软件基金会下属的Jakarta项目开发的一个Servlet容器,按照Sun Microsystems提供的技术规范,实现了对Servlet和Java Server Page(JSP)的支持。同时,它提供了作为Web服务器的一些特有功能,如Tomcat管理和控制平台、安全域管理和Tomcat阀等。由于Tomcat本身也内含了一个HTTP服务器,也可以当作一个单独的Web服务器来使用。下面介绍如何定制Tomcat镜像。

image.gif

首先,尝试在Docker Hub上搜索已有的Tomcat相关镜像的个数:

$ docker search tomcat | wc -l 
285

image.gif

可以看到,已经有285个相关镜像。如是个人开发或测试,可以随意选择一个镜像,按照提示启动应用即可。

下面以Tomcat 7.0为例介绍定制Tomcat镜像的步骤。

2. 准备工作

创建tomcat7.0_jdk1.6文件夹,从www.oracle.com网站上下载sun_jdk1.6压缩包,解压为jdk目录

创建Dockerfile和run.sh文件:

$ mkdir tomcat7.0_jdk1.6 
$ cd tomcat7.0_jdk1.6/ 
$ touch Dockerfile run.sh

image.gif

下载Tomcat,可以到官方网站下载最新的版本,也可以直接使用下面链接中给出的版本:

$ wget http://mirror.bit.edu.cn/apache/tomcat/tomcat-7/v7.0.56/bin/apache-tomcat- 7.0.56.zip

image.gif

解压后,tomcat7.0_jdk1.6目录结构应如下所示(多余的压缩包文件已经被删除):

$ ls 
Dockerfile apache-tomcat-7.0.56 jdk run.sh

image.gif

3. Dockerfile文件和其他脚本文件

Dockerfile文件内容如下:

FROM sshd:Dockerfile
#设置继承自用户创建的sshd镜像
MAINTAINER docker_user (user@docker.com)
#下面是一些创建者的基本信息
#设置环境变量,所有操作都是非交互式的
ENV DEBIAN_FRONTEND noninteractive
#注意这里要更改系统的时区设置
RUN echo "Asia/Shanghai" > /etc/timezone && \ dpkg-reconfigure -f noninteractive tzdata
#安装跟tomcat用户认证相关的软件
RUN apt-get install -yq --no-install-recommends wget pwgen ca-certificates && \ apt-get clean && \ rm -rf /var/lib/apt/lists/*
#设置tomcat的环境变量,若读者有其他的环境变量需要设置,也可以在这里添加。
ENV CATALINA_HOME /tomcat 
ENV JAVA_HOME /jdk
#复制tomcat和jdk文件到镜像中
ADD apache-tomcat-7.0.56 /tomcat 
ADD jdk /jdk 
ADD create_tomcat_admin_user.sh /create_tomcat_admin_user.sh 
ADD run.sh /run.sh 
RUN chmod +x /*.sh 
RUN chmod +x /tomcat/bin/*.sh
EXPOSE 8080 
CMD ["/run.sh"]

image.gif

创建tomcat用户和密码脚本文件create_tomcat_admin_user.sh文件,内容为:

#!/bin/bash
if [ -f /.tomcat_admin_created ]; then
    echo "Tomcat 'admin' user already created" 
    exit 0
fi
#generate password 
PASS=${TOMCAT_PASS:-$(pwgen -s 12 1)} 
_word=$( [ ${TOMCAT_PASS} ] && echo "preset" || echo "random" ) 
echo "=> Creating and admin user with a ${_word} password in Tomcat" 
sed -i -r 's/<\/tomcat-users>//' ${CATALINA_HOME}/conf/tomcat-users.xml 
echo '<role rolename="manager-gui"/>' >> ${CATALINA_HOME}/conf/tomcat-users.xml 
echo '<role rolename="manager-script"/>' >> ${CATALINA_HOME}/conf/tomcat-users.xml 
echo '<role rolename="manager-jmx"/>' >> ${CATALINA_HOME}/conf/tomcat-users.xml 
echo '<role rolename="admin-gui"/>' >> ${CATALINA_HOME}/conf/tomcat-users.xml 
echo '<role rolename="admin-script"/>' >> ${CATALINA_HOME}/conf/tomcat-users.xml 
echo "<user username=\"admin\" password=\"${PASS}\" roles=\"manager-gui,manager- script,manager-jmx,admin-gui, admin-script\"/>" >> ${CATALINA_HOME}/conf/ tomcat-users.xml echo '</tomcat-users>' >> ${CATALINA_HOME}/conf/tomcat-users.xml
echo "=> Done!" touch /.tomcat_admin_created 
echo "========================================================================" 
echo "You can now configure to this Tomcat server using:" echo "" 
echo " admin:${PASS}" echo "" 
echo "========================================================================"

image.gif

编写run.sh脚本文件,内容为:

#!/bin/bash 
if [ ! -f /.tomcat_admin_created ]; then 
    /create_tomcat_admin_user.sh 
fi
/usr/sbin/sshd -D & 
exec ${CATALINA_HOME}/bin/catalina.sh run

image.gif

4. 创建和测试镜像

通过下面的命令创建镜像tomcat7.0:jdk1.6:

$ docker build -t tomcat7.0:jdk1.6 .

image.gif

启动一个tomcat容器进行测试:

$ docker run -d -P tomcat7.0:jdk1.6 3cd4238cb32a713a3a1c29d93fbfc80cba150653b5eb8bd7629bee957e7378ed

image.gif

通过docker logs得到tomcat的密码aBwN0CNCPckw:

$ docker logs 3cd 
=> Creating and admin user with a random password in Tomcat 
=> Done! ======================================================================== 
You can now configure to this Tomcat server using: 
    admin:aBwN0CNCPckw

image.gif

查看映射的端口信息:

$ docker ps 
CONTAINER ID     IMAGE     COMMAND     CREATED     STATUS     PORTS     NAMES 
3cd4238cb32a tomcat7.0:jdk1.6 "/run.sh" 4 seconds ago Up 3 seconds 0.0.0.0:49157->22/tcp, 0.0.0.0:49158->8080/tcp cranky_wright

image.gif

在本地使用浏览器登录Tomcat管理界面,访问本地的49158端口,即http://127.0.0.1:49158,如图

image.gif

输入从docker logs中得到的密码,如图所示。

image.gif

成功进入管理界面,如图

image.gif

在生产环境中,可以通过使用-v参数来挂载Tomcat的日志文件、程序所在目录、以及与Tomcat相关的配置。

👑👑👑结束语👑👑👑

为大家推荐一款刷题神奇 点击链接访问牛客网

各大互联网大厂面试真题。基础题库到进阶题库等各类面试题应有尽有!

牛客网面经合集,满足大厂面试技术深度,快速构建Java核心知识体系大厂面试官亲授,备战面试与技能提升,主要考点+主流场景+内功提升+真题解析

image.gif

目录
相关文章
|
Java Linux 虚拟化
【Docker】(1)Docker的概述与架构,手把手带你安装Docker,云原生路上不可缺少的一门技术!
1. Docker简介 1.1 Docker是什么 为什么docker会出现? 假定您在开发一款平台项目,您的开发环境具有特定的配置。其他开发人员身处的环境配置也各有不同。 您正在开发的应用依赖于您当前的配置且还要依赖于某些配置文件。 您的企业还拥有标准化的测试和生产环境,且具有自身的配置和一系列支持文件。 **要求:**希望尽可能多在本地模拟这些环境而不产生重新创建服务器环境的开销 问题: 要如何确保应用能够在这些环境中运行和通过质量检测? 在部署过程中不出现令人头疼的版本、配置问题 无需重新编写代码和进行故障修复
950 2
|
监控 Docker 容器
在Docker容器中运行打包好的应用程序
在Docker容器中运行打包好的应用程序
1475 164
|
SQL 数据库 Docker
【赵渝强老师】在Docker中运行达梦数据库
本文介绍了在Docker容器中部署达梦数据库(DM 8)的具体步骤,包括创建文件夹、下载安装包、导入镜像、启动容器、登录数据库及查看状态等操作。同时,通过视频讲解辅助理解。文中还分析了将数据库服务容器化的潜在问题,如数据安全性、硬件资源争用、网络带宽占用和额外隔离带来的挑战,指出数据库服务在生产环境中可能不适合容器化的原因。
2467 4
【赵渝强老师】在Docker中运行达梦数据库
|
NoSQL Redis 数据库
Docker平台上的Redis镜像运行
这就是如何在Docker平台上运行Redis镜像的全部过程。走进Docker和Redis的世界,探索更多可能!
933 10
|
前端开发 应用服务中间件 nginx
docker安装nginx,前端项目运行
通过上述步骤,你可以轻松地在Docker中部署Nginx并运行前端项目。这种方法不仅简化了部署流程,还确保了环境的一致性,提高了开发和运维的效率。确保按步骤操作,并根据项目的具体需求进行相应的配置调整。
1780 25
|
监控 Java 应用服务中间件
tomcat相关概念与部署tomcat多实例-zabbix监控(docker部署)
通过上述步骤,您可以在Ubuntu系统上成功编译并安装OpenCV 4.8。这种方法不仅使您能够定制OpenCV的功能,还可以优化性能以满足特定需求。确保按照每一步进行操作,以避免常见的编译问题。
478 25
|
监控 Java 应用服务中间件
tomcat相关概念与部署tomcat多实例-zabbix监控(docker部署)
通过上述步骤,您可以在Ubuntu系统上成功编译并安装OpenCV 4.8。这种方法不仅使您能够定制OpenCV的功能,还可以优化性能以满足特定需求。确保按照每一步进行操作,以避免常见的编译问题。
303 23
|
存储 Kubernetes 开发者
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
Docker 是一种开源的应用容器引擎,允许开发者将应用程序及其依赖打包成可移植的镜像,并在任何支持 Docker 的平台上运行。其核心概念包括镜像、容器和仓库。镜像是只读的文件系统,容器是镜像的运行实例,仓库用于存储和分发镜像。Kubernetes(k8s)则是容器集群管理系统,提供自动化部署、扩展和维护等功能,支持服务发现、负载均衡、自动伸缩等特性。两者结合使用,可以实现高效的容器化应用管理和运维。Docker 主要用于单主机上的容器管理,而 Kubernetes 则专注于跨多主机的容器编排与调度。尽管 k8s 逐渐减少了对 Docker 作为容器运行时的支持,但 Doc
1074 5
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
|
监控 Java 应用服务中间件
tomcat相关概念与部署tomcat多实例-zabbix监控(docker部署)
通过上述步骤,您可以在Ubuntu系统上成功编译并安装OpenCV 4.8。这种方法不仅使您能够定制OpenCV的功能,还可以优化性能以满足特定需求。确保按照每一步进行操作,以避免常见的编译问题。
496 22
|
弹性计算 Linux Docker
快速搭建Docker服务
Docker 是一个开源的容器引擎,利用ECS快速部署一个Docker服务。
331 0

热门文章

最新文章