CentOS上使用Dockers搭建Tomcat服务器

一直想着搭建一个自己的Web应用服务器,但服务器的80端口已经被我的博客系统占用了,服务器是CentOS,没有UI界面,完全依靠命令行来进行操作,再加上之前对Linux其实不怎么熟,下意识就觉得手写命令改端口好麻烦,就暂时搁置了。
最近突然想起服务器上装的是Docker,Docker自带端口映射功能,那就好办了,直接用Docker拉取Tomcat做端口映射就好了。
这里简单介绍一下Docker和Tomcat,Docker是一个开源的应用容器引擎,开发者可以把任何应用和应用所需要的依赖一起打包成容器,其他人使用的时候只要把这个容器下载回来,直接运行即可,其方便之处在于运行应用只需下载-运行,免去了四处安装各种依赖包的麻烦,做到了开箱即用,非常方便。

Tomcat是一个开源的Web应用服务器,可用来部署开发者自己的Web应用,我们平时所能看到的H5、网页、网上商城、OA系统等,都需要先部署到Tomcat这样的Web服务器才能被访问到,甚至可用来为小程序、APP、桌面应用等程序提供数据,功能强大?。

正式安装
一、使用Docker下载Tomcat容器
Docker的安装很简单,之前在用Docker搭建Wordpress博客系统的文章中有写,这里就不赘述了。在成功安装Docker后,我们可用直接使用命令:
docker pull tomcat
系统会自动拉取最新版本的Tomcat容器。

之后使用命令:
docker images
可以发现,我们的Docker仓库中已经有了最新版本的tomcat容器了。


二、在Docker中运行Tomcat容器并挂载本地目录
有了容器,我们直接运行就可以了,这就是开箱即用的便利性。使用命令:
docker run --name tomcat-service -d -p 8080:8080 -v $PWD/mydata:/usr/local/tomcat/webapps/mydata tomcat
运行Tomcat容器,并将当前目录下的mydata目录挂载到Tomcat容器中的webapps目录下,因为Docker采用的是完全沙箱机制,不同容器间是相互独立的,与宿主系统也是相对独立的,所以在宿主系统中无法直接访问容器内的目录,需要使用docker命令进入容器内部才能进行操作,为了避免使用上的不便,我们需要把本地目录挂载到容器内,这样就可以直接对容器内部的目录进行操作。

另外这里解释几个参数:
--name :给容器运行后起个名称;
-d: 后台运行容器,并返回容器ID;
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口;
--volume , -v: 挂载目录,格式为:主机(宿主)目录:容器目录;
$PWD: 当前目录;
这时如果运行成功的话,我们再使用命令:
docker ps -a
就会发现Tomcat容易已经成功运行了。


三、解决无法访问报404的错误
到这里,其实Tomcat已经安装完毕了,但是如果我们试着访问相应的地址和端口,就会发现浏览器会返回一个404资源未找到的错误,并不能访问到Tomcat服务器。

这是为什么呢,我们来一点一点分析,首先Tomcat肯定是安装成功的,不然错误页面底端也不会出现Apache Tomcat的字样。
那么会不会是容器内的文件出了什么错误呢?于是我使用命令:
docker exec -it 2d /bin/bash
cd webapps
进入Tomcat的应用目录,发现了一个惊天大秘密。
原来里面
除了我挂载的本地目录外什么都没有

这时候我上网查了资料,得到结论:这个版本的Tomcat把自带的应用放到了同目录的webapps.dist下,并没有放到webapps下,所以里面才会什么都没有。
找到原因就好解决了,只要把自带的应用copy到webapps目录下即可,使用命令:
cp -r webapps.dist/. webapps
cd webapps
ls
就会发现全部的应用都已经被拷贝进来了,这时我们再访问相应的地址和端口,就会发现Tomcat已经可以顺利访问到了。


本文系作者 @小麓 原创发布在 小麓的博客。未经许可,禁止转载。