Java学习 - 编排SpringCloud项目

编排SpringCloud项目

主要项目架构:注册中心,配置中心,网关,服务提供者

1.问题及解决方法

主要问题1:项目多模块怎么打包?

这个项目,有四个模块,怎么打包部署呢?
直接在父工程,也就是root这里,clean,install,完事!
在这里插入图片描述

然后去本地仓库找到打包后的各个子模块的jar包,然后传输到虚拟机相应位置即可。传输方式的话,我这边用的xshell,在xshell直接 cd 到想放这些jar的目录,然后直接拖进去就行了,如果报错找不到rz命令-bash: rz: command not found,使用yum安装一下就行了yum -y install lrzsz

主要问题2:为啥各个容器运行起来后我的注册中心没有服务?

在这里插入图片描述

原因:
在windows下,我们一般写的都是:

eureka:
  client:
    service-url: 
      defaultZone: http://127.0.0.1:10086/eureka

或者写的 http://localhost:10086/eureka这样的(端口号可能不一样)

这样子,在windows下是可以的,因为就一个主机,一个localhost,但是在docker容器中就不行了,因为每一个容器都有自己的localhost和127.0.0.1,所以就导致不能正确访问注册中心!

如下:随便进入一个容器,查看ip
在这里插入图片描述

你再进其他容器,它每一个都是有一个127.0.0.1

问题原因知道了,那么解决方法就来了:

一种治标不治本的方法是进入注册中心的容器,找到他的ip中不为127.0.0.1的那个,就像上边那个图的eth0那个ip,然后把defaultZone: http://127.0.0.1:10086/eureka改为defaultZone: http://ip:端口/eureka

然后也能解决问题,但是每次重启容器都得修改

较好的办法是
注册中心还是不变的写法,但是其他要注册的服务就改一下配置文件:

eureka:
  client:
    service-url:
      defaultZone: http://discovery:10086/eureka

这里不一定是discovery,看你喜欢叫啥就叫啥,反正跟后边编排时的名字保持一致就行了。
注意,这样改了之后,windows下的就不能正常运行了,所以这是正常现象,不要担心
还要注意的是,如果你也是有配置中心,那么远程仓库的也不要忘记修改

然后,就是配置编排文件了
vi docker-compose.yml

version: "3"
services:
  mysql:
    image: mysql:5.6
    container_name: app_mysql
    volumes:
      - ../mysql/conf:/etc/mysql/conf.d
      - ../mysql/data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: 123456
    ports:
      - "3306:3306"

  rabbitmq:
    image: rabbitmq
    container_name: app_rabbitmq
    restart: always
    environment:
      RABBITMQ_DEFAULT_USER: "guest"
      RABBITMQ_DEFAULT_PASS: "guest"
    ports:
      - "5672:5672"

  nginx:
    image: nginx
    container_name: app_nginx
    links:
      - bill-gateway:gateway
    ports:
      - "80:80"
    volumes:
      - ../nginx/conf/nginx.conf:/etc/nginx/nginx.conf
      - ../nginx/logs:/var/log/nginx
      - ../nginx/html:/usr/share/nginx/html

  bill-eureka:
    image: bill-eureka
    ports:
      - "10086:10086"
    expose:
      - "10086"

  bill-gateway:
    image: bill-gateway
    container_name: bill-g
    ports:
      - "8086:8086"
    links:
      - bill-eureka:discovery
    expose:
      - "8086"

  bill-config:
    image: bill-config
    container_name: bill-c
    ports:
      - "12000:12000"
    links:
      - bill-eureka:discovery
    expose:
      - "12000"

  bill-service:
    image: bill-service
    container_name: bill-s
    ports:
      - "9091:9091"
    links:
      - bill-eureka:discovery
      - mysql
    depends_on:
      - mysql
      - bill-config
    expose:
      - "9091"

注意:
links:
- bill-eureka:discovery
这个links,注意后边的这个名字和你上边的那个defaultZone: http://discovery:端口/eureka是一样的,比如我这里都叫discovery

主要问题3:docker的数据库连不上,JDBC报错

这个原因其实和第二个是一样的,不过我以为配置了links: - mysql就可以了,所以才出的问题,解决方法就是:
在这里插入图片描述

把配置文件的改成你的docker-compose.yml 中需要连接数据库的那个 links后边的服务名,我这里是mysql
在这里插入图片描述

主要问题4:终于全都跑起来了,但是为啥我的页面发送请求就是得不到结果呢?

我已经在nginx中设置了:links bill-gateway
在这里插入图片描述

但是,我把页面中的请求地址改了也不行:
在这里插入图片描述

没办法,只好先取巧解决了,直接设置为了虚拟机ip,因为我前边容器暴露了这个8086端口,所以能访问:
在这里插入图片描述

等有空了再研究研究。

2.完整流程

1、部署各个镜像

部署bill_gateway

在 docker-files (如果没有请在根目录~下新建该文件夹)新建文件bill_gateway_dockerfile

vim bill_gateway_dockerfile

然后写内容:

FROM java:8
MAINTAINER zh <zh@163.com>
ADD gateway.jar bill-gateway.jar
CMD ["java","-jar","bill-gateway.jar"]
EXPOSE 8086

在这里插入图片描述

ADD gateway.jar bill-gateway.jar,前边这个jar是文件夹下的jar,后边是要设置的镜像名
在这里插入图片描述

然后build:

docker build -f ./bill_gateway_dockerfile -t bill-gateway .

在这里插入图片描述

部署service:

同上,不同在于文件名
vim bill_service_dockerfile
内容:

FROM java:8
MAINTAINER zh <zh@163.com>
ADD bill-service.jar bill-service.jar
CMD ["java","-jar","bill-service.jar"]
EXPOSE 9091

在这里插入图片描述

build:

docker build -f ./bill_service_dockerfile -t bill-service .

在这里插入图片描述

部署eureka:

同上,不同在于文件名
vim bill_eureka_dockerfile
内容:

FROM java:8
MAINTAINER zh <zh@163.com>
ADD eureka.jar bill-eureka.jar
CMD ["java","-jar","bill-eureka.jar"]
EXPOSE 10086

在这里插入图片描述

build:

docker build -f ./bill_eureka_dockerfile -t bill-eureka .

在这里插入图片描述

部署config:

同上,不同在于文件名
vim bill_config_dockerfile
内容:

FROM java:8
MAINTAINER zh <zh@163.com>
ADD config.jar bill-config.jar
CMD ["java","-jar","bill-config.jar"]
EXPOSE 12000

在这里插入图片描述

build:

docker build -f ./bill_config_dockerfile -t bill-config .

在这里插入图片描述

我这里是全部创建镜像了,当然也可以在compose中build就行了

2、编排启动

创建docker-compose目录

mkdir ~/docker-compose
cd ~/docker-compose

在这里插入图片描述

编写 docker-compose.yml 文件

我现在有的这几个镜像:
在这里插入图片描述

version: "3"
services:
  mysql:
    image: mysql:5.6
    container_name: app_mysql
    volumes:
      - ../mysql/conf:/etc/mysql/conf.d
      - ../mysql/data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: 123456
    ports:
      - "3306:3306"

  rabbitmq:
    image: rabbitmq
    container_name: app_rabbitmq
    restart: always
    environment:
      RABBITMQ_DEFAULT_USER: "guest"
      RABBITMQ_DEFAULT_PASS: "guest"
    ports:
      - "5672:5672"

  nginx:
    image: nginx
    container_name: app_nginx
    links:
      - bill-gateway:gateway
    ports:
      - "80:80"
    volumes:
      - ../nginx/conf/nginx.conf:/etc/nginx/nginx.conf
      - ../nginx/logs:/var/log/nginx
      - ../nginx/html:/usr/share/nginx/html

  bill-eureka:
    image: bill-eureka
    ports:
      - "10086:10086"
    expose:
      - "10086"

  bill-gateway:
    image: bill-gateway
    container_name: bill-g
    ports:
      - "8086:8086"
    links:
      - bill-eureka:discovery
    expose:
      - "8086"

  bill-config:
    image: bill-config
    container_name: bill-c
    ports:
      - "12000:12000"
    links:
      - bill-eureka:discovery
    expose:
      - "12000"

  bill-service:
    image: bill-service
    container_name: bill-s
    ports:
      - "9091:9091"
    links:
      - bill-eureka:discovery
      - mysql
    depends_on:
      - mysql
      - bill-config
    expose:
      - "9091"

在~/docker-compose 目录下 使用docker-compose 启动容器

docker-compose up -d # -d表示以守护模式启动

启动之后,就可以访问啦,但是还是有点问题就是:bill-service明明设置了depends_on bill-config,但是还是会出问题,因为这个bill-config有点慢,需要重启一下bill-service才行

在这里插入图片描述

3、外话:rabbitmq部署

然后是没有rabbitmq,拉取镜像,然后创容器,注意两个 -p,一个 -p的时候是这样的:

在这里插入图片描述

所以需要两个docker run -id --name=rabbit -p 5672:5672 -p 15672:15672 rabbitmq,因为它需要两个

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值