注意:本文是基于前下面两篇文章的基础上,讲解的,可以先学习一下,在跟着来进行操作。
基础文章:
springBoot、springCloud实现配置部署本地nacos
springCloud部署本地docker desktop经验学习-CSDN博客
1 准备
本博客是在:springCloud部署本地docker desktop经验学习-CSDN博客 案例的基础上进行改进的,请先熟悉该案例的结构。结构图如下:
2 添加yml文件
根据博客:springBoot、springCloud实现配置部署本地nacos 进行创建命名空间, 创建yml文件等。
2.1 项目子模块创建yml文件
在每个子模块的resources下面创建:bootstrap.yml和bootstrap-xjj.yml,创建内容和图片实例如下:
bootstrap.yml
spring:
main:
allow-bean-definition-overriding: true
application:
name: dockerTest1 # 根据不同的子模块,修改不同的名称
profiles:
active: xjj
bootstrap-xjj.yml
spring: cloud: nacos: discovery: server-addr: host.docker.internal:8848 namespace: 2eafc608-1b0c-4c5c-9bbe-aacbe25e4ff9 # 记得修改成自己的命名空间ID auto-register: true config: server-addr: host.docker.internal:8848 file-extension: yml namespace: 2eafc608-1b0c-4c5c-9bbe-aacbe25e4ff9 # 记得修改成自己的命名空间ID #公共配置文件 # shared-configs: file_ata_processing.yml
为什么使用:host.docker.internal 而不使用 localhost:
因为项目会打包部署到 Docker desktop 容器中,当连接运行在主机上的服务时,不能直接使用 `localhost`,因为它指的是容器自己的网络命名空间。
Docker 提供了一个特殊的 DNS 名称 `host.docker.internal`,让容器可以访问主机上的服务。
原因如下:
1. 网络隔离:Docker 容器运行在自己独立的网络环境中,因此在容器内使用 `localhost` 指的是容器本身,而不是主机。
2. 访问主机:要从容器内访问主机上的服务(例如运行在主机上的 Nacos 服务,端口为 `8848`),需要使用 `host.docker.internal`,它是指向主机的别名。这样,容器内部就可以访问主机上的服务。如果使用 `localhost:8848`,容器会试图在自身内部查找服务,而非主机上运行的服务,因此会导致连接失败。
这就是为什么在 Nacos的配置中,你看到 `server-addr` 使用了 `host.docker.internal` 的原因。
2.2 配置pom.xml 文件
子模块导入:spring-cloud-starter-alibaba-nacos-config 包。
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency>
父类pom.xml 导入包:spring-cloud-starter-alibaba-nacos-discovery 。
<!--nacos客户端依赖--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency>
2.3 可以删除或者注释 application.properties 文件
删除或者注释 application.properties 文件,否则里面的内容会影响nacos中的yml配置。
2.4 nacos中创建对应子模块的yml文件
本地打开nacos创建命名空间:
写入yml配置:
3 启动项目
启动准备:打开本地docker desktop 、idea 如果没有连接本地docker ,请根据参考博客进行参考连接、启动nacos。
对项目进行打包,内容已经更新,需要重新打包部署docker,否则内容不是最新的。
项目启动到docke desktop。
dockerTest1 启动成功:
dockerTest2 启动成功:
去docker desktop 查看是否存在容器和镜像。
镜像已经启动成功:
容器启动成功:
去nacos 服务列表查看是否存在服务。
两个服务,启动成功:
测试接口,是否可以正常访问。
成功访问:
通过上面所看到的,以及成功访问到接口说明:说明项目已经成功读取nacos里面的配置(端口号),并成功在docker desktop上部署项目。自此,整个docker desktop + nacos + springCloud 流程就已经走完。
把docker deskt 换 服务器docker.
把nacos 换 服务器nacos.
这不就是一个完整的项目了?
4 结语
感谢各位的支持和观看,有问题可以留言讨论,一起进步学习。