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

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.dtcms.com/a/276923.html

相关文章:

  • 鸿蒙选择本地视频文件,并获取首帧预览图
  • 14.ResourceMangaer启动解析
  • 【java】AI内容用SSE流式输出
  • 【读书笔记】《C++ Software Design》第七章:Bridge、Prototype 与 External Polymorphism
  • 数据库3.0
  • IPC框架
  • DAY01:【ML 第一弹】机器学习概述
  • php生成二维码
  • 15.手动实现BatchNorm(BN)
  • Spring Boot中的路径变量
  • JavaEE Tomcat
  • AI大模型计数能力的深度剖析:从理论缺陷到技术改进
  • 傅里叶变换中相位作用
  • 并查集 UnionFind Test01
  • 字符串问题(哈希表解决)
  • linux:进程详解(2)
  • Java结构型模式---享元模式
  • 代码随想录|图论|14有向图的完全可达性
  • JavaScript加强篇——第八章 高效渲染与正则表达式
  • 50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | ToastNotification(推送通知)
  • C++进阶-多态2
  • 学习python调用WebApi的基本用法(2)
  • iw 命令 -- linux 无线管理
  • 利用 MySQL 进行数据清洗
  • C++类和对象(一)
  • Intel英特尔ICH7R/ICH8R/ICH9R/ICH10R系列下载地址--intel_msm_8961002 下载 Version 8.9.6.1002
  • 001_Claude开发者指南介绍
  • UNet改进(22):融合CNN与Transformer的医学图像分割新架构
  • MaxCompute过程中常见的数据倾斜场景以及对应的解决方案
  • std::sort的核心设计思想