在docker中用Tomcat运行web项目

本文旨在用最通俗的语言讲述最枯燥的基本知识

上一篇文章《为什么要用docker》已经讲述了什么是docker以及我们要用docker的原因,并且讲解了如何安装docker。这时候很多读者磨拳擦脚跃跃欲试但却发现安装好docker之后就无从下手了,那么,接下来,小编会从以下方面讲述docker的一些基础知识,当然,理论都是生硬的,所以小编选取了javaweb项目中最常用的一个软件--tomcat的安装和使用来引导学习一些docker相关的知识,借此让读者能够从实战的角度去理解docker为什么会有这些基础知识以及如何使用这些基础知识。

我们知道,web开发和部署离不开tomcat,而在目前的实际情况是:
一个项目中,每个开发者本机电脑都有自己的tomcat或者用idea的内置tomcat,当我们开发完成提交测试时,测试服务器上也有一个tomcat;当项目上线时,线上服务器也有一个tomcat,因此就很容易出现一些奇奇怪怪的问题,比如在同事A电脑上能正常运行的,到同事B电脑上就出问题的;或者是在测试环境里一切正常,到了线上bug一堆。这时候docker就有了用武之地,项目负责人把docker的tomcat镜像做好了之后上传到镜像仓库,项目成员的电脑环境、测试环境、线上环境均拉取这个tomcat使用,就能保持在所有的环境下tomcat的版本、设置都是一致的,避免了一些非技术的问题。
那么,现在我们就用docker来做一个tomcat的环境。

  1. 镜像的查找和拉取

首先,我们需要去镜像仓库找到我们要的镜像,查找镜像的语法是

docker search 镜像名称:镜像TAG

因此,查找Tomcat镜像:

docker search tomcat

有读者会疑问:什么是镜像TAG?
镜像的TAG值就是镜像的版本,就比如Tomcat有7.0、8.5、9.0等我们常用的版本,那么相应的这些软件被做成docker镜像之后,官方也会根据软件本身的版本对应出docker镜像的版本。
下图为查找结果:

可以看到,有很多的Tomcat镜像,那么我们应该怎么选用这些镜像呢?通常情况下,我们都知道官方的东西基本上代表安全无公害,因为可以看到右边有official标识为OK的就是官方的镜像,因此我们拉取第一个Tomcat就可以。
拉取镜像的语法是:

docker pull 镜像NAME:镜像TAG

因为我们要拉取Tomcat时,就可以这样写:

docker pull tomcat

有人说你怎么没加上镜像TAG
在拉取镜像时,如果加上镜像TAG,就会去查找是否有相应版本的镜像,如果有则拉取,如果没有则不拉去。而没有加TAG时,就默认代表拉取的是该镜像的最新版本。

假如需要拉取固定版本如拉取Tomcat8.5:

docker pull tomcat:8.5

就会相应的拉取了该版本的Tomcat镜像。
拉取成功之后,我们要查看我们拉取的版本,可以用命名:

docker images

可以看到,镜像列表里已经有了我们要拉取的Tomcat镜像

  1. 镜像的使用

镜像拉取下来之后,就如我们把从网上把下载到了本地电脑,但是没有任何生命的迹象,只有把它安装运行起来,才是一个活的容器,相应地,docker镜像只有在run起来的时候,才是一个有生命的容器。
创建和运行一个Tomcat容器只需要一行命令:


docker run  --name my_tomcat tomcat:8.5

其中 --name是指给容器起的名字,后面的tomcat是指下载的惊喜的NAME。8.5是镜像TAG。
到这里,一个tomcat服务就安装并且启动好了,因为默认的Tomcat端口都是8080,因此通常情况下此时我们用ip:8080就应该可以访问到Tomcat的标志性主页了。
但是!!!
事实并不是如此
因为我们是在docker下运行的容器,你们的脑海中可否还有docker的logo图?
大海就相当于我们的服务器(宿主机),而在海中游走的鲸鱼就是docker服务,而鲸鱼上的每一个集装箱都是一个容器,也就是说:
容器之间是互相隔离的,容器和宿主服务器也是互相隔离的。
因此我们在docker中运行了一个Tomcat的服务器,虽然端口是8080,
但是~
那是容器中的8080端口,因此我们通过ip:8080访问到的其实只是宿主机上的8080端口,并不是容器中的端口。
此时我们只需要把容器中的端口映射到宿主机上相应的端口即可。
端口映射只需要在运行时加入指令 -p 映射的宿主机端口:容器运行端口
如下,把容器运行的8080端口映射到宿主机的8099端口:
名称设置为my_tomcat_1

docker run -p 8099:8080  --name my_tomcat_1 tomcat:8.5

此时,你会发现,控制台打出了Tomcat启动的日志,启动完成后,我们在浏览器上用ip:8099访问,就会发现,Tomcat主页就显示了,说明Tomcat已经正确地运行起来了。
而用命令也可以查看容器是否起来,我们用docker ps 能查出本docker中运行的多有容器:

docker ps

在Tomcat运行的情况下,当你用ctrl+c回到命令行输入docker ps时,发现并没有找到my_tomcat_1这个Tomcat容器,而你重新用ip:8099发现Tomcat也不见了
噢 no!
什么原因?
这是因为:在Linux下用指令的方式运行程序,如果没有加后台执行的指令,那么在切回到命令时,程序就被杀死了。
因此,此时是因为我们运行Tomcat容器时,没有设置在后台运行,因此,需要在运行时,加上后台运行的指令,在docker中设置后台运行只需要在run命名中加入-d即可。
因此我们重新运行Tomcat,名称设置为my_tomcat_2:

docker run -d -p 8099:8080  --name my_tomcat_2 tomcat:8.5

运行完成后,此时我们放心大胆的回到命名行。重新执行docker ps
看控制台的输出:

可以看到:my_tomcat_2已经在运行,IMAGE代表所用镜像以及镜像版本,PORTS显示的是0.0.0.0:8099->8080/tcp 。代表的是把本机的8080端口映射到宿主机上的8099端口中。

但是,有读者又有疑问了:
”Tomcat是运行了,那我怎么把我的项目丢进去docker的Tomcat中呢?我用FTP工具链接到服务器上也找不到Tomcat在哪里,怎么办?”

上面提到,docker中容器和宿主机是互相隔离的,因此容器是不会在宿主机中有明确的文件夹路径,所以找不到才是对的。
但是既然端口都能映射,为啥文件夹不能映射呢?
在docker中,可以用 -v 指令指定把容器中的某个文件夹挂载到宿主机中
它的语法为:

-v 宿主机目录:容器目录

所以我们可以在创建运行一个容器时,同时可以把指定的文件夹挂载到宿主机中
通常情况下,Tomcat运行程序的文件是在webapps下的,那么可以在运行时把这个文件夹挂载到宿主机某个路径上(如:/data目录中),
名称设置为my_tomcat_3,端口设置为8098,要把容器中的webapps文件夹挂载到宿主机中/data/my_tomcat_3/webapps文件夹:

docker run -d -p 8098:8080 -v /data/my_tomcat_3/webapps:/usr/local/tomcat/webapps  --name my_tomcat_3  tomcat:8.5

此时我们再用FTP工具链接到宿主机服务器上,进入data文件夹,就会发现:my_tomcat_3/webapps文件夹已经躺在里边了,可见已经挂载成功。

把文件夹挂载成功之后,此时我们把web项目丢到宿主机中的webapps下,重启Tomcat容器后,再用ip:8099访问,就会展示我们的web项目的内容了。
到这里,docker中用Tomcat运行web项目的工作已经完成。

但是,回过头来想想,留下很多问题:

  1. docker run是创建并且运行容器,那我怎么控制容器的状态呢?比如启动和停止
  2. 为什么我在docker run时一直在重命名Tomcat的名字my_tomcat_1、my_tomcat_2、my_tomcat_3..
  3. 拉取和运行了那么多镜像,占据很多磁盘空间,怎么处理?
  4. 运行后的Tomcat,怎么查看日志?
  5. 我想要修改一下Tomcat中的server.xml的设置,但是宿主机中有没有这个文件,难道我要挂载出来吗?

看完此文之后,你有什么问题吗?欢迎读者把问题后台留言给小编或者加小编的微信,下一篇文章,小编会针对上面的问题以及读者提出的问题,做一个完整的解答以及把如何做好的Tomcat上传到镜像仓库做一个演示,所以:
关!注!我!

下期小编甚至会把常用的一些docker命名整理出来,方便大家集中记忆和使用!


觉得本文对你有帮助?请分享给更多人
关注「编程×××」,提升装逼技能
<br>

原文地址:http://blog.51cto.com/jaybril/2344856

时间: 2024-08-08 08:47:22

在docker中用Tomcat运行web项目的相关文章

IntelliJ IDEA 12集成Tomcat 运行Web项目

1. 配置你系统上的Tomcat到IDEA上 File-Settings-Application Servers-Add,设置你的Tomcat根目录. 2.为项目创建webapp Faclet File-Project Structure-Modules,选中wx并点击上面的+图标,在下拉菜单中选择Web创建一个Facelet,在右边根据你的项目修改配置: 3. 创建Artifact 看到上一步图片最下方的提示让创建Artifact了吧,下面继续.切换到Artifacts Tab: 在弹出的对话

IntelliJ IDEA 2017 配置Tomcat 运行Web项目

以前都用MyEclipse写程序的 突然用了IDEA各种不习惯的说 借鉴了很多网上好的配置办法,感谢各位大神~ 前期准备 IDEA.JDK.Tomcat请先在自己电脑上装好 好么~ 博客图片为主 请多看红框框 开始 1.创建.配置项目 1.1创建项目 New Project - [next] 1.2 给你的项目起名字,选地方 - [finish] 1.3开始配置项目 配置 project structure [F4] 或 项目右键 [Open Module Settings]或 右上角有个黑蓝色

Intellij IDEA 14.1.5 +Tomcat 运行Web项目

1.Intellij IDEA 设置 1.1.new project 1.2.选择Tomcat server 1.3.项目命名 1.4.Finish 5.设置 1.5. File--->Project Structure: 修改输出目录为之前创建的classes目录: 设置依赖包的路径为之前创建的lib目录; 2.Tomcat 设置 2.1 Edit configurations 2.2 设置local Tomcat (如果没有就新建一个) 2.3设置Tomcat 2.3.1 设置Tomcat

转载:IntelliJ IDEA 2016.2 配置Tomcat 运行Web项目

以前都用MyEclipse写程序的 突然用了IDEA各种不习惯的说 借鉴了很多网上好的配置办法,感谢各位大神~ 前期准备 IDEA.JDK.Tomcat请先在自己电脑上装好 好么~ 博客图片为主 请多看红框框 开始 1.创建.配置项目 1.1创建项目 New Project - [next]  1.2 给你的项目起名字,选地方 - [finish]  1.3开始配置项目 配置 project structure [F4] 或 项目右键 [Open Module Settings]或 右上角有个黑

Intellij IDEA通过tomcat部署web项目的机制

问题 以前使用eclipse调用tomcat运行web项目时,eclipse的方式非常直接了当,就是直接将项目更新到%TOMCAT_HOME%/webapps目录下即可.然而在使用Intellij IDEA时,该目录下看不到任何项目文件,%TOMCAT_HOME%/conf/Catalina/localhost目录下也看不到任何项目配置文件,那么问题来了,web项目到底是如何部署到tomcat上的呢? 思路 通过仔细观察Intellij启动tomcat时的输出日志(MAC OS下),可以发现一些

Intellij IDEA如何使用Maven Tomcat Plugin运行web项目(转)

首先,Run --> Edit Configurations,这时候如下图: 然后点击左上角的加号,可以添加一个新的配置,如下图: 选择Maven,如下图: 下面填上自己的配置信息,点击apply即可以,如下图: 下面可以看到工具栏中会出现自己刚才配置的信息,直接点击run或者debug即可以运行web项目,

Docker 搭建 Tomcat 运行环境

使用 Docker 搭建 Tomcat 运行环境 1. Docker与虚拟机的区别 2 搭建过程 2.1 准备宿主系统 准备一个 CentOS 7操作系统,具体要求如下: · 必须是 64 位操作系统 · 建议内核在 3.8 以上 查看 CentOS 7系统内核: [[email protected] ~]# uname  -r 3.10.0-327.el7.x86_64 2.2 安装Docker [[email protected] ~]# yum  -y   install   docker

tomcat 部署web项目

TOMCAT 部署web项目 方法介绍 操作前,先来了解一下Tomcat的目录结构. (适用于Tomcat 6.0,Tomcat7.0)    Tomcat下有7个目录,分别是bin,conf,lib,logs,temp,webapps,work 目录,现在对每一目录做介绍. Tomcat根目录在tomcat中叫<CATALINA_HOME>,      1.<CATALINA_HOME>/bin:        存放各种平台下启动和关闭Tomcat的脚本文件.      2.&l

maven集成tomcat7插件运行web项目

maven集成tomcat插件运行web项目1.修改pom.xml如下所示:添加依赖servlet,jsp,jstl,tomcat插件 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0