当前位置: 首页 > article >正文

Docker基础-项目部署流程解析

在这里插入图片描述

一、部署Java应用

(1)项目准备

在这里插入图片描述
在这里插入图片描述
可以看到该项目拥有common与service两个模块,说明它是一个聚合工程。common是一个通用的工具模块,service是业务模块。
将来该工程需要访问我们之前部署好的那个MySQL数据库,但是它是部署在虚拟机中的一个docker内部。
在这里插入图片描述

而在真实项目部署时像数据库这样的容器是无法通过端口映射在外部去进行访问的,只能通过容器名去访问,所以项目中JDBC的连接就得按照容器名去进行配置了。

可以看到有三个yaml配置文件,内部设定了JDBC的连接参数。
在这里插入图片描述

  1. 可以发现这里连接的地址没有写死,而是使用了 $占位符 来读取配置中的其他配置变量,也就是说这里的IP地址不是写死的,而是一个变量。因为等会我们把它部署到虚拟机后要与虚拟机中的mysql容器互连,而它又是动态地址。
    在这里插入图片描述
  2. 而local配置文件用于配置本地开发时的的IP地址,所以此处肯定是需要填写真实的IP地址
    在这里插入图片描述
  3. 还准备好了一个dockerfile文件,用于打包该java项目
    在这里插入图片描述
  4. 可以使用maven来进行打包
    在这里插入图片描述
    可以看到打包完毕的jar包以及生产的Dockerfile文件
    在这里插入图片描述
    在这里插入图片描述
    后续只要把这两个生产的文件拷贝到虚拟机内,就能完成项目构建了。

(2)虚拟机中完成构建

上传两个文件到虚拟机后执行docker build进行项目构建
在这里插入图片描述
可以看到构建好的hmall镜像
在这里插入图片描述
运行之前需要检查是否有其他容器占用了8080端口,因为它与java项目占用的端口冲突了,也就需要停止掉该dd容器,再去创建并运行hmall容器。
在这里插入图片描述
在这里插入图片描述
这样就可以在浏览器中正常访问到该java项目了
在这里插入图片描述

二、部署前端

在这里插入图片描述

为什么需要创建一个全新的容器,因为先前的Nginx容器只挂载了html目录没有挂载conf文件,所以是没有办法对Nginx的conf文件去做配置的。

(1)前端项目介绍

  1. 前端html页面
    在这里插入图片描述
    可以看到存在商城的常规页面以及后台管理页面,因此Nginx就需要对这两个目录分别去做代理。
  2. conf文件
    在该文件中就配置了对这两个目录的代理
    在这里插入图片描述
    可以看到里面的location路径指的是文件挂载到容器内以后在虚拟机中所处的位置,以及两个目录分别对应的端口号(18080与18081)。
    还可以看到这里指定了对后台接口的配置,也就是前端所有的请求都将要发到了后端的这个api路径,最终带到后台的8080端口。而因为Nginx与java应用都使用容器部署了,所以在路径之中要使用容器名来进行互连 ,在这里也就使用了java应用的容器名hamll来代替IP地址来实现反向代理。
    在这里插入图片描述
    如果在虚拟机中实际部署的容器名与配置文件中的不一致,那么就需要对文件进行修改。
  3. 挂载conf文件
    在Nginx官方文档中查看如何配置conf文件
    在这里插入图片描述
    这里也告诉了我们宿主机配置文件及容器内配置文件的地址,按这里进行两文件关连即可。
    在这里插入图片描述

(2)项目部署

在这里插入图片描述

  1. 上传Nginx的配置文件
  2. 删除原有Nginx容器
  3. 创建并运行Nginx容器
  4. 查看Nginx容器的运行情况,发现它能正常启动

可以成功在浏览器中访问到前端项目!!
在这里插入图片描述
在前端页面执行查询操作,调出java项目的logs日志后发现它弹出了相关操作的日志,说明前后端以及数据库这三个容器之间的互连没有任何问题。
在这里插入图片描述
整个服务的部署也就成功了!!

三、DockerCompose

(1)DockerCompose介绍

在前面的教程中可以感受到手动部署整个前后端项目的流程较为复杂,而且需要把整个项目拆成一个个部分来进行部署,这种分散部署没有体现出项目的整体性,而且运维操作起来比较困难。
这里就来使用DockerCompose工具来帮助解决这个问题。

在这里插入图片描述
一组相关联的应用容器指的是一个完整项目所拥有的前后端、数据库、各种中间件。
通过DockerCompose工具就可以实现这个项目相关容器的同一管理。

可以看到DockerCompose文件的简易模版:

  1. 一个项目对应一个yaml文件。
  2. 项目中的每一个部分在DockerCompose中都称之为一个服务,服务列表当中定义的就是一个一个容器,同时要去描述清楚每个容器运行时的一些参数信息。
    而在以前我们主要通过docker run命令来部署容器,同时也在命令中描述了该容器的参数信息。与此类似的,在DockerCompose文件中也应该描述好这些信息,所以它们描述的信息实际上是差不多的,只是语法上有差异。
    (2)DockerCompose文件的语法
    两种文件的语法比较
    在这里插入图片描述
  3. version代表当前DockerCompose文件的语法版本
  4. services代表容器列表
  5. container_name代表容器名
  6. ports代表端口映射
  7. environment代表环境变量
  8. volumes代表挂载的数据卷
  9. network代表网络
  10. image代表镜像名称

配置多个容器的语法展示:
在这里插入图片描述
在这里插入图片描述

(3)DockerCompose的使用

在这里插入图片描述
这些命令的作用范围是当前project内的容器;project名称默认为root,不加 -p 参数就会默认指定project名称为root;如果compose文件就在当前目录那么就也不需要加 -f 参数。

运行compose文件:
在这里插入图片描述
可以看到它先执行了build构建镜像操作,再来创建网络与容器。
然后就也可以查看到当前项目下所有的进程:
在这里插入图片描述
在这里插入图片描述

可以正常使用java项目!!
在这里插入图片描述

关闭所有容器、网络:
在这里插入图片描述
在这里插入图片描述
所有痕迹都清理干净了。

总结来说,DockerCompose最重要的就是来编写compose文件,只要这个文件编写好就可以极度简化Docker的部署流程,实现一键部署。除此以外DockerCompose还可以做集群部署,比如说需要一键把java项目部署到多台服务器上,不过还需要借助其他功能来实现这种多服务器的互连。


http://www.kler.cn/a/578121.html

相关文章:

  • 07 HarmonyOS NEXT 仿uv-ui Tag组件开发教程系列(一)
  • VUE3开发-9、axios前后端跨域问题解决方案
  • K8s 1.27.1 实战系列(三)安装网络插件
  • spring Web Mvc 介绍
  • SpireCV荣获Gitee 最有价值开源项目称号
  • 中国嵌入式单片机就业形势分析
  • 【Redis】终极缓存四连杀:缓存预热、缓存击穿、缓存穿透、缓存雪崩,真的懂了吗?
  • C++ 构造函数、析构函数和复制构造函数
  • 《深入浅出数据索引》- 公司内部培训课程笔记
  • JQuery 语法 $
  • python 程序一次启动有两个进程的问题(flask)
  • Vue.js + Element Plus:擦出高效开发的火花
  • JAVA实战开源项目:在线音乐网站(Vue+SpringBoot) 附源码
  • 芯麦GC4938:高功率电机驱动芯片,全面替代A4938/Allegro的国产优选方案
  • 【全栈开发】---- 一文掌握Django的轮询、长轮询
  • Virtex-II 系列FPGA 的配置数据处理流程
  • 【Azure 架构师学习笔记】- Azure Databricks (17) --Delta Live Table和Delta Table
  • 嵌入式学习笔记-卡尔曼滤波,PID,MicroPython
  • K8s 网络-基本环境准备 Day01
  • DeepSeek与浏览器自动化AI Agent构建指南