当前位置: 移动技术网 > 科技>操作系统>Linux > 使用docker-compose运行微服务项目#eureka+config+auth+gateway+module

使用docker-compose运行微服务项目#eureka+config+auth+gateway+module

2018年11月29日  | 移动技术网科技  | 我要评论

微服务架构中我们使用了必须的四个组件,eureka config gateway auth

其中config依赖eurekaauth依赖前两者,gateway又依赖auth

这样就确定了四个组件的启动顺序为 ,eureka -- config -- auth -- gateway

既然有依赖,那就肯定会使用depends_on参数,但是这个参数只会判断容器启动没有,并不会去判断容器是否能用,就像你创建了一个nginx镜像的容器,容器启动后并不代表能立马访问;

所有就需要使用健康检查 healthcheck

我的思路是容器创建启动后去访问baidu,如果能访问成功,则判断容器启动成功,健康状态为healthy,但是前提是容器有curl命令

其实上面的方法还是不严谨,目前也还在学习,因为存在一种可能就是容器可以去访问baidu了,并不一定代表外部容器能访问这个容器!

四个组件都加入了创建的自定义桥接网络中,与其他业务隔离

后面的第二个docker-compose.yaml文件,是业务模块容器,因为也要加入当前网络中,所以使用了external_links参数,external_linkslinks的区别就是前者可连接非当前compose定义的网络中

networks:
  default:
    external:
      name: fbl-base_fbl

external_links的使用,需要定义networks为compose外部的已创建的网络名称

networks:
  fbl:
    driver: bridge

在第一个compose中自定义了名为fbl的桥接网络

以下仅供学习使用,生产请勿使用!

第一个compose:

# 版本不同,部分语法不同,比如healthcheck在2版本就不能使用,2.1就可以
version: '2.1'
services:
  fbl-eureka:
# 构建镜像,依赖dockerfile文件
    build:
      context: ./
      dockerfile: dockerfile-eureka
# 容器名称
    container_name: fbl-eureka
# 容器主机名
    hostname: fbl-eureka
# 设置环境变量,这里是设置的时区
    environment:
      - tz=asia/shanghai
# 挂载日志文件到宿主机
    volumes:
      - /data/docker/logs:/data/fbl/logs/fbl-cloud/
# 暴露端口
    ports:
      - 1025:1025
# 重启模式
# no,默认策略,在容器退出时不重启容器
# on-failure,在容器非正常退出时(退出状态非0),才会重启容器
# on-failure:3,在容器非正常退出时重启容器,最多重启3次
# always,在容器退出时总是重启容器
# unless-stopped,在容器退出时总是重启容器,但是不考虑在docker守护进程启动时就已经停止了的容器
    restart: always
# 健康检查
    healthcheck: 
      test: ["cmd-shell", "curl -f http://baidu.com && exit 0 || exit 1"] 
# 检查间隔时间
      interval: 10s
# 检查请求超时时间,超时则为失败
      timeout: 3s
# 可以的失败次数
      retries: 10
# 加入的网络
    networks:
      - fbl

  fbl-config:
# 连接容器eureka,因为容器都在fbl网络中,可以直接用容器名连接
    links:
      - fbl-eureka:eureka
    build:
      context: ./
      dockerfile: dockerfile-config
    container_name: fbl-config
    hostname: fbl-config
    environment:
      - tz=asia/shanghai
    volumes:
      - /data/docker/logs:/data/fbl/logs/fbl-cloud/
    ports:
      - 1111:1111
  # 依赖于eureka启动,当eureka正常启动,健康状态为healthy时,启动该容器
    depends_on:
      fbl-eureka:
        condition: service_healthy
    restart: always
    healthcheck: 
      test: ["cmd-shell", "curl -f http://baidu.com && exit 0 || exit 1"]
      interval: 10s
      timeout: 3s
      retries: 10
    networks:
      - fbl

  fbl-auth:
    links:
      - fbl-eureka:eureka
    build:
      context: ./
      dockerfile: dockerfile-auth
    container_name: fbl-auth
    hostname: fbl-auth
    environment:
      - tz=asia/shanghai
    volumes:
      - /data/docker/logs:/data/fbl/logs/fbl-cloud/
    ports:
      - 3000:3000
    depends_on:
      fbl-config:
         condition: service_healthy
    restart: always
    healthcheck: 
      test: ["cmd-shell", "curl -f http://baidu.com && exit 0 || exit 1"]
      interval: 10s
      timeout: 3s
      retries: 10
    networks:
      - fbl

  fbl-gateway:
    links:
      - fbl-eureka:eureka
      - fbl-auth:auth
    build:
      context: ./
      dockerfile: dockerfile-gateway
    container_name: fbl-gateway
    hostname: fbl-gateway
    environment:
      - tz=asia/shanghai
    volumes:
      - /data/docker/logs:/data/fbl/logs/fbl-cloud/
    ports:
      - 9999:9999
    depends_on:
      fbl-auth:
         condition: service_healthy       
    restart: always
    healthcheck: 
      test: ["cmd-shell", "curl -f http://baidu.com && exit 0 || exit 1"]
      interval: 10s
      timeout: 3s
      retries: 10
    networks:
      - fbl

networks:
  fbl:
    driver: bridge

第二个compose,为依赖四大组件的模块服务

version: '2.1'
services:
  fbl-findhousewx-service1:
    build:
      context: ./
      dockerfile: dockerfile-findhousewx
    container_name: fbl-findhousewx1
    hostname: fbl-findhousewx1
    healthcheck: 
      test: ["cmd-shell", "curl -f http://baidu.com && exit 0 || exit 1"] 
      interval: 10s
      timeout: 3s
      retries: 10
    environment:
      - tz=asia/shanghai
    volumes:
      - /data/docker/logs:/data/fbl/logs/fbl-cloud/
    external_links:
      - fbl-eureka:eureka
      - fbl-config:config
    ports:
      - 4020:4020
    restart: always

networks:
  default:
    external:
      name: fbl-base_fbl

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网