跳到内容

使用 Docker 安装 RustFS

RustFS 是一款高性能、100% 兼容 S3 的开源分布式对象存储系统。在单节点单磁盘 (SNSD) 部署模式下,后端采用零纠删码,不额外引入数据冗余,适用于本地测试和小型场景。本文基于 RustFS 官方 Linux 二进制包,通过自定义 Dockerfile 将 RustFS 及其运行时环境打包成容器,并配置数据卷和环境变量,实现一键式服务启动。


1. 前提条件

  1. 主机要求
  • 已安装 Docker (≥ 20.10),且能正常拉取镜像、运行容器
  • 本地路径 /mnt/rustfs/data (或自定义路径) 用于挂载对象数据
  1. 网络与防火墙
  • 确保主机 9000 端口已对外开放 (或与自定义端口一致)
  1. 配置文件准备
  • 在主机 /etc/rustfs/config.toml 中定义监听端口、管理账户、数据路径等 (详见第 4 节)
  1. RustFS 容器以非 root 用户 rustfs (id 为 10001) 运行,如果你使用 -v 将主机目录挂载到 docker 容器中,请确保主机目录的所有者已更改为 10001,否则会遇到权限拒绝错误。

2. 快速拉取 RustFS 官方镜像

使用 Ubuntu 官方基础镜像快速拉取 RustFS 官方镜像

bash
docker pull rustfs/rustfs

3. 运行 RustFS 容器

RustFS SNSD Docker 运行方式,结合以上镜像和配置,执行

bash
 docker run -d \
  --name rustfs_local \
  -p 9000:9000 \
  -p 9001:9001 \
  -v /mnt/rustfs/data:/data \
  rustfs/rustfs:latest \
  /data

参数说明

  • -p 9000:9000: 映射主机 9000 端口到容器
  • -v /mnt/rustfs/data:/data: 挂载数据卷
  • --name rustfs_local: 自定义容器名称
  • -d: 后台运行

完整的参数配置示例

bash
docker run -d \
  --name rustfs_container \
  -p 9000:9000 \
  -p 9001:9001 \
  -v /mnt/rustfs/data:/data \
  -e RUSTFS_ACCESS_KEY=rustfsadmin \
  -e RUSTFS_SECRET_KEY=rustfsadmin \
  -e RUSTFS_CONSOLE_ENABLE=true \
  -e RUSTFS_SERVER_DOMAINS=example.com \
  rustfs/rustfs:latest \
  --address :9000 \
  --console-enable \
  --server-domains example.com \
  --access-key rustfsadmin \
  --secret-key rustfsadmin \
  /data

参数说明及对应方法

  1. 环境变量方式 (推荐)

    bash
    -e RUSTFS_ADDRESS=:9000 \
    -e RUSTFS_SERVER_DOMAINS=example.com \
    -e RUSTFS_ACCESS_KEY=rustfsadmin \
    -e RUSTFS_SECRET_KEY=rustfsadmin \
    -e RUSTFS_CONSOLE_ENABLE=true \
  2. 命令行参数方式:

    --address :9000 \
    --server-domains example.com \
    --access-key rustfsadmin \
    --secret-key rustfsadmin \
    --console-enable \
  3. 必选参数:

    • <VOLUMES>: 在命令末尾指定,例如 /data

常见配置组合

  1. 基础配置:

    bash
    docker run -d \
      -p 9000:9000 \
      -p 9001:9001 \
      -v /mnt/data:/data \
      rustfs/rustfs:latest \
      /data
  2. 启用控制台:

    bash
    docker run -d \
      -p 9000:9000 \
      -p 9001:9001 \
      -v /mnt/data:/data \
      -e RUSTFS_CONSOLE_ENABLE=true \
      rustfs/rustfs:latest \
      --console-enable \
      /data
  3. 自定义认证密钥:

    bash
    docker run -d \
      -p 9000:9000 \
      -p 9001:9001 \
      -v /mnt/data:/data \
      -e RUSTFS_ACCESS_KEY=rustfsadmin \
      -e RUSTFS_SECRET_KEY=rustfsadmin \
      rustfs/rustfs:latest \
      --access-key rustfsadmin \
      --secret-key rustfsadmin \
      /data

重要注意事项

  1. 端口映射必须对应

    • 服务端口默认为 9000 (-p 9000:9000)
  2. 数据卷必须持久化

    • -v /主机路径:/容器路径
  3. 环境变量和命令行参数可混用,但命令行参数优先级更高

  4. 如果使用 TLS,需要额外挂载证书路径

    bash
    -v /path/to/certs:/certs \
    -e RUSTFS_TLS_PATH=/certs \

Docker Compose 安装

RustFS 官方提供了 Docker Compose 安装方式。docker-compose.yml 文件包含多个服务,如 grafanaprometheusotel-collectorjaeger,主要用于可观测性。如果你想一起部署这些服务,请将 RustFS 代码仓库克隆到本地,

git clone git@github.com:rustfs/rustfs.git

在根目录下运行命令,

docker compose --profile observability up -d

启动的容器如下,

CONTAINER ID   IMAGE                                             COMMAND                  CREATED         STATUS                            PORTS                                                                                                                                     NAMES
c13c23fe3d9d   rustfs/rustfs:latest                              "/entrypoint.sh rust…"   6 seconds ago   Up 5 seconds (health: starting)   0.0.0.0:9000-9001->9000-9001/tcp, :::9000-9001->9000-9001/tcp                                                                             rustfs-server
e3f4fc4a83a2   grafana/grafana:latest                            "/run.sh"                7 seconds ago   Up 5 seconds                      0.0.0.0:3000->3000/tcp, :::3000->3000/tcp                                                                                                 grafana
71ef1b8212cf   prom/prometheus:latest                            "/bin/prometheus --c…"   7 seconds ago   Up 5 seconds                      0.0.0.0:9090->9090/tcp, :::9090->9090/tcp                                                                                                 prometheus
e7db806b2d6f   jaegertracing/all-in-one:latest                   "/go/bin/all-in-one-…"   7 seconds ago   Up 5 seconds                      4317-4318/tcp, 9411/tcp, 0.0.0.0:14250->14250/tcp, :::14250->14250/tcp, 14268/tcp, 0.0.0.0:16686->16686/tcp, :::16686->16686/tcp          jaeger
1897830a2f1e   otel/opentelemetry-collector-contrib:latest       "/otelcol-contrib --…"   7 seconds ago   Up 5 seconds                      0.0.0.0:4317-4318->4317-4318/tcp, :::4317-4318->4317-4318/tcp, 0.0.0.0:8888-8889->8888-8889/tcp, :::8888-8889->8888-8889/tcp, 55679/tcp   otel-collector

如果你只想安装 RustFS,不想部署 grafana、prometheus 等,请在 docker-compose.yml 文件中注释掉以下几行,

#depends_on:
#  - otel-collector

然后,运行命令,

docker compose -f docker-compose.yml up -d rustfs

这种方式将只安装并启动 rustfs-server 服务,即 RustFS 容器,

docker ps
CONTAINER ID   IMAGE                                             COMMAND                  CREATED         STATUS                           PORTS                                                           NAMES
e07121ecdd39   rustfs/rustfs:latest                              "/entrypoint.sh rust…"   2 seconds ago   Up 1 second (health: starting)   0.0.0.0:9000-9001->9000-9001/tcp, :::9000-9001->9000-9001/tcp   rustfs-server

无论你是只启动 rustfs-server 还是与可观测性服务一起启动,你都可以使用默认的用户名和密码 (两者都为 rustfsadmin) 通过 https://:9000 访问 RustFS 实例。

4. 验证与访问

  1. 查看容器状态与日志
bash
docker logs rustfs_local

日志应显示服务启动成功并监听 9000 端口。

  1. 测试 S3 API

使用 mc 或其他 S3 客户端

bash
mc alias set rustfs https://:9000 rustfsadmin ChangeMe123!
mc mb rustfs/mybucket
mc ls rustfs

如果能成功创建和列出存储桶,则部署有效。

5. 其他建议

  1. 生产环境建议
  1. 存储建议
  • 使用本地 SSD/NVMe 存储
  • 避免使用网络文件系统 (NFS)
  • 确保存储目录独占访问

总结

本文结合 RustFS 单节点单磁盘容器化最佳实践,详细演示了如何通过 Docker 构建 RustFS 镜像并部署 SNSD 环境。该方案易于快速启动和实验,后续可采用相同思路扩展到 Kubernetes、Swarm 等平台上的多节点多磁盘生产级集群。

根据 Apache 许可证 2.0 发布。