【Docker】Docker运行SpringCloud微服务并通过IP进行服务注册

近期在做项目的容器化改造,公司提供了一整套容器化管理平台,在正式上之前,现在本地搭建了一套测试环境(Centos7+Docker)去跑一下服务,测试dockerfiler,eureka注册,服务调用等。

目前有一个问题,各个应用都可以起来,Eureka客户端也可以注册到EurekaServer,每个服务也都可以正常访问,但是在进行服务间调用的时候总是提示"connection refused"。

测试环境:Centos7*2[192.168.56.101,192.168.56.102]+Docker

系统:SpringCloud、SpringBoot2.x、Eureka

1、配置并启动Eureka Server

Eureka Server运行在101服务器

Eureka服务端配置如下:



server:
  port: 8011

eureka:
  instance:
    hostname: localhost
  client:
    register-with-eureka: false
    fetch-registry: false
    enable-self-preservation: false
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

  编辑dockerfile:

#基础dockerfile地址,新项目不要更改
FROM java:8

#dockerfile owner 新项目请变更为 项目名/owner
MAINTAINER  projectname/owner

#ADD 项目包名到容器的 /data/xxx路径下
ADD server-0.0.1.jar /data/xxx/

# 应用端口
EXPOSE 8011

ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN mkdir /data/logs

#切换工作目录
WORKDIR /data/xxx

#启动目录
ENTRYPOINT   ["java","-jar","server-0.0.1.jar"]

构建镜像:

docker build -f server-8001 -t server:0.0.1 .

运行容器:

docker run -d -p 8001:8001 --name=server --hostname=server  server:0.0.1

访问容器:http://192.168.56.101:8001

2、配置并启动Eureka Client

Eureka 客户端配置如下:

eureka:
  client:
    fetch-registry: true
    register-with-eureka: true
    serviceUrl:
      defaultZone: http://192.168.56.102:8011/eureka/
  instance:
    prefer-ip-address: true #使用IP进行注册
    ip-address: ${HOST} # 使用固定IP

客户端注册的时候采用的是IP注册的方式,因为Docker运行微服务,进行注册的时候,如果采用实例ID注册,然么在进行服务调用时最后在封装请求的时候获取的是Docker容器的IP,比如172.17.0.1。这时候在通过OpenFeign进行服务调用的时候就会失败。

关于如何动态修改变量“HOST”,经过测试后有以下两种方式

方式一:

在执行docker run的时候通过"-e"传递。

编辑dockerfile:

#基础dockerfile地址,新项目不要更改
FROM java:8

#dockerfile owner 新项目请变更为 项目名/owner
MAINTAINER  projectName/owner

#ADD 项目包名到容器的 /data/gwapp路径下
ADD projectname-0.0.1-SNAPSHOT.jar /data/xxx/

# 应用端口
EXPOSE 8014

ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

RUN mkdir /data/logs
#切换工作目录
WORKDIR /data/xxx/

#启动目录
ENTRYPOINT   ["java","-jar","xxx-0.0.1-SNAPSHOT.jar"]

构建镜像:

docker build -f xxx -t xxx:0.0.1 .

然后运行容器,并设置HOST参数:

docker run -d -e HOST='192.168.56.101' -p 8014:8014 --name=xxx --restart=always --hostname=xxx  xxx:0.0.1

注意:“-e” 参数要写在“-p”前面。

方式二:

在构建镜像的时候写入:

dockerFile:

#基础dockerfile地址,新项目不要更改
FROM java:8

#dockerfile owner 新项目请变更为 项目名/owner
MAINTAINER  projectName/xxx

#ADD 项目包名到容器的 /data/gwapp路径下
ADD xxx-0.0.1.jar /data/xxx/

# 应用端口
EXPOSE 8011

ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN mkdir /data/logs

#切换工作目录
WORKDIR /data/xx

#启动目录【其实这里也有两种写法】
ENTRYPOINT   ["java","-DHOST=192.168.56.101","-jar","xxx-0.0.1.jar"]
#ENTRYPOINT   ["java","-jar","xxx-0.0.1.jar","--HOST=192.168.56.101"]

【这里应该也需要写成动态可变的,有了解的可以说一下】

构建镜像:

docker build -f xxx -t xxx:0.0.1 .

然后运行容器,并设置HOST参数:

docker run -d -p 8014:8014 --name=xxx --restart=always --hostname=xxx  xxx:0.0.1

至此就可以实现服务注册,解决服务调用失败问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Novel-Cloud是基于小说精品屋-plus构建的Spring Cloud 微服务技术栈学习型小说项目,致力于原创文学阅读与写作,提供了爬虫工具用于开发过程中测试数据的采集。采用了时下最新的Spring Boot 2.2.5.RELEASE 、Spring Cloud Hoxton.SR4、 MyBatis3DynamicSql、Sharding-Jdbc、Redis、RabbitMq、ElasticSearch、Docker等流行技术,集成了Nacos注册中心/配置中心、Spring Cloud Gateway网关、Spring Boot Admin监控中心、ELK分布式日志分析等基础服务。前端计划使用Vue开发。 Novel-Cloud安装步骤: 1、下载源码,如果是ZIP包,下载后需要解压。 2、开发环境配置,请确保开发机器上已安装如下软件环境。  Java开发工具包jdk1.8+  IDE(Eclipse或IntelliJ IDEA)  项目管理工具maven  微服务注册中心/配置中心nacos  分布式缓存服务Redis  搜索引擎服务ElasticSearch  ElasticSearch可视化客户端Kibana  消息中间件RabbitMq  数据库服务Mysql 3、登陆nacos配置中心导入下载源码中的配置文件。 4、使用IDE导入下载的源码(这里以IntelliJ IDEA为例)。 5、修改通用配置中的配置中心地址和命名空间ID。 6、启动微服务网关。  修改网关服务的配置中心地址和命名空间ID  修改网关配置文件注册中心地址和命名空间ID  启动网关服务novel-gateway 7、启动监控服务。  修改监控服务的配置中心地址和命名空间ID  修改监控微服务注册中心地址和命名空间ID以及登陆的用户名和密码  启动监控服务novel-monitor,启动方法和网关服务相同  访问监控服务,因为网关中配置了监控服务的路由,所以可直接或通过网关来访问监控服务:http://<网关ip>:<网关端口号>/monitor 8、启动业务微服务,这里以小说微服务为例。  修改网关配置文件book-service.yml中的注册中心地址和命名空间ID,以及其他配置(数据库/redis/elasticsearch/mq等),方法同上  启动novel-service服务,方法同上  访问接口文档:http://<服务IP>:<服务端口号>/swagger-ui.html,  例如:http://127.0.0.1:620/swagger-ui.html 9、通过网关统一接口访问路径。 http://<网关IP>:<网关端口号>/api/<接口路径> 以小说小说分类列表查询接口为例:http://127.0.0.1:527/api/book/listBookCategory 10、访问用户中心/作家中心等需要认证的接口。  访问登陆接口获取JWT  设置JWT认证  访问需要认证的接口
### 回答1: 首先,你需要准备一个服务器,然后把 springcloud 微服务项目全部打包成镜像,然后使用 docker-compose 将这些镜像组织起来,最后将这个组织起来的 docker-compose.yml 文件部署到服务器上即可。 ### 回答2: 要将含有多模块的Spring Cloud微服务项目部署到服务器,可以按照以下步骤使用Docker进行部署。 1. 准备Docker环境:在服务器上安装和配置Docker。可以使用Docker官方提供的安装教程进行安装。 2. 构建Docker镜像:在每个微服务模块的根目录下创建一个Dockerfile文件,并在其中定义构建该模块的Docker镜像的步骤。Dockerfile可以指定使用哪个基础镜像,复制项目代码到镜像中,设置项目依赖的环境等。然后使用Docker命令来构建镜像。 3. 编写Docker Compose文件:在项目根目录下创建一个docker-compose.yml文件,用于定义多个镜像之间的关系和网络配置。在文件中可以定义每个微服务使用的Docker镜像、端口映射、环境变量配置、网络设置等。 4. 启动微服务:使用Docker Compose命令启动微服务项目。此命令会根据docker-compose.yml文件中定义的配置信息,创建并启动各个微服务容器,并自动进行容器间的网络通信配置。 通过以上步骤,我们可以将含有多模块的Spring Cloud微服务项目部署到服务器上的Docker容器中。这样可以实现项目的快速部署和扩展,同时也能减少项目间的依赖和冲突。 ### 回答3: 要将含有多模块的Spring Cloud微服务项目部署到服务器上,可以按照以下步骤进行操作: 第一步是准备服务器环境。确保服务器已经安装了Docker引擎,并且网络设置正确。 第二步是构建Docker镜像。在项目根目录下创建Dockerfile文件,编写对应的镜像构建脚本。根据项目需求,可以使用不同的基础镜像,例如OpenJDK或Alpine Linux。在Dockerfile中定义容器所需的软件环境、依赖项和项目文件。 第三步是使用Docker Compose定义服务配置。创建docker-compose.yml文件,并编写服务配置,包括每个服务的镜像和容器设置,以及网络配置。根据项目需要,可以定义多个服务,每个服务对应一个模块。 第四步是使用Docker Compose部署服务。在项目根目录下执行以下命令部署服务: ``` docker-compose up -d ``` 该命令会根据docker-compose.yml文件中的配置启动并运行所有定义的服务。 第五步是查看部署结果。执行以下命令查看服务运行情况: ``` docker ps ``` 该命令会列出所有正在运行的容器,可以通过容器的日志查看服务的详细日志信息。 通过以上步骤,就可以将含有多模块的Spring Cloud微服务项目成功地部署到服务器上。使用Docker可以提供更加灵活和可移植的环境,简化了项目的部署和管理过程,提高了开发效率和系统稳定性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值