Docker-Web服务与应用-Tomcat

写在正文前

本博客是作者看了书籍《Docker技术入门与实战》后,在ubuntu虚拟机内进行实战操作后,发现了一些实际操作问题后,有感而发所写的,若有侵权,请联系博主协商解决。

实验环境:Win10宿主机上的ubuntu虚拟机,已安装Docker【如何安装Docker可查看其它教程】
Docker中有两种创建容器的方法:基于Docker commit命令和基于Dockerfile创建。
本博客选择基于Dockerfile的模式。
Dockerfile的基础镜像源自这篇博客

1 创建工作目录

首先创建一个工作目录,叫做tomcat7.0_jdk1.6_blog【7.0和1.6分别表示tomcat和jdk的版本】,并进入其中:

ag@ubuntu:~/studyDocker$ mkdir tomcat7.0_jdk1.6_blog&& cd tomcat7.0_jdk1.6_blog
ag@ubuntu:~/studyDocker/tomcat7.0_jdk1.6_blog$  

接着创建Dockerfile文件与run.sh文件:

ag@ubuntu:~/studyDocker/tomcat7.0_jdk1.6_blog$ touch Dockerfile run.sh
ag@ubuntu:~/studyDocker/tomcat7.0_jdk1.6_blog$ ls
Dockerfile  run.sh

用wget命令获取Tomcat压缩包并解压:

ag@ubuntu:~/studyDocker/tomcat7.0_jdk1.6_blog$  wget https://mirror.bit.edu.cn/apache/tomcat/tomcat-7/v7.0.99/bin/apache-tomcat-7.0.99.zip
[太占位置了,下载过程省略]   
ag@ubuntu:~/studyDocker/tomcat7.0_jdk1.6_blog$ ls
apache-tomcat-7.0.99.zip  Dockerfile  run.sh
ag@ubuntu:~/studyDocker/tomcat7.0_jdk1.6_blog$ unzip apache-tomcat-7.0.99.zip
[太占位置了,解压过程省略]
ag@ubuntu:~/studyDocker/tomcat7.0_jdk1.6_blog$ ls
apache-tomcat-7.0.99  apache-tomcat-7.0.99.zip  Dockerfile  run.sh

从oracle官网下载jdk1.6的压缩包【压缩包网址已在超链接中】,由于未知原因,我的ubuntu虚拟机里下载不下来这个包,所以我在win10宿主机上用谷歌浏览器下载了这个包,这里我们选择以下版本:
在这里插入图片描述
而后从win10宿主机中将bin文件传入ubuntu虚拟机中,这里需要注意的是,这个文件传入不能用简单的拖拉,拖拉会导致bin文件的损坏,需要用ftp的方式传入虚拟机中,后对bin文件进行解压【先给文件执行权限,在执行文件,会自行解压】:

ag@ubuntu:~/studyDocker/tomcat7.0_jdk1.6_blog$ chmod 755 jdk.bin
ag@ubuntu:~/studyDocker/tomcat7.0_jdk1.6_blog$ ./jdk.bin
[太占位置了,解压过程省略]
ag@ubuntu:~/studyDocker/tomcat7.0_jdk1.6_blog$ ls
apache-tomcat-7.0.99  apache-tomcat-7.0.99.zip  Dockerfile  jdk1.6.0_43  jdk.bin  run.sh

上面的jdk1.6.0_43就是解压出来的文件夹。
将多余的文件该删删,给剩下的文件夹改改名,以下就是剩下的文件:

ag@ubuntu:~/studyDocker/tomcat7.0_jdk1.6_blog$ ls
apache-tomcat  Dockerfile  jdk  run.sh

如果你不会ftp的方式传文件给虚拟机的话,这里我给你安利一个在线跨平台传输工具,打开超链接后,选择文件并且上传:
在这里插入图片描述
然后在ubuntu虚拟机中打开这个网址,输入上传完文件后生成的提取码,进行提取下载。

2 编写run.sh脚本和创建tomcat用户和密码脚本文件

脚本文件run.sh用来启动ssh服务和Tomcat服务,内容如下:

ag@ubuntu:~/studyDocker/tomcat7.0_jdk1.6_blog$ cat 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

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

ag@ubuntu:~/studyDocker/tomcat7.0_jdk1.6_blog$ 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-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 "========================================================================"

3 编写Dockerfile

Dockerfile文件用来创建Docker镜像,其内容如下:

FROM sshd:blog
MAINTAINER AlaGeek (24******03@qq.com)
#设置环境变量,所有操作都是非交互式的
ENV DEBIAN_FRONTEND noninteractive

#安装与tomcat用户认证相关的软件,以及tzdata【安装tzdata是为了后面的更改时区需要】
RUN apt-get install -yq --no-install-recommends wget pwgen ca-certificates && \
    apt-get install -y tzdata && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*
    
#更改系统的时区设置,默认的ubuntu设置会对apache服务产生不好的影响
RUN echo "Asia/Shanghai" > /etc/timezone && dpkg-reconfigure -f noninteractive tzdata

#设置必要的环境变量
ENV CATALINA_HOME /tomcat
ENV JAVA_HOME /jdk

#复制tomcat和jdk文件到镜像中
ADD apache-tomcat /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
#开放8080端口,并设置自启动命令
EXPOSE 8080
CMD ["/run.sh"]

4 创建镜像

在tomcat7.0_jdk1.6_blog目录下执行命令【注意命令最后有一个 “.” ,表示Dockerfile文件在当前目录下】:

ag@ubuntu:~/studyDocker/tomcat7.0_jdk1.6_blog$ docker build -t tomcat7.0jdk1.6:blog .

执行成功的标志如下:

Successfully built e2075db99197
Successfully tagged tomcat7.0jdk1.6:blog

说明tomcat7.0jdk1.6:blog镜像已经创建完毕,它的ID为e2075db99197,也可用docker images命令查看镜像:

ag@ubuntu:~/studyDocker/tomcat7.0_jdk1.6_blog$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
tomcat7.0jdk1.6     blog                e2075db99197        10 seconds ago      436MB

5 测试

使用如下命令,基于tomcat7.0_jdk1.6_blog镜像启动一个容器:

ag@ubuntu:~/studyDocker/tomcat7.0_jdk1.6_blog$ docker run -d -P tomcat7.0jdk1.6:blog
84d554c1a1caaf62cd94629b1a08f72184564f4258ebe0a22155e7376cbef3ce

产生的字符串是该容器的ID,使用docker ps命令查看端口映射情况:

ag@ubuntu:~/studyDocker/tomcat7.0_jdk1.6_blog$ docker ps
CONTAINER ID        IMAGE                  COMMAND             CREATED             STATUS              PORTS                                            NAMES
84d554c1a1ca        tomcat7.0jdk1.6:blog   "/run.sh"           3 seconds ago       Up 1 second         0.0.0.0:32781->22/tcp, 0.0.0.0:32780->8080/tcp   inspiring_lederberg

通过docker logs命令获取tomcat密码【此处84d为该容器ID缩写】:

ag@ubuntu:~/studyDocker/tomcat7.0_jdk1.6_blog$ docker logs 84d
=> Creating and admin user with a random password in Tomcat
=> Done!
========================================================================
You can now configure to this Tomcat server using:

    admin:pmC80DjMBlln

========================================================================

下面对该容器进行测试【使用ubuntu虚拟机中自带的浏览器对127.0.0.1:32780进行访问】:
在这里插入图片描述
返回页面正是Tomcat服务的欢迎页面,再做登录测试,点击页面中的链接,在弹出的登录框中将账号密码输入其中:在这里插入图片描述
点击OK后:
在这里插入图片描述
返回页面正是Tomcat服务的管理员页面,测试成功,这里需要注意的是,容器启动后,有两个端口映射,测试的时候要选择8080端口对应的端口。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值