使用docker-compose运行微服务项目#eureka+config+auth+gateway+module
程序员文章站
2022-05-28 20:42:58
微服务架构中我们使用了必须的四个组件, `config gateway auth` 其中 依赖 ,`auth gateway auth` 这样就确定了四个组件的启动顺序为 , 既然有依赖,那就肯定会使用 参数,但是这个参数只会判断容器启动没有,并不会去判断容器是否能用,就像你创建了一个nginx镜像 ......
微服务架构中我们使用了必须的四个组件,eureka
config
gateway
auth
其中config
依赖eureka
,auth
依赖前两者,gateway
又依赖auth
这样就确定了四个组件的启动顺序为 ,eureka
-- config
-- auth
-- gateway
既然有依赖,那就肯定会使用depends_on
参数,但是这个参数只会判断容器启动没有,并不会去判断容器是否能用,就像你创建了一个nginx镜像的容器,容器启动后并不代表能立马访问;
所有就需要使用健康检查 healthcheck
我的思路是容器创建启动后去访问baidu,如果能访问成功,则判断容器启动成功,健康状态为healthy,但是前提是容器有curl
命令
其实上面的方法还是不严谨,目前也还在学习,因为存在一种可能就是容器可以去访问baidu了,并不一定代表外部容器能访问这个容器!
四个组件都加入了创建的自定义桥接网络中,与其他业务隔离
后面的第二个docker-compose.yaml
文件,是业务模块容器,因为也要加入当前网络中,所以使用了external_links
参数,external_links
与links
的区别就是前者可连接非当前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
-
使用 docker-compose 运行 MySQL
-
使用 docker-compose 运行 MySQL的方法
-
Hbuildx中使用uni-app 新建 微信小程序项目 以及 运行相关配置
-
使用docker-compose运行微服务项目#eureka+config+auth+gateway+module
-
微信小程序 在Chrome浏览器上运行以及WebStorm的使用
-
关于微信小程序在Chrome浏览器上运行以及WebStorm的使用
-
使用 docker-compose 运行 MySQL
-
使用 docker-compose 运行 MySQL的方法
-
关于微信小程序在Chrome浏览器上运行以及WebStorm的使用