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

作者简介:🏅定制软件云计算领域优质创作者🏅定制软件新星计划第三季python定制软件赛道第一名🏅 🏅
✒️个人主页:
💊个人社区:定制软件欢迎您的加入!

定制软件为大家推荐一款刷题神奇 

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

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

目录


1. 关于Tomcat

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

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

  1. $ docker search tomcat | wc -l
  2. 285

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

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

2. 准备工作 

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

创建Dockerfile和run.sh文件:

  1. $ mkdir tomcat7.0_jdk1.6
  2. $ cd tomcat7.0_jdk1.6/
  3. $ touch Dockerfile run.sh
下载Tomcat,可以到官方网站下载最新的版本,也可以直接使用下面链接中给出的版本:
$ wget http://mirror.bit.edu.cn/apache/tomcat/tomcat-7/v7.0.56/bin/apache-tomcat- 7.0.56.zip
解压后,tomcat7.0_jdk1.6目录结构应如下所示(多余的压缩包文件已经被删除):
  1. $ ls
  2. Dockerfile apache-tomcat-7.0.56 jdk run.sh

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

 Dockerfile文件内容如下:

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

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

  1. #!/bin/bash
  2. if [ -f /.tomcat_admin_created ]; then
  3. echo "Tomcat 'admin' user already created"
  4. exit 0
  5. fi
  6. #generate password
  7. PASS=${TOMCAT_PASS:-$(pwgen -s 12 1)}
  8. _word=$( [ ${TOMCAT_PASS} ] && echo "preset" || echo "random" )
  9. echo "=> Creating and admin user with a ${_word} password in Tomcat"
  10. sed -i -r 's/<\/tomcat-users>//' ${CATALINA_HOME}/conf/tomcat-users.xml
  11. echo '<role rolename="manager-gui"/>' >> ${CATALINA_HOME}/conf/tomcat-users.xml
  12. echo '<role rolename="manager-script"/>' >> ${CATALINA_HOME}/conf/tomcat-users.xml
  13. echo '<role rolename="manager-jmx"/>' >> ${CATALINA_HOME}/conf/tomcat-users.xml
  14. echo '<role rolename="admin-gui"/>' >> ${CATALINA_HOME}/conf/tomcat-users.xml
  15. echo '<role rolename="admin-script"/>' >> ${CATALINA_HOME}/conf/tomcat-users.xml
  16. 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
  17. echo "=> Done!" touch /.tomcat_admin_created
  18. echo "========================================================================"
  19. echo "You can now configure to this Tomcat server using:" echo ""
  20. echo " admin:${PASS}" echo ""
  21. echo "========================================================================"

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

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

4. 创建和测试镜像 

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

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

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

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

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

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

查看映射的端口信息:

  1. $ docker ps
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. 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
在本地使用浏览器登录Tomcat管理界面,访问本地的49158端口,即 http://127.0.0.1:49158 ,如图

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

成功进入管理界面,如图

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

 👑👑👑结束语👑👑👑

为大家推荐一款刷题神奇 

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

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

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发