七、实战部署Tomcat
1、找镜像
(1)去远程仓库找镜像 https://hub.docker.com/
(2)
(3)一般带官方logo的,且名字就是官方名字的(比如tomcat),且start最高的,那就是正品。其他的可能都是个人的,个人的不靠谱。
2、安装tomcat
2.1、拉取镜像
docker pull tomcat
完整命令是:docker pull 镜像名<:tags> 从远程仓库拉取镜像。如果没写:tags则代表是latest版本。如下图
比如也可以拉取带tags的镜像
docker pull tomcat:8.5.55-jdk8-openjdk
这个tag是从如下地方获取的
2.2、查看镜像
docker images
2.3、启动容器
镜像有了该启动容器玩玩了。
docker run tomcat
完整命令是:docker run 镜像名<:tags> 这里没指定tag就代表是latest,
docker images
可以查看镜像tags等信息。
2.4、问题
我们已经装逼三连:docker pull
、docker images
、docker run
,将tomcat正常启动了,默认端口8080,问题来了,我怎么访问呢?它是在docker里的,不是我宿主机的8080端口,这就需要做一个端口映射。宿主机和docker启动的tomcat的端口映射。
2.5、端口映射
docker run -p 8000:8080 tomcat
也就是启动参数里多加个-p参数,-p参数用于端口映射,前面是宿主机端口,后面是容器端口。
2.6、测试
浏览器输入:http://localhost:8800
404?那是因为新版本tomcat将webapps下面的内容都删了,所以找不到了原来的index.jsp文件了。这又有问题了,我怎么进入我容器里的tomcat目录?比如看个log,找到webapps给他添加文件等操作。
2.7、进入容器里的tomcat
# 先用docker ps命令查看启动的容器 docker ps
# 进入容器的tomcat docker exec -it ac1c3d62b75d /bin/bash
格式:docker exec [-it] 容器id 命令
exec:在对应容器中执行命令
-it:采用交互方式执行命令
执行ls -l
查看目录
可以看下webapps,里面空空如也。所以404,但是外层有一个webapps.dist
文件夹,这个文件夹是原有tomcat的主页面,我们可以删除webapps,然后mv命令将webapps.dist
改为webapps,等自动部署完在访问网页就正常了。
mv后tomcat部署稍微慢点,等1-2min,在访问就行。
2.8、怎么后台启动
现在问题:ctrl+c就结束进程了。
# -d 参数即可 docker run -p 8000:8080 -d tomcat
2.9、总结
以上步骤其实就干了这么几件事:
- docker pull 镜像
- docker run 镜像
-p 端口映射
-d 后台启动
- docker exec -it 镜像id /bin/bash
八、常用命令总结
命令 | 解释 |
docker pull 镜像名<:tags> | 从远程仓库拉取镜像到本地仓库 |
docker images | 查看本地仓库所有镜像 |
docker run 镜像名<:tags> | 基于镜像创建容器并启动,可以添加-d port1:port2参数,port1:宿主机端口,port2:容器端口, -d参数代表后台运行 |
docker ps | 查看当前所有启动的容器 |
docker ps -a | 查看本地所有容器,包含未启动的,删除容器的时候可用来查询容器id |
docker start/stop/restart 容器id | 启动/停止/重启容器 |
docker rm <-f> 容器id | 删除<-f:强制删除>容器,运行中的容器不能删除,-f可以强制 |
docker rmi <-f> 镜像名称 <:tags> | 删除<强制删除>镜像,镜像有容器在启动,不能被删除,-f可以强制 |
docker exec [-it] 容器id 命令 | 进入容器主目录,exec:在对应容器中执行命令,-it:采用交互方式执行命令 |
九、容器内部结构
1、内部结构
你jdk都没安装,怎么就能跑tomcat?tomcat容器内部包含了如下:
- 一个超级迷你的linux系统
- jdk
- tomcat
2、验证
先进入容器
docker exec -it ac1c3d62b75d /bin/bash
- linux系统
执行
cat /proc/version
,可以发现带了个红帽系统
- jdk
java -version
- tomcat
这个还用验证?
十、容器原理
1、图解
2、总结
created -> running -> paused -> deleted
3、验证
docker create tomcat # 查看容器状态,会发现是created docker ps -a
docker start 8c4a21f47b8f # 查看容器状态,会发现是up, up就对应running,代表运行中 docker ps
# docker stop命令会让容器进入exit状态,这个不等于paused,paused没有演示的必要。 docker stop 8c4a21f47b8f
# rm删除容器。也就对应deleted状态 docker rm 8c4a21f47bf
十一、docker总结
发现优点了没?
- 一个宿主机上或者虚拟机上启动N个docker,每个docker是一个tomcat,之前集群是多个虚拟机,或者宿主机,现在是一个虚拟机上开N个docker容器,然后映射不同的端口,牛逼。当然你会说负载均衡,挂了一个第二个还能支持,这种需要多台虚拟机的。但是也大大节省了资源消耗。虽然你一台机器也能改端口来完成,但是docker节省资源,而且资源隔离,N个容器之间彼此独立。
- 资源隔离,多个容器之间彼此不干扰。
- 环境统一,因为只要镜像的tag一样,那么启动的容器的环境都一致。牛逼!
END