微服务架构中我们使用了必须的四个组件,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

使用docker-compose运行微服务项目#eureka+config+auth+gateway+module的更多相关文章

  1. Docker部署golang微服务项目

    这篇博客是为了记录一下部署步骤. 因为实训需要,我要在服务器上用docker部署我们小组的微服务项目.我们的微服务有Gateway,User,Scene,Device四个部分,分别占用不同的端口,其中 ...

  2. SpringCloud微服务项目实战 - API网关Gateway详解实现

    前面讲过zuul的网关实现,那为什么今天又要讲Spring Cloud Gateway呢?原因很简单.就是Spring Cloud已经放弃Netflix Zuul了.现在Spring Cloud中引用 ...

  3. 使用Docker Compose编排微服务

    一般微服务架构会包含若干个微服务,而每个微服务可以有多个实例,如果每个微服务都有手动启停,那么效率就很低.维护量比较大. 所以我们可以使用Docker Compose来轻松.高效地管理容器. 一.安装 ...

  4. docker微服务部署之:一,搭建Eureka微服务项目

    先说明一下docker需要搭建的微服务的基本情况: 项目情况:一个demo_parent项目,下面三个子模块:demo_eureka(eureka服务).demo_article(文章服务).demo ...

  5. docker微服务部署之:三,搭建Zuul微服务项目

    docker微服务部署之:二.搭建文章微服务项目 一.新增demo_eureka模块,并编写代码 右键demo_parent->new->Module->Maven,选择Module ...

  6. docker微服务部署之:二、搭建文章微服务项目

    docker微服务部署之:一,搭建Eureka微服务项目 一.新增demo_article模块,并编写代码 右键demo_parent->new->Module->Maven,选择M ...

  7. centos7下docker发布第一个微服务应用(Eureka)

    1.在windows下打包 微服务应用通过maven进行打包,在项目的pom.xml执行mvn clean package,或者直接通过idea或者eclipse进行maven打包 之上操作将在项目的 ...

  8. Docker实战 | 第二篇:IDEA集成Docker插件实现一键自动打包部署微服务项目,一劳永逸的技术手段值得一试

    一. 前言 大家在自己玩微服务项目的时候,动辄十几个服务,每次修改逐一部署繁琐不说也会浪费越来越多时间,所以本篇整理通过一次性配置实现一键部署微服务,实现真正所谓的一劳永逸. 二. 配置服务器 1. ...

  9. Docker 搭建 ELK 读取微服务项目的日志文件

    思路: 在docker搭建elasticsearch与kibana来展示日志,在微服务部署的机子上部署logstash来收集日志传到elasticsearch中,通过kibana来展示,logstas ...

随机推荐

  1. Python初学者第十三天 三级菜单程序小作业

    13day 作业题目: 三级菜单 作业需求: 数据结构: menu = { '北京':{ '海淀':{ '五道口':{ 'soho':{}, '网易':{}, 'google':{} }, '中关村' ...

  2. 获得用户完整的autodiscover配置文件

    outlook 2016 无法自定义配置exchange邮箱,需要使用自动发现来配置,但在配置过程中,经常出现异常的错误,导致无法通过. 之前的文章介绍了通过使用注册表指定autodiscover.x ...

  3. Python实例---利用正则实现计算器[参考版]

    利用正则进行运算规则的计算 版本一: # import re # # ss = '1 - 2 * ((60 - 30 + (-40/5) * (9 - 2 * 5 / 3 + 7 / 3 * 99 / ...

  4. Java学习---Java代码编写规范

    编码规范 1 前言为确保系统源程序可读性,从而增强系统可维护性,java编程人员应具有基本类似的编程风格,兹制定下述Java编程规范,以规范系统Java部分编程.系统继承的其它资源中的源程序也应按此规 ...

  5. Java学习---Excel读写操作

    1.1.1. 简介 Apache POI 使用Apache POI 完成Excel读写操作 Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API ...

  6. layer 遮罩层等待

    效果 代码: js函数之前:var msg = layer.msg('努力中加载中...', {icon: 16,shade: [0.5, '#f5f5f5'],scrollbar: false,of ...

  7. Python 及其基础语法

    重新开始玩 Python,打算就是学完实验楼的"Python3 简明教程",然后就可以玩点小项目,先前学了点 Python2 就不管它啦. 以上. 认识 Python Python ...

  8. BT提权wind2008R2

    昨天中午打开电脑,对着菜刀在那翻啊翻,找到一个64bit的os. 因为这个ip不在曾经提权过的主机列表里面,心想这应该是个低权限的网站,顺手打个whoami试试,结果给我返回了"nt aut ...

  9. JS:二维数组排序和获取子级元素

    JS:二维数组排序和获取子级元素 1. 二维数组排序 1.按数值排序 var arr = [[1, 2, 3], [7, 2, 3], [3, 2, 3]]; 如果我们要按每个子数组的第一列来排序要如 ...

  10. java二维数组定义初始化-杨辉三角

    public class Array2Demo2_3 { public static void main(String[] args) { //定义初始化 int[][] arr = new int[ ...