『现学现忘』Docker基础 — 23、使用Docker安装Tomcat
步骤1:搜索镜像
使用docker search
命令进行搜索。
建议大家去Docker官方镜像仓库去搜索,地址https://hub.docker.com/,可以看到详细的帮助文档,和镜像的仓库源所支持的版本。
步骤2:下载Tomcat镜像
使用docker pull
命令,从Docker镜像库中拉取镜像。
[root@192 ~]# docker pull tomcat:9.0
9.0: Pulling from library/tomcat
b9a857cbf04d: Pull complete
d557ee20540b: Pull complete
3b9ca4f00c2e: Pull complete
667fd949ed93: Pull complete
661d3b55f657: Pull complete
511ef4338a0b: Pull complete
a56db448fefe: Pull complete
00612a99c7dc: Pull complete
326f9601c512: Pull complete
c547db74f1e1: Pull complete
Digest: sha256:94cc18203335e400dbafcd0633f33c53663b1c1012a13bcad58cced9cd9d1305
Status: Downloaded newer image for tomcat:9.0
docker.io/library/tomcat:9.0
[root@192 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat 9.0 040bdb29ab37 2 months ago 649MB
nginx latest f6d0b4767a6c 2 months ago 133MB
centos latest 300e315adb2f 3 months ago 209MB
步骤3:运行Tomcat镜像
执行命令:docker run -d --name tomcat-01 -p 9999:8080 040bdb29ab37
,启动Tomcat镜像。
-d
:后台运行容器。--name
:给容器命名。-p 宿主机端口:容器内部端口
:配置Docker容器端口暴露,使外界能够访问Docker容器内部。通过宿主机的9999
端口就可以访问容器的8080
端口的服务。
(原理看上一篇文章即可)
# 启动Tomcat镜像
[root@192 ~]# docker run -d --name tomcat-01 -p 9999:8080 040bdb29ab37
4de54013836c23a53f7b3943403b0543bfc4c390e81bb76f08810289d85813b3
查看宿主机正在运行的容器。
步骤4:本机和外网测试
进行本地访问Tomcat容器服务,如下:
[root@192 ~]# curl localhost:9999
<!DOCTYPE html>
<html lang="en">
<head>
<title>HTTP Status 404 – Not Found</title>
<style type="text/css">body {font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b {color:white;background-color:#525D76;} h1 {font-size:22px;} h2 {font-size:16px;} h3 {font-size:14px;} p {font-size:12px;} a {color:black;} .line {height:1px;background-color:#525D76;border:none;}</style>
</head>
<body>
<h1>HTTP Status 404 – Not Found</h1>
<hr class="line" />
<p><b>Type</b> Status Report</p>
<p><b>Description</b> The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.</p>
<hr class="line" />
<h3>Apache Tomcat/9.0.41</h3>
</body>
</html>
进行外网测试访问Tomcat容器服务,如下:
我们发现本机访问和外网访问Docker容器的Tomcat服务,都是无法访问到Tomcat服务的欢迎界面。
原因:阿里云镜像,默认是最小的镜像,把所有不必要的都剔除掉。所以在Tomcat文件中的webapps
目录中没有文件,也就无法返回欢迎界面了。并不是我们的Tomcat容器无法接收请求。
因为阿里云镜像只保证最小可运行的环境,所以会出现:
- Linux命令缺少。
- Tomcat文件被精简。
下面开始解决。
步骤5:解决问题
(1)进入到正在运行的Tomcat容器中。
[root@192 ~]# docker exec -it tomcat-01 /bin/bash
root@4de54013836c:/usr/local/tomcat#
(2)查看Tomcat中的webapps目录。
# 查看Tomcat中的目录
root@4de54013836c:/usr/local/tomcat# ls -l
total 128
-rw-r--r--. 1 root root 18982 Dec 3 11:48 BUILDING.txt
-rw-r--r--. 1 root root 5409 Dec 3 11:48 CONTRIBUTING.md
-rw-r--r--. 1 root root 57092 Dec 3 11:48 LICENSE
-rw-r--r--. 1 root root 2333 Dec 3 11:48 NOTICE
-rw-r--r--. 1 root root 3257 Dec 3 11:48 README.md
-rw-r--r--. 1 root root 6898 Dec 3 11:48 RELEASE-NOTES
-rw-r--r--. 1 root root 16507 Dec 3 11:48 RUNNING.txt
drwxr-xr-x. 2 root root 4096 Jan 13 08:25 bin
drwxr-xr-x. 1 root root 22 Mar 17 09:22 conf
drwxr-xr-x. 2 root root 4096 Jan 13 08:25 lib
drwxrwxrwx. 1 root root 177 Mar 17 09:22 logs
drwxr-xr-x. 2 root root 134 Jan 13 08:25 native-jni-lib
drwxrwxrwx. 2 root root 30 Jan 13 08:25 temp
drwxr-xr-x. 2 root root 6 Jan 13 08:25 webapps
drwxr-xr-x. 7 root root 81 Dec 3 11:45 webapps.dist
drwxrwxrwx. 2 root root 6 Dec 3 11:43 work
# 查看webapps目录中的内容
root@4de54013836c:/usr/local/tomcat# ls -l webapps
total 0
我们可以看到webapps
目录中没有任何文件。
(3)解决问题。
但是从上面我们可以看到在Tomcat中有一个webapps.dist
目录,而webapps.dist
目录中的内容就是我们需要的内容,包括欢迎界面等数据文件。
我们只需要把webapps.dist
目录中的内容,全部拷贝到webapps
目录中即可。
# 查看webapps.dist中的内容
root@4de54013836c:/usr/local/tomcat# ls -l webapps.dist/
total 4
drwxr-xr-x. 3 root root 223 Jan 13 08:25 ROOT
drwxr-xr-x. 15 root root 4096 Jan 13 08:25 docs
drwxr-xr-x. 7 root root 99 Jan 13 08:25 examples
drwxr-xr-x. 6 root root 79 Jan 13 08:25 host-manager
drwxr-xr-x. 6 root root 114 Jan 13 08:25 manager
# 把webapps.dist目录中的内容,全部拷贝到webapps目录中
root@4de54013836c:/usr/local/tomcat# cp -r webapps.dist/* webapps
# 查看webapps目录中内容
root@4de54013836c:/usr/local/tomcat# ls -l webapps
total 4
drwxr-xr-x. 3 root root 223 Mar 17 09:56 ROOT
drwxr-xr-x. 15 root root 4096 Mar 17 09:56 docs
drwxr-xr-x. 7 root root 99 Mar 17 09:56 examples
drwxr-xr-x. 6 root root 79 Mar 17 09:56 host-manager
drwxr-xr-x. 6 root root 114 Mar 17 09:56 manager
这样我们就可以访问到欢迎界面了,不需要重启Tomcat服务。
(4)直接外网访问Docker容器中的Tomcat服务。
如上图,我们成功看到了Tomcat服务的欢迎界面。
补充:--rm
选项
在看Tomcat镜像的介绍时(官方镜像仓库网页),有如下一条命令。
$ docker run -it --rm tomcat:9.0
说明该命令:
- 如果本地没有Tomcat9镜像,会先从镜像库中下载镜像到本地宿主机,然后直接启动容器。
- 当容器停止之后,直接删除本地容器(下载到本地的Tomcat9镜像不会删除)。
--rm
选项也就是容器停止后,直接在本地删除该容器,即容器用完即删,一般测试的时候可以用用。
『现学现忘』Docker基础 — 23、使用Docker安装Tomcat的更多相关文章
- 『现学现忘』Git基础 — 23、Git中的撤销操作
目录 1.撤销操作说明 2.撤销工作区中文件的修改 3.撤销暂存区中文件的修改 4.总结 1.撤销操作说明 我们在使用Git版本管理时,往往需要撤销某些操作.比如说我们想将某个修改后的文件撤销到上一个 ...
- 『学了就忘』Linux基础 — 4、VMware安装
目录 1.VMware介绍 2.VMware主要特点 3.VMware建议配置 4.VMware安装 1.VMware介绍 VMware是一个虚拟PC的软件,可以在现有的操作系统上虚拟出一个新的硬件环 ...
- 『现学现忘』Docker基础 — 9、Docker简介
目录 1.什么是Docker? 2.Docker的出现解决了什么问题? 3.Docker的特别之处 4.Docker相关网站 1.什么是Docker? 2010年dotCloud公司在旧金山成立,PA ...
- 『现学现忘』Docker基础 — 16、Docker中的基本概念和底层原理
目录 1.Docker的底层原理 2.Docker中常用的基本概念 3.run命令的运行流程 4.为什么Docker比VM快 Docker架构图: 我们依照Docker架构图进行Docker基础概念的 ...
- 『现学现忘』Docker基础 — 27、Docker镜像的commit操作
目录 1.commit命令作用 2.commit命令说明 3.示例演示 1.commit命令作用 在运行的容器中,并在镜像的基础上做了一些修改,我们希望保存起来,封装成一个新的镜像,方便我们以后使用, ...
- 『现学现忘』Docker基础 — 28、Docker容器数据卷介绍
目录 1.什么是Docker容器数据卷 2.数据卷的作用 3.数据卷的使用 1.什么是Docker容器数据卷 Docker容器数据卷,即Docker Volume(卷). 当Docker容器运行的时候 ...
- 『现学现忘』Docker基础 — 10、Docker的安装
目录 1.前提 2.通过yum安装Docker (1)更新yum包 (2)移除旧的Docker版本 (3)安装必须的软件包 (4)设置稳定yum源仓库 (5)更新yum软件包索引 (6)开始安装Doc ...
- 『现学现忘』Docker基础 — 13、通过脚本安装Docker
Docker官方提供方便用户操作的安装脚本,用起来是非常方便.但是要注意的是,使用脚本安装Docker,是安装最新版本的Docker. 注意:不建议在生产环境中使用安装脚本.因为在生产环境中一定不要最 ...
- 『现学现忘』Docker基础 — 14、Docker的卸载
目录 1.查询Docker安装过的包 2.卸载Docker软件包 3.删除残留目录 4.验证是否卸载 5.20版本Docker卸载(官方文档) 1.查询Docker安装过的包 执行yum list i ...
- 『现学现忘』Docker基础 — 24、Docker图形化管理工具Portainer
目录 1.Portainer介绍 2.Portainer安装启动 3.Portainer初始化配置 4.Portainer汉化 1.Portainer介绍 (1)Portainer 是一款轻量级的图形 ...
随机推荐
- Ajax不允许缓存方法
AJAX请求后台时会自动缓存,客户端发起请求首先请求缓存,第一次请求即由缓存再请求服务器,返回数据时同样先返回到缓存再展示再客户端.但是如果数据要求随时性呢,数据变化频率高呢?那么如何不让ajax设置 ...
- 匿名内部类不能访问外部类方法中的局部变量,除非变量被声明为final类型
1. 这里所说的"匿名内部类"主要是指在其外部类的成员方法内定义,同时完成实例化的类,若其访问该成员方法中的局部变量,局部变量必须要被final修饰.2. 原因是编译程序实现上的困 ...
- Docker consul的容器服务更新与发现(超详细配图)
Docker consul的容器服务更新与发现 1.概述 2.部署 1.概述: (1)什么是服务注册与发现: 服务注册与发现是微服务架构中不可或缺的重要组件.起初服务都是单节点的,不保障高可用性,也不 ...
- sublime与python交互
点击菜单栏中的工具 -> 编译系统,勾选Python即可 创建hello.py文件,Ctrl+S保存文件,Ctrl+B执行文件,结果如下图 3.sublime运行python文件的交互环境设 ...
- 通过安装HomeBrew来安装Python3
首先说什么是HomeBrew? 下面引用简书上一个博客的解释:(博客链接:http://www.jianshu.com/p/d229ac7fe77d) 为什么要使用Homebrew Mac OS X是 ...
- 20161206日更新CocoaPods版本
从网上下载的工程第三方库需要更新,但当我执行pod update时提示以下错误: [!] The `master` repo requires CocoaPods 1.0.0 - (currentl ...
- PHP的加密方法汇总
PHP的加密主要有4种方法,除此之外还有一种是URL的加密和解密.希望可以对你们开发有用. 顺带,我会在后面把我整理的一整套CSS3,PHP,MYSQL的开发的笔记打包放到百度云,有需要可以直接去百度 ...
- 使用docker部署awx-1.7.1.0(ansible图形化界面)
文章目录 关于环境 下载awx 下载安装所需依赖 安装docker-compose 配置inventory文件 出现的报错 TASK [local_docker : Run migrations in ...
- Vue 源码解读(2)—— Vue 初始化过程
当学习成为了习惯,知识也就变成了常识. 感谢各位的 点赞.收藏和评论. 新视频和文章会第一时间在微信公众号发送,欢迎关注:李永宁lyn 文章已收录到 github 仓库 liyongning/blog ...
- Abp 异常处理
Abp 异常处理 最近一直在读代码整洁之道,我在读到第三章函数的3.9 使用异常替代返回错误码,其实在我的开发经历中都是使用返回错误码给到前端,之前在阅读ABP官网文档中就有看到过使用异常替代异常的做 ...