1. 搜索镜像
docker search tomcat
选择stars最多的。
2. 拉取镜像
docker pull tomcat:8.5
3. 查看镜像
docker images
4. 创建容器
4.1 创建网络
为容器创建单独的网络
# 创建名为 itmahy-tomcat的网络
docker network create itmahy-tomcat
# 查看是否创建成功
docker network ls
4.2 使用 run 命令创建容器
# 执行命令 \放到命令的末端表示连接下一行
docker run \
--name itmahy-tomcat \
--network itmahy-tomcat \
-v /data/docker/tomcat/webapps:/usr/local/tomcat/webapps \
--privileged=true \
-p 8088:8080 \
-d \
tomcat:8.5
# 参数解释
--name : 容器名称的名称为itmahy-tomcat
--network : 4.1创建的网络名称itmahy-tomcat
-v : 数据卷,为了更换tomcat加载项目的方便
--privileged=true 容器中的root会得到宿主机的root权限
-p : 容器中端口8080映射到宿主机的端口为8088
-d : 后台运行,不进入交互式界面
tomcat:8.5表示 镜像名称:版本号,2中下载的镜像
5. 查看容器是否运行
# 查看运行的容器
docker ps
# 查看所有容器
docker ps -a
6. 在浏览器中访问
# 输入以下地址
http://192.168.137.11:8088
上面这个图不是现截的,所以端口号是8080,正确的应该是8088,很明显,报 404 了,下面开始解决。
7. 遇到的问题
7.1 浏览器中访问报404
解决方法一
docker exec -it 容器ID /bin/bash
将 webapps 删除或者修改为其他名称
将 webapps.dist 修改为 webapps
再次访问,就会出现tomcat首页
解决方法二
根据-v /data/docker/tomcat/webapps:/usr/local/tomcat/webapps
这个参数获得容器数据卷再宿主机中的位置是/data/docker/tomcat/webapps
,在外部找到一个tomcat 的webapps目录下的文件跟目录,上传到/data/docker/tomcat/webapps
这个目录下,就可以正常访问了。
7.2 端口问题
在上面的操作中我没有关闭防火墙,也没有放开8088端口,但是可以直接访问。
原因:
默认情况下当Docker启动容器映射端口时,会直接在iptables添加规则开启添加端口。而 firewalld 实际上也是在iptables写入规则。因此 firewalld和docker属于是同级的应用,但是firewalld不会去检测 docker 写入的规则,就会导致 docker 可以开启firewalld没有允许的端口。
解决方法:
# 编辑文件
vim /etc/docker/daemon.json
添加下面两行:
{
....
"experimental" : true,
"iptables": false
}
添加完成之后,重启docker
systemctl daemon-reload
systemctl restart docker
结果
再次访问
http://192.168.137.11:8088
的时候,就会访问不到tomcat了,需要开启 8088 端口之后才能访问firewalld 开启端口
# 打开端口
sudo firewall-cmd \
--zone=public \
--add-port=8088/tcp \
--permanent
# 重启防火墙
firewall-cmd --reload
打开端口之后访问就通了