使用docker-compose搭建tomcat并且部署crm项目(mysql主从)使用wait设置服务启动
一.部署tomcat
1.下载相关镜像tomcat8.5.40
docker pull tomcat:8.5.40
2.在/data目录下创建tomcat/webapps目录
mkdir -p /data/tomcat/webapps
注意:这里是准备将宿主机的/data/tomcat/webapps映射到容器的
/usr/local/tomcat/webapps目录,那么在创建tomcat容器后,
本应该存在与webapps目录下的原生目录(例如:manager等)都
将不存在,因为映射的宿主机目录/data/tomcat/webapps为空,
所以将不能采用tomcat原有部署方式,只能将war通过rz命令上传
至宿主机的/data/tomcat/webapps目录
3.创建一个容器测试一下镜像
docker run \\-p 8080:8080 \\--name tomcat-0 \\--privileged=true \\--restart=always \\-v /data/tomcat/webapps:/usr/local/tomcat/webapps \\-e TZ=Asia/Shanghai \\-itd tomcat:8.5.40
4.上传hello.war至/data/tomcat/webapps目录
文章使用的素材会放到末尾
rz hello.war
上传之后,使用以下指令重启容器
docker restart tomcat-0
使用docker logs -f tomcat-0 监听一下容器日志 // -f 表示一直监听日志
可以在里面发现刚刚上传的war项目,并且也启动了tomcat服务
ctrl + c 退出日志监听
现在我们去访问刚刚部署的项目
成功的访问到了刚刚部署的项目!!!
后面的步骤,我们要在tomcat部署crm项目,也就是数据库,在部署之前我们还用到mysql主从,不然部署crm项目的时候会报错~
可以执行 rm -rf * 删除之前所有部署的项目,
接下来我们就会是用docker-compoose一次性去创建mysql主从,还有tomcat的服务
执行 docker rm -f $(docker ps -aq) 删除之前的测试用的容器
二.安装docker-compose
1上传文件
安装包刚下载过来是docker-compose-Linux-x86_64
需要将docker-compose-Linux-x86_64重命名为docker-compose
rz将docker-compose文件上传到虚拟机的/usr/local/bin/目录下
cd /usr/local/bin
添加可执行权限
chmod +x /usr/local/bin/docker-compose
2.创建并编辑yml文件
touch docker-compose.yml
vi docker-compose.yml 进入文件把以下内容复制进去:(编辑yml文件的可以在idea中编辑)
# 版本号
version: '3'
# 定义服务
services:# 服务名mysql-master:# 容器名称container_name: mysql-master# 镜像image: mysql/mysql-server:5.7# 重启restart: always# 提供伪终端tty: true# root具备管理员权限privileged: true# 环境变量environment:MYSQL_ROOT_PASSWORD: 123456# 数据卷(目录映射)volumes:- /data/mysql-master/conf/my.cnf:/etc/my.cnf- /data/mysql-master/data:/var/lib/mysql# 网络networks:mynetwork:ipv4_address: 172.19.0.3# 服务名mysql-slave:# 容器名称container_name: mysql-slave# 镜像image: mysql/mysql-server:5.7# 重启restart: always# 提供伪终端tty: true# root具备管理员权限privileged: true# 环境变量environment:MYSQL_ROOT_PASSWORD: 123456# 数据卷(目录映射)volumes:- /data/mysql-slave/conf/my.cnf:/etc/my.cnf- /data/mysql-slave/data:/var/lib/mysql# 网络networks:mynetwork:ipv4_address: 172.19.0.4# 服务名tomcat-0:# 容器名称container_name: tomcat-0# 镜像image: tomcat:8.5.40# 重启restart: always# 端口映射ports:- 8080:8080# 启动顺序depends_on:- mysql-master# 执行命令command: "./wait-for-it.sh -t 0 mysql-master:3306 -- catalina.sh run"# 提供伪终端tty: true# root具备管理员权限privileged: true# 环境变量environment:TZ: Asia/Shanghai# 数据卷(目录映射)volumes:- /data/tomcat/webapps:/usr/local/tomcat/webapps# 网络networks:mynetwork:ipv4_address: 172.19.0.5
# 定义所需要的网络
networks:mynetwork:driver: bridgeipam:config:- subnet: 172.19.0.0/16
这个docker-compose.yml文件中有mysql的主服务器,还有从服务器,还有tomcat服务,在tomcat服务中我们添加了启动顺序
# 启动顺序
depends_on:
- mysql-master
必须mysql的主从启动之后,我们的tomcat才会去执行,因为如果tomcat服务器先启动了,mysql还没有连接上数据库,那么tomcat就会报错的,tomcat服务里面的crm项目需要mysql服务连接数据库获取数据,但是这样设置会有问题, 如果mysql容器一秒启动,但是mysql容器里面的服务要十秒启动,那么tomcat第二秒就去访问mysql的时候就会报错,容器启动了,不代表里面的访问也启动了!
我们可以使用wait来解决这样的问题,
解压之后的结构目录
我们需要用到画红线的文件,我们使用rz上传wait-for-it.sh,
上传之后我们还需要给它添加可执行权限
在编辑完docker-compose.yml文件之后,我们包药部署的crm项目上传到/data/tomcat/webapps下
cd /data/tomcat/webapps
rz 上传
上传之后我们运行docker-compose.yml
docker-compose up -d
加了 -d 就是后台运行
访问运行crm项目
http://xx.xx.xx.xx:8080/crm/sys/loginAction.action?username=zs&password=123
欧克登录成功