Docker Compose文件内容解释

发布于:2025-07-14 ⋅ 阅读:(17) ⋅ 点赞:(0)

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

# version: '3.5'

services:
  etcd:
    container_name: milvus-etcd
    image: quay.io/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
    volumes:
      - ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/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
    healthcheck:
      test: ["CMD", "etcdctl", "endpoint", "health"]
      interval: 30s
      timeout: 20s
      retries: 3

  minio:
    container_name: milvus-minio
    image: minio/minio:RELEASE.2023-03-20T20-16-18Z
    environment:
      MINIO_ACCESS_KEY: minioadmin
      MINIO_SECRET_KEY: minioadmin
    ports:
      - "9001:9001"
      - "9000:9000"
    volumes:
      - ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/minio:/minio_data
    command: minio server /minio_data --console-address ":9001"
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
      interval: 30s
      timeout: 20s
      retries: 3

  standalone:
    container_name: milvus-standalone
    image: milvusdb/milvus:v2.5.6
    command: ["milvus", "run", "standalone"]
    security_opt:
    - seccomp:unconfined
    environment: 
      ETCD_ENDPOINTS: etcd:2379
      MINIO_ADDRESS: minio:9000
    volumes:
      - ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/milvus:/var/lib/milvus
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:9091/healthz"]
      interval: 30s
      start_period: 90s
      timeout: 20s
      retries: 3
    ports:
      - "19530:19530"
      - "9091:9091"
    depends_on:
      - "etcd"
      - "minio"
      
  attu:
    container_name: attu
    image: zilliz/attu:v2.5
    environment: 
      - MILVUS_URL=10.100.3.222:19530
    ports:
      - "9333:3000"

networks:
  default:
    name: milvus

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

二、版本部分(已注释)

# version: '3.5'

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

三、服务定义

services:
  etcd:
    container_name: milvus-etcd
    image: 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: 30s
      timeout: 20s
      retries: 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 实例通信。这是微服务架构中常用的网络组织方式。


网站公告

今日签到

点亮在社区的每一天
去签到