创建 tomcat 服务的镜像
如何设计 Tomcat 的 Dockerfile
$ sudo docker search tomcat |wc -l
285
在 dockerhub 上搜索与 tomcat 相关的镜像,有如此之多的返回。笔者建议,如是个人开发为图方便,可以随意选择一个镜像,按照提示启动应用即可。若准备在生产环境中使用,或者是几个人、团队协作的项目,上述这些镜像都不是那么合适了。
原因有三:
- 每个项目要求的 tomcat 版本不一致
- 每个项目要求的 tomcat 变量不一致
- 每个项目要求的 jdk 不一致
最好的方式应该是由架构师通过 dockerfile 或者其他方式构建好统一的镜像,然后分发给项目组所有成员
面就以 sun_jdk 1.6|tomcat 7.0|ubuntu 14.04 为环境介绍下如何定制自己的 tomcat 镜像。
准备工作
#创建 tomcat7.0_jdk1.6 文件夹
$ mkdir tomcat7.0_jdk1.6
$ cd tomcat7.0_jdk1.6/
#上传 jdk 到 tomcat7.0_jdk1.6 文件夹下面,也可以到本书的共享网盘下载(下载地址xxx),下载后用 unzip 解压,若没有 unzip 可以先在 windows 机器上用解压软件解压再上传到文件夹底下,也可以使用 apt-get install unzip 来安装解压软件 unzip。
$ 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
--2014-10-27 22:25:23-- http://mirror.bit.edu.cn/apache/tomcat/tomcat-7/v7.0.56/bin/apache-tomcat-7.0.56.zip
Resolving mirror.bit.edu.cn (mirror.bit.edu.cn)... 219.143.204.117, 2001:da8:204:2001:250:56ff:fea1:22
Connecting to mirror.bit.edu.cn (mirror.bit.edu.cn)|219.143.204.117|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 9466255 (9.0M) [application/zip]
Saving to: 'apache-tomcat-7.0.56.zip'
100%[===========================================================================================================>] 9,466,255 152KB/s in 70s
2014-10-27 22:26:34 (131 KB/s) - 'apache-tomcat-7.0.56.zip' saved [9466255/9466255]
#同样解压后,目前 tomcat7.0_jdk1.6 目录底下应该是这样的,多余的 zip 已经被我删除。
$ ls
Dockerfile apache-tomcat-7.0.56 jdk run.sh
Dockerfile 文件和其他脚本文件
FROM sshd:dockerfile
#设置继承自我们创建的 sshd 镜像
MAINTAINER waitfish from dockerpool.com(dwj_zz@163.com)
#下面是一些创建者的基本信息
#设置环境变量,所有操作都是非交互式的
ENV DEBIAN_FRONTEND noninteractive
RUN echo "Asia/Shanghai" > /etc/timezone && \
dpkg-reconfigure -f noninteractive tzdata
#注意这里要更改系统的时区设置,因为在 web 应用中经常会用到时区这个系统变量,默认的 ubuntu 会让你的应用程序发生不可思议的效果哦
#安装跟 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"]
创建 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 "========================================================================"
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
创建镜像、测试镜像
#删去了一下无关紧要的输出
$ sudo docker build -t tomcat7.0:jdk1.6 .
Sending build context to Docker daemon 234.8 MB
Sending build context to Docker daemon
Step 0 : FROM sshd:dockerfile
---> 570c26a9de68
Step 1 : MAINTAINER waitfish from dockerpool.com(dwj_zz@163.com)
---> Using cache
---> 5c6b90057a1d
Step 2 : ENV DEBIAN_FRONTEND noninteractive
---> Using cache
---> e06feb0790d7
Step 3 : RUN echo "Asia/Shanghai" > /etc/timezone && dpkg-reconfigure -f noninteractive tzdata
---> Running in 6dba2d312627
Current default time zone: 'Asia/Shanghai'
Local time is now: Tue Oct 28 13:47:08 CST 2014.
Universal Time is now: Tue Oct 28 05:47:08 UTC 2014.
---> a1dccb384edb
Removing intermediate container 6dba2d312627
...
Setting up pwgen (2.06-1ubuntu4) ...
---> e0e4ab118cda
Removing intermediate container aee38d8ab936
Step 5 : ENV CATALINA_HOME /tomcat
---> Running in 8d0d7176fb7e
---> e4d8891f4e86
Removing intermediate container 8d0d7176fb7e
Step 6 : ENV JAVA_HOME /jdk
---> Running in 53ce1fa9b8a0
---> f17a13a87981
Removing intermediate container 53ce1fa9b8a0
Step 7 : ADD apache-tomcat-7.0.56 /tomcat
---> ca1fa71b4130
Removing intermediate container 27e2d96bcb78
Step 8 : ADD jdk /jdk
---> d7a595c4c4f9
Removing intermediate container 00d980ad2cad
Step 9 : ADD create_tomcat_admin_user.sh /create_tomcat_admin_user.sh
---> 5055ca84decc
Removing intermediate container 220922d934ce
Step 10 : ADD run.sh /run.sh
---> da469edb1022
Removing intermediate container f0dde8563174
Step 11 : RUN chmod +x /*.sh
---> Running in 71564c350a2e
---> 5f566293e37c
Removing intermediate container 71564c350a2e
Step 12 : EXPOSE 8080
---> Running in 055c41de3bd8
---> b1213c1bc920
Removing intermediate container 055c41de3bd8
Step 13 : CMD /run.sh
---> Running in 5dbe1220a559
---> ce78537c247d
Removing intermediate container 5dbe1220a559
Successfully built ce78537c247d
#查看下目前拥有的镜像
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
tomcat7.0 jdk1.6 ce78537c247d 9 minutes ago 473.3 MB
nginx albb 8e333a6f1d10 14 hours ago 567.6 MB
nginx stable 4e3936e36e31 15 hours ago 262.3 MB
apache ubuntu 06d84c79e905 16 hours ago 263.8 MB
sshd dockerfile 570c26a9de68 26 hours ago 246.5 MB
sshd ubuntu 7aef2cd95fd0 39 hours ago 255.2 MB
debian latest 61f7f4f722fb 7 days ago 85.1 MB
busybox latest e72ac664f4f0 3 weeks ago 2.433 MB
ubuntu 14.04 ba5877dc9bec 3 months ago 192.7 MB
ubuntu latest ba5877dc9bec 3 months ago 192.7 MB
#运行一个测试的 tomcat 容器
$ sudo docker run -d -P tomcat7.0:jdk1.6
3cd4238cb32a713a3a1c29d93fbfc80cba150653b5eb8bd7629bee957e7378ed
#通过 docker logs 得到 tomcat 的密码
$ sudo 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
========================================================================
Oct 28, 2014 2:02:24 PM org.apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: /jdk/jre/lib/amd64/server:/jdk/jre/lib/amd64:/jdk/jre/../lib/amd64:/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
Oct 28, 2014 2:02:24 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-bio-8080"]
Oct 28, 2014 2:02:24 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["ajp-bio-8009"]
Oct 28, 2014 2:02:24 PM org.apache.catalina.startup.Catalina load
#查看映射的端口
$ sudo 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
在另外一台机器上使用浏览器登陆
输入我们从 docker logs 输出中得到的密码
成功进入管理界面 
注意事项
在实际环境中,我们可以通过使用 -v 参数来覆盖 tomcat 的日志文件、程序所在目录、以及与 tomcat 相关的一切配置。
创建 tomcat 服务的镜像的更多相关文章
- 使用Dockerfile创建ssh服务的镜像02
使用Dockerfile创建ssh服务的镜像02 1:创建工作目录---一个镜像的所有文件都放这个目录下 ubuntu@ubuntu:~$ mkdir sshd_ubuntu ubuntu@ubunt ...
- 创建ssh 服务的镜像
$ sudo docker run -ti ubuntu:14.04 /bin/bash #首先,使用我们最熟悉的 「-ti」参数来创建一个容器. root@fc1936ea8ceb:/# sshd ...
- 「五」创建一个带 tomcat 服务的基础镜像(修订版)
Tomcat Tomcat 简单介绍 Tomcat server是一个免费的开放源码的Web 应用server,属于轻量级应用server.在中小型系统和并发訪问用户不是非常多的场合下被普遍使用,是开 ...
- Docker(2):使用Dockerfile创建支持SSH服务的镜像
1.创建工作目录 # mkdir sshd_ubuntu # ls 在其中,创建Dockerfile和run.sh文件 # cd sshd_ubuntu/ # touch Dockerfile run ...
- 使用Dockerfile创建支持SSH服务的镜像
1.前面我们学习了使用Dockerfile,那接下来我们就用Dockerfile创建一个支持SSH服务的镜像. 2.首先创建一个目录ssh_centos [root@rocketmq-nameserv ...
- Docker - 解决创建 tomcat 容器镜像却无法访问页面的问题
问题背景 查看 tomcat 镜像 docker images 运行并创建 tomcat 容器 docker -d -p 8888:8080 --name=tomcat2 tomcat:latest ...
- docker Dockerfile学习---nginx负载均衡tomcat服务
1.此过程在nginx的基础上,也就是上篇博客写的内容. 2.创建项目目录并上传包,解压 $ mkdir centos_tomcat $ cd centos_tomcat $ tar zxvf jdk ...
- Docker学习笔记_10 docker应用 - 部署TOMCAT服务
选择基镜像 基镜像使用dokcer hub官方提供的tomcat8 alpine当前最新版本,https://hub.docker.com/_/tomcat/ docker pull tomcat:8 ...
- Tomcat服务无法启动的问题
去年下半年公司就决定投入人力物力"跟风"做大数据方向的研究并应用到后续项目中,于是乎,我们也得熟悉下Java才行了. 先弄个JavaEE的开发环境再说吧.装JDK.JRE,其实JD ...
随机推荐
- 应用TortoiseGit为github账号添加SSH keys,解决pull总是提示输入密码的问题
每次同步或者上传代码到githun上的代码库时,需要每次都输入用户名和密码,这时我们设置一下SSH key就可以省去这些麻烦了.若果使用TortoiseGit作为github本地管理工具,Tortoi ...
- aspx 页面中 js 引用与页面后台的数据交互 --【 js 调后台】
后台调用 js 方法 前台调用后台方法与变量: 后台被调用的方法必须是public 或 protected 后台被调用的方法必须是静态的static 方法一:通过WebService来实现 步骤: ...
- Spring Bean的生命周期,《Spring 实战》书中的官方说法
连着两天的面试 ,都问到了 Spring 的Bean的生命周期,其中还包括 昨晚一波阿里的电话面试.这里找到了Spring 实战中的官方说法.希望各位要面试的小伙伴记住,以后有可能,或者是有时间 去看 ...
- Spring中的JDBC模板类入门
1.Spring框架中提供了很多持久层的模板类来简化编程,使用模板类编写程序会变的简单 2.提供了JDBC模板,Spring框架提供的 *JdbcTemplate类 3.Spring框架可以整合Hib ...
- 华硕笔记本的U盘启动
开机以后有两种方式: 1:按住ESC键,在弹出的见面直接选择USB启动进入. 2:按F2进BLOS进入,在boot里面原则第一个,找到USB作为第一启动项,再按F10保存一下即可.
- 浅谈css中的盒模型(框模型)
css中的盒模型是css的基础,盒模型的理解可以帮助我们进行对样式进行修改.废话不多说,进入正题: 在w3c中,CSS 框模型 (Box Model) 规定了元素框处理元素内容.内边框.边框 和 外边 ...
- SpringMVC 异步与定时使用示例
1.Spring 的xml配置: <aop:aspectj-autoproxy/> <task:annotation-driven executor="annotation ...
- Human Motion Analysis with Wearable Inertial Sensors——阅读1
Human Motion Analysis with Wearable Inertial Sensors——阅读 博主认为对于做室内定位和导航的人这是一篇很很棒的文章,不是他的技术很牛,而是这是一篇医 ...
- error 2593 operator << 不明确的可能的解决方法
编译Martinez算法时遇到该问题,提示重载的<<操作符调用不明确. 解决方法为:在cpp文件中将重载的该操作符的实现前添加完整的命名空间路径.
- 2 >&1 的准确含义
1. 2代表标准错误,2 > 表示重定向,就是把标准错误重定向到 1中,这个1如果想表示标准输出的话,就必须在前面加 & 2. 正常情况下,下面这个会有很多错误信息,但是加上2>& ...