1.部署tomcat
? 1.1.下载相关镜像tomcat8.5.20
? $ docker pull tomcat:8.5.20
? 1.2 在/data目录下创建tomcat/webapps目录
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? mkdir -p /data/tomcat/webapps
? 注意:这里是准备将宿主机的/data/tomcat/webapps映射到容器的
? ? ? ? /usr/local/tomcat/webapps目录,那么在创建tomcat-0容器后,
?? ?本应该存在与webapps目录下的原生目录(例如:manager等)都
?? ?将不存在,因为映射的宿主机目录/data/tomcat/webapps为空,
?? ?所以将不能采用tomcat原有部署方式,只能将war通过rz命令上传
?? ?至宿主机的/data/tomcat/webapps目录
??
? 1.2.测试镜像
??
? $ docker run \
? ? ? ? ? -p 8080:8080 \
? ? ? ? ? --name tomcat-0 \
? ? ? ? ? --privileged=true \
? ? ? ? ? --restart=always \
? ? ? ? ? -v /soft/tomcat/webapps:/usr/local/tomcat/webapps \
? ? ? ? ? -e TZ=Asia/Shanghai \
? ? ? ? ? -itd tomcat:8.5.20 ? ? ??
? ? ? ? ?
? ?注1:TZ=Asia/Shanghai用于设置时区为:亚洲/上海,可进入容器用如下命令进行查看
? ? ? ? ? ? echo `date "+%Y-%m-%d %H:%M:%S"`
? ?注2:以上容器的创建采用的是bridge默认网络
? ?注3:
? ?firewall-cmd --list-ports
? ?firewall-cmd --zone=public --add-port=8080/tcp --permanent
? ?firewall-cmd --reload
? ?firewall-cmd --zone=public --remove-port=8080/tcp --permanent
??
? 3.上传hello.war至/data/tomcat/webapps目录
? ? rz hello.war
? 4.测试crm项目
? ? http://xx.xx.xx.xx:8080/crm/sys/loginAction.action?username=zs&password=123
? ? 注1:修改crm.war的数据库IP、数据库名及账号密码
? ? 注2:测试报错,不在同一个网络所以连不上
? ? ? ? ?tomcat-0 -> bridge默认网络
?? ? mysql ? ?-> mynetwork自定义网络
2.部署web项目?
? 向移植docker compose ?
? 详见/docker-compose/docker-compose-v1.yml文件
3.解决服务之间依赖问题
? 场景说明:见images/01 Docker服务之间的依赖关系.png
? 解决方案:docker官方推荐使用wait-for-it.sh脚本来解决问题,课件:资料/wait-for-it-master.zip已提供
? ? ? ? ? ? ? ? ? ?什么是wait-for-it.sh?
? ? ? ? ? ? ? ? ? ?wait-for-it.sh脚本用来访问指定的地址和端口,如果收不到响应就等待一段时间再去重试,直到收到响应后,再去做前面指定好的命令
? ? ? ? ? ? ? ? ? ?command: ["./wait-for-it.sh", "mysql-master:3306", "--", "catalina.sh", "run"]
? 注意事项:注意如果你使用wait-for-it.sh脚本,如果你的基础镜像不包含bash命令(比如alpine镜像)需要安装bash,
? ? ? ? ? ? 不然没法执行wait-for-it.sh脚本导致容器启动失败。
? ? ? ? ? ? 如果Dockerfile的基础镜像用的是alpine相关的基础镜像的话,记得添加如下指令安装bash:
? ? ? ? ? ? RUN apk update
? ? ? ? ? ? RUN apk upgrade
? ? ? ? ? ? RUN apk add --no-cache bash
? ? ? ? ? ? ?
? ? ? ? ? ? ##课程中下载的tomcat:8.5.20镜像sh/bash命令均支持
? ? ? ? ? ? docker exec -it tomcat-0 /bin/bash #不报错,能进入容器,即安装了bash命令
? ? ? ? ? ? docker exec -it tomcat-0 /bin/sh ? #即安装了sh命令 ?
? 3.1.制作自己mytomcat:8.5.20镜像
? ??
? ? 1.上传相关文件至/docker-compse目录
? ? ? Dockerfile-mytomcat8.5.20
? ? ? wait-for-it.sh
? ??
? ? 2.制作自定义镜像
? ? ? docker build -f Dockerfile-mytomcat8.5.20 -t mytomcat:8.5.20 .
? 3.2.移植到docker-compose
? ? 注:一定要修改docker-compose-v5.yml文件中的tomcat容器镜像指向刚刚创建的mytomcat:8.5.20
? ? 注:一定要修改docker-compose-v5.yml文件中的tomcat容器镜像指向刚刚创建的mytomcat:8.5.20
? ? 注:一定要修改docker-compose-v5.yml文件中的tomcat容器镜像指向刚刚创建的mytomcat:8.5.20
? ? 使用自定义的mytomcat:8.5.20镜像构建tomcat容器。
? ? 详见docker-compose/docker-compose-v5.yml
? ? docker-compose启动成功后,先停止tomcat容器,再停止mysql-master容器,再启动tomcat容器,查看tomcat容器日志,这时将提示wait等待中,最后在启动mysql-master后tomcat容器将正常启动。
? ?
? ? #容器启停命令
? ? docker -f docker-compose-v5.yml stop tomcat-0
? ? docker -f docker-compose-v5.yml stop mysql-master
? ? docker-compose -f docker-compose-v5.yml up -d tomcat-0
? ? docker-compose -f docker-compose-v5.yml up -d mysql-master
? ? #查看容器日志
? ? docker-compose -f docker-compose-v5.yml logs -f tomcat-0
? ? docker -f docker-compose-v5.yml logs -f?
? ?