当前位置: 首页 > web >正文

Docker Compose文件内容解释

Docker Compose文件内容解释

  • 一、Docker Compose文件,仅用于做案例
  • 二、版本部分(已注释)
  • 三、服务定义
  • 四、环境变量配置
  • 五、数据卷挂载
  • 六、启动命令
  • 七、健康检查
  • 八、网络配置
    • (一)网络的作用
    • (二)为什么需要这个配置?
    • (三)服务间通信示例
    • (四)默认网络 vs 自定义网络
  • 九、总结

一、Docker Compose文件,仅用于做案例

# version: '3.5'services:etcd:container_name: milvus-etcdimage: quay.io/coreos/etcd:v3.5.18environment:- ETCD_AUTO_COMPACTION_MODE=revision- ETCD_AUTO_COMPACTION_RETENTION=1000- ETCD_QUOTA_BACKEND_BYTES=4294967296- ETCD_SNAPSHOT_COUNT=50000volumes:- ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/etcd:/etcdcommand: etcd -advertise-client-urls=http://127.0.0.1:2379 -listen-client-urls http://0.0.0.0:2379 --data-dir /etcdhealthcheck:test: ["CMD", "etcdctl", "endpoint", "health"]interval: 30stimeout: 20sretries: 3minio:container_name: milvus-minioimage: minio/minio:RELEASE.2023-03-20T20-16-18Zenvironment:MINIO_ACCESS_KEY: minioadminMINIO_SECRET_KEY: minioadminports:- "9001:9001"- "9000:9000"volumes:- ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/minio:/minio_datacommand: minio server /minio_data --console-address ":9001"healthcheck:test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]interval: 30stimeout: 20sretries: 3standalone:container_name: milvus-standaloneimage: milvusdb/milvus:v2.5.6command: ["milvus", "run", "standalone"]security_opt:- seccomp:unconfinedenvironment: ETCD_ENDPOINTS: etcd:2379MINIO_ADDRESS: minio:9000volumes:- ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/milvus:/var/lib/milvushealthcheck:test: ["CMD", "curl", "-f", "http://localhost:9091/healthz"]interval: 30sstart_period: 90stimeout: 20sretries: 3ports:- "19530:19530"- "9091:9091"depends_on:- "etcd"- "minio"attu:container_name: attuimage: zilliz/attu:v2.5environment: - MILVUS_URL=10.100.3.222:19530ports:- "9333:3000"networks:default:name: milvus

我将解释这个 Docker Compose 文件的内容。这个文件定义了一个名为 etcd 的服务,它是一个开源的分布式键值存储系统,常用于服务发现、配置管理等场景。

二、版本部分(已注释)

# version: '3.5'

这行被注释掉了,它指定了 Docker Compose 文件的版本。不同版本支持不同的特性,当前注释掉后,Docker Compose 会使用默认版本。建议取消注释并指定一个版本,如 3.8,以确保兼容性。

三、服务定义

services:etcd:container_name: milvus-etcdimage: quay.io/coreos/etcd:v3.5.18
  • services: 顶级键,用于定义多个服务(容器)。
  • etcd: 服务名称,可以自定义,这里命名为 etcd。
  • container_name: 指定容器运行时的名称,这里是 milvus-etcd。
  • image: 指定使用的 Docker 镜像,这里使用 CoreOS 提供的 etcd 镜像,版本为 v3.5.18。

四、环境变量配置

    environment:- ETCD_AUTO_COMPACTION_MODE=revision- ETCD_AUTO_COMPACTION_RETENTION=1000- ETCD_QUOTA_BACKEND_BYTES=4294967296- ETCD_SNAPSHOT_COUNT=50000

这些是传递给容器的环境变量,用于配置 etcd 的行为:

  • ETCD_AUTO_COMPACTION_MODE=revision: 启用基于版本的自动压缩,保留最近的 1000 个修订版本。
  • ETCD_AUTO_COMPACTION_RETENTION=1000: 压缩时保留的修订版本数量。
  • ETCD_QUOTA_BACKEND_BYTES=4294967296: 后端存储的最大字节数(4GB)。
  • ETCD_SNAPSHOT_COUNT=50000: 每 50000 次写操作生成一次快照。

五、数据卷挂载

    volumes:- ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/etcd:/etcd
  • volumes: 定义容器与宿主机之间的数据卷映射。
  • ${DOCKER_VOLUME_DIRECTORY:-.}: 环境变量替换,如果未设置 DOCKER_VOLUME_DIRECTORY,则使用当前目录(.)。
  • /volumes/etcd:/etcd: 将宿主机的 ./volumes/etcd 目录挂载到容器的 /etcd 目录,用于持久化存储 etcd 数据。

六、启动命令

    command: etcd -advertise-client-urls=http://127.0.0.1:2379 -listen-client-urls http://0.0.0.0:2379 --data-dir /etcd
  • command: 覆盖容器默认的启动命令。
  • etcd: 启动 etcd 服务。
  • -advertise-client-urls=http://127.0.0.1:2379: 向客户端宣告的 URL,客户端使用此地址与 etcd 通信。
  • -listen-client-urls http://0.0.0.0:2379: 监听客户端连接的地址,0.0.0.0 表示监听所有接口。
  • --data-dir /etcd: 指定数据存储目录,与前面的卷挂载路径对应。

七、健康检查

    healthcheck:test: ["CMD", "etcdctl", "endpoint", "health"]interval: 30stimeout: 20sretries: 3
  • healthcheck: 定义容器健康检查机制。
  • test: [“CMD”, “etcdctl”, “endpoint”, “health”]: 使用 etcdctl 命令检查 etcd 端点的健康状态。
  • interval: 30s: 每 30 秒检查一次。
  • timeout: 20s: 每次检查超时时间为 20 秒。
  • retries: 3: 连续失败 3 次后,认为容器不健康。

八、网络配置

networks:default:name: milvus
  • networks: 顶级键,用于定义服务间通信的网络。
  • default: 默认网络的名称,是一个特殊的网络,所有未显式指定网络的服务都会连接到这个网络。
  • name: milvus: 将默认网络的实际名称设置为 milvus

(一)网络的作用

在 Docker 中,网络用于容器间的通信。当你启动多个服务时,它们可以通过网络互相发现和连接。这里的配置创建了一个名为 milvus 的网络,并将 etcd 服务连接到这个网络中。

(二)为什么需要这个配置?

如果你有多个相关的服务(如 Milvus 数据库及其依赖的组件),它们通常需要在同一个网络中才能相互通信。通过指定 name: milvus,你确保了:

  1. 所有连接到 milvus 网络的服务可以通过服务名(如 etcd)互相访问。
  2. 网络名称是可预测的,便于其他服务加入这个网络。

(三)服务间通信示例

假设你还有一个连接到 milvus 网络的 Milvus 服务,它可以通过以下方式访问 etcd

import etcd3
client = etcd3.client(host='etcd', port=2379)  # 直接使用服务名 'etcd' 作为主机名

(四)默认网络 vs 自定义网络

如果不指定 networks 部分,Docker Compose 会自动创建一个默认网络,但名称会基于项目名称生成(如 projectname_default)。通过显式命名网络为 milvus,你可以更清晰地组织网络结构,也便于与其他服务集成。

九、总结

这个 Docker Compose 文件定义了一个 etcd 服务,配置了环境变量、数据持久化、启动参数和健康检查。它使用 milvus-etcd 作为容器名称,将数据存储在宿主机的 volumes/etcd 目录中,并通过 2379 端口提供服务。这是一个单节点的 etcd 配置,通常用于开发或测试环境。

网络部分配置创建了一个名为 milvus 的 Docker 网络,并将 etcd 服务连接到这个网络中。这样,其他同样连接到 milvus 网络的服务就可以通过服务名(如 etcd)与这个 etcd 实例通信。这是微服务架构中常用的网络组织方式。

http://www.xdnf.cn/news/15391.html

相关文章:

  • jdk1.8 nio相关。java对象和epoll三大函数怎么关联的?(有点乱有点跳)
  • Redis技术笔记-从三大缓存问题到高可用集群落地实战
  • 【计算机网络架构】环型架构简介
  • 【保姆级图文详解】Spring AI 中的工具调用原理解析,工具开发:文件操作、联网搜索、网页抓取、资源下载、PDF生成、工具集中注册
  • DETRs与协同混合作业训练之CO-DETR论文阅读
  • spring--@Autowired
  • Wireshark的安装和基本使用
  • 第七章 算法题
  • Docker从环境配置到应用上云的极简路径
  • 【micro:bit】从入门到放弃(一):在线、离线版本的使用
  • 第三章-提示词-探秘大语言基础模型:认知、分类与前沿洞察(9/36)
  • C++:宏
  • 从零开始学习深度学习-水果分类之PyQt5App
  • LLaMA-Factory的webui快速入门
  • NLP-迁移学习
  • 海豚远程控制APP:随时随地,轻松掌控手机
  • [Rust 基础课程]选一个合适的 Rust 编辑器
  • Vue 3 动态ref问题
  • 如何将FPGA设计的验证效率提升1000倍以上(4)
  • MailSpring
  • python excel处理
  • python-enumrate函数
  • 字母异位词分组
  • Linux驱动09 --- 环境搭建
  • 计算机毕业设计Java停车场管理系统 基于Java的智能停车场管理系统开发 Java语言实现的停车场综合管理平台
  • 如何检测自动化设备中的直线导轨品质是否优良?
  • UE5多人MOBA+GAS 19、创建升龙技能,以及带力的被动,为升龙技能添加冷却和消耗
  • 【408考研知识点全面讲解计算机学科专业基础综合(408)】——数据结构之排序
  • SELECT ... INTO OUTFILE和LOAD DATA INFILE
  • 请求服务端获取broker的机房归属信息异常