【系列4】使用Dockerfile创建带tomcat的Centos Docker镜像

简介:

   Tomcat服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下普遍使用,是开发和调试JSP程序的首选。
   Tomcat最初是Sun的软件架构师詹姆斯.邓肯.戴维森开发的。后来在他的帮助下Tomcat成为开源项目,并由Sun贡献给Apache软件基金会。
   当配置正确时,Apache为HTML页面服务,而Tomcat实际上运行JSP页面和Servlet。另外,Tomcat和IIS等web服务器一样,具有处理HTML页面的功能(但处理静态HTML的能力不如Apache),另外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式。
 ① 设计Tomcat的Dockerfile
 首先,尝试在Dockerhub上搜索Tomcat相关镜像的个数:
[root@docker1 ~]# docker search tomcat |wc -l
26
可以看到,已经有26个相关镜像。如果是个人开发或测试,可以随意选择一个镜像,按照提示启动应用即可。
若准备在生产环境中使用,这些镜像都不是那么合适了。原因有三个方面:
    ◆ 项目需要的Tomcat版本可能不同
    ◆ 项目需要的Tomcat变量不一致
    ◆ 项目需要的JDK可能不一致
    
 ② 因此,比较好的方式应该是由架构师通过Dockerfile或者其他方式构建好统一的镜像,然后分发给项目组成员来进行。
   下面以sun_jdk 1.6、tomcat 7.0、centos 7.4为诶环境介绍如何定制自己的tomcat镜像。


  (1)准备工作:
  创建tomcat7.0_jdk1.6文件夹,从www.oracle.com上下载sun_jdk 1.6压缩包,解压为jdk目录。
  创建Dockerfile和run.sh文件
[root@docker1 ~]# mkdir tomcat7.0_jdk1.6
[root@docker1 ~]# cd tomcat7.0_jdk1.6/
[root@docker1 tomcat7.0_jdk1.6]# touch Dockerfile run.sh
[root@docker1 tomcat7.0_jdk1.6]# wget https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-7/v7.0.82/bin/apache-tomcat-7.0.82.zip
--2017-11-27 22:31:47--  https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-7/v7.0.82/bin/apache-tomcat-7.0.82.zip
Resolving mirrors.tuna.tsinghua.edu.cn (mirrors.tuna.tsinghua.edu.cn)... 101.6.6.178, 2402:f000:1:416:101:6:6:177
Connecting to mirrors.tuna.tsinghua.edu.cn (mirrors.tuna.tsinghua.edu.cn)|101.6.6.178|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 9588812 (9.1M) [application/zip]
Saving to: ‘apache-tomcat-7.0.82.zip’

100%[================================================================================================================>] 9,588,812   3.38MB/s   in 2.7s   

2017-11-27 22:31:50 (3.38 MB/s) - ‘apache-tomcat-7.0.82.zip’ saved [9588812/9588812]
解压后,tomcat7.0_jdk1.6目录底下应如下所示(多余的压缩包已经被删除):
[root@docker1 tomcat7.0_jdk1.6]# tar -xf apache-tomcat-7.0.82.zip

[root@docker1 tomcat7.0_jdk1.6]# rz -y                  #上传jdk-6u45-linux-x64.bin包
[root@docker1 tomcat7.0_jdk1.6]# chmod 755 jdk-6u45-linux-x64.bin
[root@docker1 tomcat7.0_jdk1.6]# ./jdk-6u45-linux-x64.bin
[root@docker1 tomcat7.0_jdk1.6]# ls
apache-tomcat-7.0.82  apache-tomcat-7.0.82.zip Dockerfile  jdk1.6.0_45  jdk-6u45-linux-x64.bin  jdk-6u45-linux-x64.zip  run.sh
[root@docker1 tomcat7.0_jdk1.6]# rm -f jdk-6u45-linux-x64.bin jdk-6u45-linux-x64.zip apache-tomcat-7.0.82.zip 
[root@docker1 tomcat7.0_jdk1.6]# ls
apache-tomcat-7.0.82  Dockerfile  jdk1.6.0_45  run.sh

 

(2)编写Dockerfile文件

#设置继承来自镜像

FROM docker.io/centos:latest 


#下面是一些创建这的基本信息

MAINTAINER waitfish from dockerpool.com


#设置环境变量,所以操作都是非交互式的

ENV DEBIAN_FRONTEND noninteractive


RUN echo "Asia/Shanghai" > /etc/timezone

#注意这里要更改系统的时区设置,因为在Web应用中经常会用到时区这个系统变量,默认的centos会让你的应用程序发生不可思议的效果


#设置tomcat对的环境变量,若读者有其他的环境变量需要设置,也可以在这里添加:

ENV CATALINA_HOME /tomcat

ENV JAVA_HOME /jdk


#复制tomcat和jdk文件到镜像中

ADD apache-tomcat-7.0.82 /tomcat

ADD jdk1.6.0_45 /jdk


#复制启动脚本至镜像,并赋予脚本可执行权限

ADD run.sh /run.sh

RUN chmod +x /*.sh

RUN chmod +x /tomcat/bin/*.sh


#我的tomcat接口,默认为8080

EXPOSE 8080


#设置自启动命令

CMD ["/run.sh"]


(3)编写Dockerfile文件

[root@docker1 tomcat7.0_jdk1.6]# cat run.sh 

#!/bin/bash

# 启动tomcat

exec ${CATALINA_HOME}/bin/catalina.sh run 

#启动startup.sh

#catalina.sh是调试模式


(4)建立tomcat7.0:jdk1.6镜像

[root@docker1 tomcat7.0_jdk1.6]# docker build -t tomcat7.0:jdk1.6 .

[root@docker1 tomcat7.0_jdk1.6]# docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

tomcat7.0           jdk1.6              581265694089        6 seconds ago       439.8 MB

......


(5)启动一个tomcat容器进行测试

[root@docker1 tomcat7.0_jdk1.6]# docker run -d -P tomcat7.0:jdk1.6

ac6d662434ffb9435740d0f452599e12349903f4387775155f0d7e057eac6a33

(6)查看映射的端口信息:

[root@docker1 tomcat7.0_jdk1.6]# docker ps

CONTAINER ID   IMAGE         COMMAND     CREATED       STATUS         PORTS              NAMES

ac6d662434ff tomcat7.0:jdk1.6  "/run.sh"     21 minutes ago  Up 21 minutes  0.0.0.0:32820->8080/tcp    thirsty_montalcini

(7)在本地使用浏览器登录Tomcat管理界面,访问10.0.0.10:32820,如下图所示:

QQ截图20171128170653.png



******************************************************************************************************************************************

******************************************************************************************************************************************

tomcat设置密码登录,参考 http://blog.51cto.com/sf1314/2048121 centos 使用 pwgen 生成高强度密码

(1)更改Dockerfile配置文件

[root@docker1 tomcat7.0_jdk1.6]# cat Dockerfile 

#设置继承来自镜像

FROM docker.io/centos:latest 


#下面是一些创建这的基本信息

MAINTAINER waitfish from dockerpool.com


#设置环境变量,所以操作都是非交互式的

ENV DEBIAN_FRONTEND noninteractive


RUN echo "Asia/Shanghai" > /etc/timezone 

#注意这里要更改系统的时区设置,因为在Web应用中经常会用到时区这个系统变量,默认的centos会让你的应用程序发生不可思议的效果


#安装跟tomcat用户认证相关的软件<-------------修改处

RUN yum update -y

RUN yum install -y wget pwgen ca-certificates gcc automake autoconf libtool make && yum clean all 

RUN tar -xf pwgen-2.08.tar.gz
WORKDIR pwgen-2.08

RUN ./configure && make && make install


#设置tomcat对的环境变量,若读者有其他的环境变量需要设置,也可以在这里添加:

ENV CATALINA_HOME /tomcat

ENV JAVA_HOME /jdk


#复制tomcat和jdk文件到镜像中

ADD apache-tomcat-7.0.82 /tomcat

ADD jdk1.6.0_45 /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"]


-----------------------------------------------------------------------------------------------------------------


[root@docker1 tomcat7.0_jdk1.6]# cat 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-scipt"/>' >> ${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-user>' >> ${CATALINA_HOME}/conf/tomcat-users.xml

echo "=> Done!"

touch /.tomcat_admin_created



echo "===================================================="

echo "You can now configure to this Tomcat serrver using:"

echo ""

echo "   admin:${PASS}"

echo ""

echo "===================================================="



*********************************************************************************************

附件:

apache-tomcat-7.0.82   http://down.51cto.com/data/2368971   

jdk-6u45-linux-x64.bin http://down.51cto.com/data/2369015 

pwgen-2.08.tar      http://down.51cto.com/data/2369589 



本文转自 Mr_sheng 51CTO博客,原文链接:http://blog.51cto.com/sf1314/2045202

相关文章
|
11月前
|
安全 Linux
CentOS下载ISO镜像的方法
访问CentOS官方网站(https://www.centos.org/download/),在“Downloads”页面找到ISO镜像下载链接,选择所需版本和架构(如x86_64)开始下载。CentOS分为Linux版和Stream版,前者每两年发行一次并提供10年安全维护,后者为滚动更新。旧版本可在Vault(https://vault.centos.org/)下载。建议选择DVD格式镜像,包含完整系统和常用软件。
12481 14
CentOS下载ISO镜像的方法
|
NoSQL 关系型数据库 应用服务中间件
docker基础篇:安装tomcat
docker基础篇:安装tomcat
356 64
|
11月前
|
监控 Linux PHP
【02】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-2月12日优雅草简化Centos stream8安装zabbix7教程-本搭建教程非docker搭建教程-优雅草solution
【02】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-2月12日优雅草简化Centos stream8安装zabbix7教程-本搭建教程非docker搭建教程-优雅草solution
395 20
|
11月前
|
网络协议 Linux 网络安全
docker centos镜像 npm安装包时报错“npm ERR! code ECONNRESET”
通过上述步骤,您可以有效解决在 Docker 中使用 CentOS 镜像安装 npm 包时遇到的 "npm ERR! code ECONNRESET" 错误。希望这些方法能帮助您顺利进行 npm 包的安装。
720 26
|
12月前
|
Ubuntu NoSQL Linux
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
600 6
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
|
12月前
|
监控 Java 应用服务中间件
tomcat相关概念与部署tomcat多实例-zabbix监控(docker部署)
通过上述步骤,您可以在Ubuntu系统上成功编译并安装OpenCV 4.8。这种方法不仅使您能够定制OpenCV的功能,还可以优化性能以满足特定需求。确保按照每一步进行操作,以避免常见的编译问题。
181 23
|
12月前
|
缓存 Linux
CentOS-6的iso下载地址镜像yum源
通过上述步骤,您可以成功下载CentOS 6的ISO镜像文件,并配置适用于CentOS 6的YUM源。尽管CentOS 6已经停止更新,但使用这些镜像和YUM源配置,可以继续在需要的环境中使用和维护CentOS 6系统。
5724 20
|
关系型数据库 MySQL 应用服务中间件
《docker基础篇:8.Docker常规安装简介》包括:docker常规安装总体步骤、安装tomcat、安装mysql、安装redis
《docker基础篇:8.Docker常规安装简介》包括:docker常规安装总体步骤、安装tomcat、安装mysql、安装redis
412 7
|
Unix Linux Docker
CentOS停更沉寂,RHEL巨变限制源代:Docker容器化技术的兴起助力操作系统新格局
操作系统是计算机系统的核心软件,管理和控制硬件与软件资源,为用户和应用程序提供高效、安全的运行环境。Linux作为开源、跨平台的操作系统,具有高度可定制性、稳定性和安全性,广泛应用于服务器、云计算、物联网等领域。其发展得益于庞大的社区支持,多种发行版如Ubuntu、Debian、Fedora等满足不同需求。
387 5
|
存储 Linux Docker
centos系统清理docker日志文件
通过以上方法,可以有效清理和管理CentOS系统中的Docker日志文件,防止日志文件占用过多磁盘空间。选择合适的方法取决于具体的应用场景和需求,可以结合手动清理、logrotate和调整日志驱动等多种方式,确保系统的高效运行。
1017 2