Docker Compose文件内容解释
一、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
,你确保了:
- 所有连接到 milvus 网络的服务可以通过服务名(如 etcd)互相访问。
- 网络名称是可预测的,便于其他服务加入这个网络。
(三)服务间通信示例
假设你还有一个连接到 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 实例通信。这是微服务架构中常用的网络组织方式。