一、在linux虚拟机上安装Docker
- 检查内核版本,必须是3.10及以上
uname ‐r
- 安装docker
yum install docker
- 启动docker
[root@localhost ~]# systemctl start docker
[root@localhost ~]# docker ‐v Docker version 1.12.6, build 3e8e77d/1.12.6
- 可以设置开机自启动docker
[root@localhost ~]# systemctl enable docker
Created symlink from /etc/systemd/system/multi‐user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
- 停止docker
systemctl stop docker
二、Docker常用命令&操作
操作 | 命令 | 说明 |
---|---|---|
检 索 | docker search 关键字 eg:docker search tomcat | 检索目标镜像 |
拉取 | docker pull 镜像名:tag | :tag是可选的,tag表示标签,多为软件的版本,默认 是latest |
查看 | docker images | 查看所有本地镜像 |
删 除 | docker rmi image-id | 删除指定的本地镜像 |
三、安装Tomcat容器及其他相关操作
- 搜索镜像
[root@localhost ~]# docker search tomcat
- 拉取镜像
[root@localhost ~]# docker pull tomcat
若出现“Get https://registry-1.docker.io/v2/: net/http: request canceled”提示或下载过慢问题:
vim /etc/docker/daemon.json
里面自带一个“{}”,替换成:
{
"registry-mirrors":["https://6kx4zyno.mirror.aliyuncs.com"]
}
然后~
systemctl daemon-reload
systemctl restart docker
- 根据镜像启动容器
[root@localhost ~]# docker run ‐‐name mytomcat ‐d ‐p 8888:8080 镜像名/镜像id
说明:
–name 容器名称
‐d:后台运行
‐p: 将主机的端口映射到容器的一个端口 主机端口:容器内部的端口
此时Tomcat已经正常运行
- 查看运行中的容器
[root@localhost ~]# docker ps
- 停止运行中的容器
[root@localhost ~]# docker stop 容器的id
- 查看所有的容器详情
[root@localhost ~]# docker ps ‐a
- 启动容器
[root@localhost ~]# docker start 容器id
- 删除一个容器
[root@localhost ~]# docker rm 容器id
- 关闭linux的防火墙(也可以不关闭防火墙,开放某个端口)
查看防火墙状态
systemctl status firewalld;
①直接关闭防火墙
systemctl stop firewalld
② 仅开放端口号
- 设置开放的端口号(TCP 80端口)
firewall-cmd --add-port=80/tcp --permanent
–add-port=80/tcp #添加端口,格式为:端口/通讯协议
–permanent #永久生效,没有此参数重启后失效
- 重启防火墙 (重启后端口才有效)
firewall-cmd --reload
- 查看开放的端口号
firewall-cmd --list-all
- 关闭端口
firewall-cmd --remove-port=80/tcp --permanent
- 查看容器的日志
docker logs 容器名/容器id
- 启动MySql容器
docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d 镜像id
更多命令参看 https://docs.docker.com/engine/reference/commandline/docker/ 可以参考每一个镜像的文档
四、遇到的坑
当Tomcat版本过高时,根据IP地址和端口号访问可能会出现下面问题:
出现404是因为webapps文件夹下内容为空,内容都在webapps.dist 目录下
这里给出一种解决办法:
- 进入Tomcat容器
docker exec -it 容器id /bin/bash
- ls 查看文件夹内容,可以发现下面有webapps文件夹和webapps.dist文件夹,将webapps.dist下的内容全部复制到webapps中
cp -r webapps.dist/* webapps
重新访问Tomcat
Okay!
五、部署项目到Tomcat
复制宿主机war包到tomcat容器的webapps文件夹中
docker cp xxx.war mytomcat:/usr/local/tomcat/webapps
重启容器
docker restart mytomcat
如果项目中需要访问宿主机或远程服务器的MySQL时,可能会报错:java.net.NoRouteToHostException: No route to host
容器中的app无法访问到宿主机的MySQL,因为两者不在一个网络内。最简单的方式是在启动docker时增加--net=host
选项,这样容器就和宿主机共用网络,容器中的app也就能访问MySQL了。
docker run --net=host --name mytomcat -d -p 8080:8080 8391ef8f6ae4