☰
ArangoDB 官方 Docker 镜像部署实战:实例启动、认证配置、资源限制与数据持久化
2026/10/13 1:57:07 网站建设 项目流程
  • 文档

【免费下载链接】docs

Documentation for Docker Official Images in docker-library

项目地址:https://gitcode.com/gh_mirrors/docs/docs
点击查看免费下载

导读:本文以 docker-library 官方文档仓库中的 arangodb/content.md 为骨架,系统讲解如何基于官方 Docker 镜像部署 ArangoDB 图数据库。读完你可以独立完成以下实战任务:用一条docker run命令启动单机实例、通过环境变量完成语言初始化与三种认证方式的选择、向容器追加arangod/arangosh命令行参数、借助两个ARANGODB_OVERRIDE_*变量限制内存与 CPU 占用,以及通过卷挂载、数据容器和initdb.d初始化脚本实现数据的持久化与自动化初始化。

ArangoDB 是什么

ArangoDB 是一个可扩展的图数据库系统,其核心价值在于让开发者"更快地从互联数据中挖掘价值":原生图(Native Graph)、集成的搜索引擎和 JSON 文档支持,通过单一查询语言(AQL)统一访问。它可以在多种环境运行:本地(On-prem)、云端,以及作为托管云服务(ArangoGraph Insights Platform)使用。

官方 Docker 镜像文档对 ArangoDB 的三大关键特性做了精炼概括:

  • 原生图(Native Graph):同时存储数据与数据间的关系,即使涉及多层 join 也能获得更快的查询性能,并能挖掘出传统关系型数据库和文档数据库难以实现的深层洞察。
  • 文档存储(Document Store):图中的每个节点都是一个 JSON 文档,灵活、可扩展,可以轻松地从已有文档数据库导入。
  • ArangoSearch:原生集成的跨平台索引、全文检索与排序引擎,面向信息检索场景设计,针对速度和内存占用做了优化。

在继续部署之前,可以先通过 arangodb/README.md 了解当前镜像的版本与架构信息:目前官方发布的标签为3.12、3.12.12与latest,支持的处理器架构为amd64与arm64v8(这一信息与下文--platform linux/arm64/v8的用法直接对应)。

快速启动一个 ArangoDB 实例

基础启动命令

启动一个 ArangoDB 实例只需要一条命令:

docker run -d -p 8529:8529 -e ARANGO_RANDOM_ROOT_PASSWORD=1 --name arangodb-instance arangodb

各参数的含义如下:

  • -d:以后台进程方式创建并启动容器,命令执行后会打印该进程的标识符(容器 ID)。
  • -p 8529:8529:将容器的8529端口映射到宿主机,默认情况下 ArangoDB 监听8529端口处理请求。
  • -e ARANGO_RANDOM_ROOT_PASSWORD=1:启动时为 root 用户生成一个随机密码(密码会打印到 stdout,稍后可用docker logs查看)。
  • --name arangodb-instance:为容器指定一个便于引用的名称。

指定运行平台与架构

默认情况下,Docker 会选择与宿主机 CPU 架构匹配的镜像。如果实际运行平台与预期不符——例如你设置了DOCKER_DEFAULT_PLATFORM环境变量指向了其他架构——可以通过--platform标志显式指定容器的操作系统与架构:

  • 对于 x86-64,使用linux/amd64;
  • 对于 ARM 平台,尤其是缺少所需 AVX 指令集扩展仿真能力的 Apple Silicon,应使用linux/arm64/v8。

示例:

docker run -d -p 8529:8529 -e ARANGO_RANDOM_ROOT_PASSWORD=1 --name arangodb-instance --platform linux/arm64/v8 arangodb

这与 arangodb/README.md 中标注的官方支持架构(amd64、arm64v8)保持一致,说明该镜像针对这两类架构均提供了官方构建产物。

获取容器监听的 IP

如果需要获取 ArangoDB 容器所监听的 IP 地址,可以用docker inspect查询网络设置:

docker inspect --format '{{ .NetworkSettings.IPAddress }}' arangodb-instance

该命令会直接输出容器的 IP,便于应用层或调试工具连接。

初始化服务器语言

通过 Docker 使用 ArangoDB 时,首次运行需要在以下两种方式中任选其一,指定服务器初始化所使用的语言:

  1. 通过LANG环境变量:在docker run命令中设置LANG为某个 locale,例如-e LANG=sv表示使用瑞典语 locale。
  2. 通过arangod.conf配置文件:在宿主机上创建一个配置文件,在文件**顶部(任何[section]之前)**设置icu-language = sv,然后将其挂载并覆盖容器内的默认配置文件:
docker run -v /your-host-path/arangod.conf:/etc/arangodb3/arangod.conf ...

如果未显式指定语言,默认值如下:ArangoDB v3.11 及更早版本默认为en_US;从 v3.12 起默认为en_US_POSIX。

连接并访问实例

通过容器链接注入数据库访问信息

要从应用容器访问正在运行的 ArangoDB 实例,可以将两个容器链接起来:

docker run -e ARANGO_RANDOM_ROOT_PASSWORD=1 --name my-app --link arangodb-instance:db-link arangodb

该命令把名为arangodb-instance的实例以别名db-link链接进应用容器。链接建立后,应用容器内会自动注入一组环境变量,应用可以直接读取它们来访问数据库:

DB_LINK_PORT_8529_TCP=tcp://172.17.0.17:8529 DB_LINK_PORT_8529_TCP_ADDR=172.17.0.17 DB_LINK_PORT_8529_TCP_PORT=8529 DB_LINK_PORT_8529_TCP_PROTO=tcp DB_LINK_NAME=/naughty_ardinghelli/db-link

其中DB_LINK_PORT_8529_TCP_ADDR与DB_LINK_PORT_8529_TCP_PORT即数据库服务的主机与端口,DB_LINK_NAME则记录了链接的容器名/别名。

向外部世界暴露端口

如果希望把 ArangoDB 的端口暴露给宿主机之外的网络,运行:

docker run -e ARANGO_RANDOM_ROOT_PASSWORD=1 -p 8529:8529 -d arangodb

镜像本身已在 Dockerfile 中声明了EXPOSE 8529,这里的-p 8529:8529将容器端口映射到宿主机端口,外部即可通过宿主机 IP 的8529端口访问数据库。

选择认证方式

ArangoDB 镜像提供了多种认证方式,均通过docker run时的-e环境变量指定:

环境变量行为与适用场景
ARANGO_RANDOM_ROOT_PASSWORD=1启动时生成随机 root 密码,密码打印到 stdout,之后可用docker logs查看。适合临时或自动化部署场景,避免硬编码密码。
ARANGO_NO_AUTH=1禁用认证。仅适合本地测试。警告:在生产环境这样做会暴露全部数据,务必确保 ArangoDB 无法被互联网直接访问。
ARANGO_ROOT_PASSWORD=somepassword指定你自己的 root 密码。适合需要可控、固定凭据的场景。

需要特别注意的是:以上通过环境变量指定登录的方式仅适用于单服务器(single server)安装。对于集群(cluster)部署,需要在系统启动后,通过空密码的 root 用户来进一步配置用户账户。

命令行选项与 ArangoShell

向 arangod 追加启动参数

镜像的 entrypoint 脚本默认启动arangod二进制,并把docker run命令末尾追加的参数原样转发给它:

docker run -e ARANGO_RANDOM_ROOT_PASSWORD=1 arangodb --help

例如上面的命令会启动arangod --help,打印全部服务器启动选项。同理,你可以在容器命令尾部追加任意arangod支持的命令行参数,实现按需定制启动行为。

启动其他二进制:以 arangosh 为例

除了arangod,还可以通过覆盖命令的方式启动镜像内的其他二进制,例如 ArangoShell(交互式 Shell):

docker run -it arangodb arangosh --server.database myDB ...

这里-it提供交互式终端,arangosh后跟的--server.database myDB ...等参数会直接传给 Shell 客户端。

在同一容器内执行 arangosh

如果arangod运行在一个容器、而你想用另一个容器中的arangosh去访问它,需要额外配置容器间的网络。更简单的做法是直接在同一个容器内执行。先用docker ps查看运行中容器的 ID 与名称:

docker ps

输出大致如下:

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1234567890ab arangodb "/entrypoint.sh aran…" 2 hours ago Up 2 hours 0.0.0.0:8529->8529/tcp jolly_joker

然后通过docker exec结合容器 ID 或名称,在已有容器内执行命令:

docker exec -it jolly_joker arangosh

这样即可直接进入运行中实例的 ArangoShell 交互界面。

限制资源占用

arangod启动时会检查以下两个环境变量,用于限制它使用的内存总量与 CPU 核心数——这在容器环境与资源共享场景下尤其重要。

ARANGODB_OVERRIDE_DETECTED_TOTAL_MEMORY(v3.6.3 引入)

该变量用于覆盖系统总内存的自动检测结果。取值规则:

  • 可以指定一个十进制数字,单位默认为字节;
  • 追加G或g后缀时,数值乘以2^30;
  • 追加M或m后缀时,数值乘以2^20;
  • 追加K或k后缀时,数值乘以2^10。

例如64G表示 64 吉字节(64 × 2^30 字节)。

服务器启动时会把检测到的总内存以 INFO 级别日志打印出来;如果设置了该变量,则会打印覆盖后的值。多种默认尺寸(例如 RocksDB 的 buffer cache 大小)都是基于这个值计算得出的,因此正确设置它对性能有直接影响。

该选项在两种场景下特别有用:

  1. 容器 cgroup 存在内存限制时:目前 cgroup 的 RAM 限制不会被自动检测,因此需要手动把该限制写入此环境变量;
  2. 与同一台机器上的其他服务共享内存时:通过该变量主动限定 ArangoDB 可用的内存上限,避免挤占其他服务。

ARANGODB_OVERRIDE_DETECTED_NUMBER_OF_CORES(v3.7.1 引入)

该变量用于覆盖系统CPU 核心数的自动检测结果。服务器启动时会把检测到的核心数以 INFO 日志打印;若设置则显示覆盖值。各类线程相关的默认值都是基于该值计算的。

当arangod运行在容器中,或与同机其他服务共享 CPU、不希望占满所有核心时,应设置该变量进行限制。

数据持久化

存储引擎选择

ArangoDB 在 3.2 到 3.6 版本支持两种存储引擎,可以在创建容器时通过环境变量ARANGO_STORAGE_ENGINE选择:

取值说明
mmfiles经典存储引擎,3.7 及以后的版本已不再提供。
rocksdb基于 RocksDB 的存储引擎;从 3.4 版本起为默认选择。

镜像内置的数据卷

ArangoDB 镜像使用以下两个目录作为 Docker 卷:

  • /var/lib/arangodb3:数据库目录,用于存储集合(collection)数据;
  • /var/lib/arangodb3-apps:应用(apps)目录,用于存储任何扩展。

查看镜像声明的全部卷:

docker inspect --format "{{ .Config.Volumes }}" arangodb

挂载宿主机目录

可以把容器卷映射到宿主机目录,使数据在容器重建之间得以保留。下面的/tmp/arangodb只是示例路径,通常不是存放持久化文件的合适位置:

unix> mkdir /tmp/arangodb unix> docker run -e ARANGO_RANDOM_ROOT_PASSWORD=1 -p 8529:8529 -d \ -v /tmp/arangodb:/var/lib/arangodb3 \ arangodb

这样宿主机/tmp/arangodb目录就会作为 ArangoDB 容器内的数据库目录使用。

使用数据容器

另一种常见做法是创建一个专门持有数据的容器:

docker create --name arangodb-persist arangodb true

然后让 ArangoDB 容器通过--volumes-from继承该数据容器的卷:

docker run -e ARANGO_RANDOM_ROOT_PASSWORD=1 --volumes-from arangodb-persist -p 8529:8529 arangodb

如果想节省几个字节的镜像体积,也可以改用busybox或alpine这类极简镜像来创建纯卷容器——但此时需要自行声明所需的卷,例如:

docker run -d --name arangodb-persist -v /var/lib/arangodb3 busybox true

作为基础镜像使用

如果以 ArangoDB 镜像作为基础镜像构建自己的镜像,有两点必须注意:

  1. CMD 必须使用 exec 形式包裹。否则默认的 entrypoint 将无法执行其引导(bootstrapping)工作,导致初始化逻辑被跳过。
  2. 通过/docker-entrypoint-initdb.d/目录控制初始化过程。在派生镜像时,可以把以下三类文件放入该目录,它们会在容器初始化阶段按规则被处理:
文件类型处理方式
*.sh以 bash shell 脚本方式运行。
*.js使用arangosh执行;可以通过ARANGOSH_ARGS环境变量为 arangosh 指定额外参数。
dumps/在dumps/目录下放置由arangodump生成的数据库 dump 子目录,它们可被arangorestore恢复。

这套机制让"镜像即实例模板"成为可能:将建库脚本、初始化 JS 或完整的数据备份随镜像一起打包,新容器一启动即自动完成数据初始化与恢复。

镜像信息与维护说明

从 arangodb/README.md 可以进一步了解镜像的维护信息:该镜像由 ArangoDB 官方维护;README 文件本身是由arangodb/目录下的其他文件(如 arangodb/content.md、arangodb/maintainer.md、arangodb/README-short.txt 等)经模板自动生成,文件头部明确标注了"DO NOT EDIT"。此外,arangodb/metadata.json 将该镜像归类于databases-and-storage类别,arangodb/github-repo 记录了镜像构建仓库的地址,供需要深入研究 Dockerfile 细节的读者参考。

许可证说明

使用官方 ArangoDB Docker 镜像前,请仔细阅读 arangodb/license.md 与 arangodb/README.md 中的完整许可条款,核心要点如下:

  • 官方镜像中的 ArangoDBCommunity Edition受ArangoDB Community License约束:生产环境数据集大小限制为 100 GB,仅可用于内部业务目的,不得用于任何商业用途;不包含分发、嵌入其他产品、或与 ArangoDB Enterprise Edition 结合的权利。
  • Community Edition 的源代码基于Business Source License 1.1(BUSL-1.1):复制、修改、再分发、非商业使用以及非生产环境下的商业使用始终被允许;在不创建商业衍生作品/服务、或不将其纳入商业产品的前提下,也可以在生产环境部署。某个具体版本首次公开发布满四周年后,许可证自动转换为宽松的 Apache 2.0 开源许可证。
  • 截至 ArangoDB 3.11,ArangoDB 采用Apache 2.0 License。
  • 与所有 Docker 镜像一样,镜像内还可能包含其他软件(如基础发行版中的 Bash 等),各自适用相应许可证;使用前请自行确认镜像内全部软件均符合你的合规要求。
  • 文档

【免费下载链接】docs

Documentation for Docker Official Images in docker-library

项目地址:https://gitcode.com/gh_mirrors/docs/docs
点击查看免费下载

相关推荐

上一篇:uBlock Origin 完整使用指南:3 分钟装好免费浏览器广告拦截器,装完即用
下一篇:深入解析 Gradio JSON 组件:从 `@gradio/json` 前端渲染到 `gr.JSON` 后端数据流

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询