DevOps
docker
docker
  • 基础知识
    • 概述
      • 核心概念
      • Docker 引擎
      • 基本架构
      • 联合文件系统
      • 网络虚拟化
    • 安装
      • 安装Docker Engine
      • 以非 root 用户使用 Docker
      • 配置 Docker 服务
    • 3. Docker镜像
      • 3.1 获取镜像(pull)
      • 3.2 查看镜像信息
        • images
        • tag
        • inspect
        • history
      • 3.3 搜寻镜像(search)
      • 3.4 删除镜像(rmi)
      • 3.5 清理镜像(prune)
      • 3.6 创建镜像
        • 基于已有容器创建
        • 基于本地模板导入
        • 基于Dockerfile创建
      • 3.7 导出镜像(save)
      • 3.8 导入镜像(load)
      • 3.9 上传镜像(push)
    • 4. Docker容器
      • 4.1 新建容器(create)
      • 4.2 启动容器(start)
      • 4.3 新建并启动容器(run)
      • 4.4 查看容器输出(logs)
      • 4.5 暂停容器(pause)
      • 4.6 恢复容器(unpause)
      • 4.7 停止止容器(stop)
      • 4.8 清除容器(prune)
      • 4.9 重启容器(restart)
      • 4.10 进入容器
      • 4.11 删除容器(rm)
      • 4.12 导出容器(export)
      • 4.13 导入容器(import)
      • 4.14 查看容器详情(inspect)
      • 4.15 查看容器内进程(top)
      • 4.16 查看统计信息(stats)
      • 4.17 复制文件(cp)
      • 4.18 查看变更(diff)
      • 4.19 更新配置(update)
    • 5. Docker仓库
      • 5.1 Docker Hub
      • 5.2 本地私有仓库
        • 使用HTTPS协议
        • 添加用户认证
        • 使用push时遇到的一些坑
    • 6. Docker数据管理
      • 6.1 数据卷
      • 6.2 数据卷容器
      • 6.3 利用数据卷容器来迁移数据
    • 7. 端口映射与容器互联
      • 7.1 端口映射
      • 7.2 容器互联
    • 8. Dockerfile
      • 8.1 基本结构
      • 8.2 指令说明
        • ARG
        • FROM
        • LABEL
        • EXPOSE
        • ENV
        • ENTRYPOINT
        • VOLUME
        • USER
        • WORKDIR
        • ONBUILD
        • STOPSIGNAL
        • HEALTHCHECK
        • SHELL
        • RUN
        • CMD
        • ADD
        • COPY
      • 8.3 创建镜像
      • 8.4 最佳实践
    • 9. Compose
      • 9.1 安装
      • 9.2 Compose文件
        • 9.2.1 services
        • 9.2.2 networks
        • 9.2.3 多文件Compose
          • Extend
          • Merge
          • Include
        • 9.2.4 锚点和别名
      • 9.3 Compose命令
      • 9.4 实例
  • 中间件安装
    • 安装tomcat
    • 安装redis
      • 单机
      • Cluster集群
    • 安装mysql
    • 安装ssh服务
      • 基于commit命令创建
      • 使用Dockerfile创建
    • 安装Apache
    • 安装ngnix
  • 操作系统镜像
    • BusyBox
    • ☑️Alpine
    • Debian/Ubuntu
    • CentOS/Fedora
  • Tips
    • docker 引擎开启远程访问
    • dockerfile-maven-plugin
    • IDEA 连接远程 docker
Powered by GitBook
On this page

Was this helpful?

Edit on GitHub
  1. 基础知识
  2. 9. Compose

9.4 实例

services:
  config-server:
    image: 192.168.10.110:5000/config-server:0.0.1-SNAPSHOT
    networks:
      backend:
        aliases: 
          - config-server
    ports:
      - "8071:8071"
    environment:
      encrypt.key: "123456789abcdef"
      spring.profiles.active: "git"
    healthcheck:
      test: ["CMD-SHELL", "curl -sf http://localhost:8071/actuator/health >> /dev/null && exit 0 || exit 1"]
      interval: 1m30s
      timeout: 30s
      retries: 5
      start_period: 10s
  cloud-learning:
    image: 192.168.10.110:5000/cloud-learning:0.0.1-SNAPSHOT
    networks:
      backend:
        aliases: 
          - cloud-learning
    ports:
      - "8080:8080"
    environment:
      ENCRYPT_KEY: "fje83Ki8403Iod87dne7Yjsl3THueh48jfuO9j4U2hf64Lo"
      SPRING_PROFILES_ACTIVE: "dev"
      SPRING_CLOUD_CONFIG_URI: "http://config-server:8071"
    depends_on:
      config-server:
        condition: service_healthy

networks:
  backend:
    driver: bridge

上述的Compose文件定义了两个service:config-server和cloud-learning。两者均是web端微服务,其中config-server是一个Spring Cloud Config Server,而cloud-learning是Config的客户端。

depends_on的问题

在cloud-learning启动时需要从config-server获取配置信息,因此cloud-learning需要先等待config-server启动就绪后才能正常工作。

而depends_on默认的condition是service_started,它只是约定容器启动的顺序。观察docker compose up命令执行的日志可以发现,两个微服务会并行启动,cloud-learning并不会等待config-server处于就绪状态能够提供服务后再启动!因此,cloud-learning启动时会报告配置服务连接不上的警告。

解决方案:

为config-server添加健康检查命令(healthcheck),检查微服务是否启动完成,并将依赖条件定义为service_healthy。此时,只有当config-server通过健康检查后,cloud-learning才会开始启动。

健康检查命令输出:0表示healthy;1表示unhealthy。

environment指令用法

在上述的两个服务中,均利用环境变量覆盖了微服务中的某些属性,比如用ENCRYPT_KEY覆盖encrypt.key。

可以使用两种环境变量的表示方式:

  • 所有字母大写,并将点”.“转换成下划线"_",如ENCRYPT_KEY。

  • 保持和properties文件中的属性一样,如:encrypt.key。

Previous9.3 Compose命令Next中间件安装

Last updated 1 year ago

Was this helpful?

condition为service_started时,可以看到明显的交错
按照上述示例的配置,condition为service_healthy时,两个service的启动并不存在交错