跳到内容

JanusGraph 容器

注意

尽管以下示例和 Docker Compose 配置文件 (*.yml) 都使用了 latest 镜像,但在生产环境中运行服务时,请务必指定特定的数字版本,以避免由于 latest 指向新发布版本而导致的意外行为更改,请参阅我们的Docker 标签策略

用法

启动 JanusGraph 服务器实例

默认配置使用 Oracle Berkeley DB Java Edition 存储后端和 Apache Lucene 索引后端

docker run --rm --name janusgraph-default docker.io/janusgraph/janusgraph:latest

使用 Gremlin Console 连接

启动 JanusGraph 容器并使用 Gremlin Console 远程连接到 janusgraph 服务器

$ docker run --rm --link janusgraph-default:janusgraph -e GREMLIN_REMOTE_HOSTS=janusgraph \
    -it docker.io/janusgraph/janusgraph:latest ./bin/gremlin.sh

         \,,,/
         (o o)
-----oOOo-(3)-oOOo-----
plugin activated: janusgraph.imports
plugin activated: tinkerpop.server
plugin activated: tinkerpop.utilities
plugin activated: tinkerpop.hadoop
plugin activated: tinkerpop.spark
plugin activated: tinkerpop.tinkergraph
gremlin> :remote connect tinkerpop.server conf/remote.yaml
==>Configured janusgraph/172.17.0.2:8182
gremlin> :> g.addV('person').property('name', 'chris')
==>v[4160]
gremlin> :> g.V().values('name')
==>chris

使用 Docker Compose

使用 docker-compose.yml 启动 JanusGraph 服务器实例

docker-compose -f docker-compose.yml up

使用 docker-compose.yml 在同一网络中启动运行 Gremlin Console 的 JanusGraph 容器

docker-compose -f docker-compose.yml run --rm \
    -e GREMLIN_REMOTE_HOSTS=janusgraph janusgraph ./bin/gremlin.sh

初始化

容器启动时,将使用 Gremlin Console 执行在 /docker-entrypoint-initdb.d 中找到的扩展名为 .groovy 的文件。这些脚本仅在 JanusGraph 服务器实例启动后执行。因此,它们可以连接到它并执行 Gremlin 遍历。

例如,要向图中添加一个顶点,创建一个名为 /docker-entrypoint-initdb.d/add-vertex.groovy 的文件,其内容如下

g = traversal().withRemote('conf/remote-graph.properties')
g.addV('demigod').property('name', 'hercules').iterate()

生成配置

JanusGraph-Docker 有一个单一的实用方法。此方法写入 JanusGraph 配置并随后显示配置。

docker run --rm -it docker.io/janusgraph/janusgraph:latest janusgraph show-config

默认配置位置是 /etc/opt/janusgraph/janusgraph.properties/etc/opt/janusgraph/janusgraph-server.yaml

配置

JanusGraph 镜像提供了多种配置方法,包括使用环境变量设置选项和使用绑定挂载配置。

Docker 环境变量

JanusGraph 镜像支持的环境变量总结如下。

变量 描述 默认值
JANUS_PROPS_TEMPLATE JanusGraph 属性文件模板(参见下文)。 berkeleyje-lucene
janusgraph.* 要在模板属性文件中覆盖的任何 JanusGraph 配置选项,使用外部 janusgraph 命名空间指定(例如,janusgraph.storage.hostname)。有关可用选项,请参阅JanusGraph 配置 无默认值
gremlinserver.* 要在默认配置 (YAML) 文件中覆盖的任何 Gremlin Server 配置选项,使用外部 gremlinserver 命名空间指定(例如,gremlinserver.threadPoolWorker)。您可以使用额外的点来设置或更新嵌套选项(例如,gremlinserver.graphs.graph)。有关可用选项,请参阅Gremlin Server 配置。有关使用环境变量编辑 Gremlin Server 配置的帮助,请参阅下面的Gremlin Server 环境变量语法部分。 无默认值`
JANUS_SERVER_TIMEOUT 在执行初始化脚本之前等待 Gremlin Server 的超时时间(秒)。 30
JANUS_STORAGE_TIMEOUT 在启动 Gremlin Server 之前等待存储后端的超时时间(秒)。 60
GREMLIN_REMOTE_HOSTS 外部 Gremlin Server 实例的可选主机名。使运行 Gremlin Console 的容器能够使用 conf/remote.yaml (或 remote-objects.yaml) 连接到远程服务器。 无默认值
JANUS_INITDB_DIR 定义初始化脚本的位置。 /docker-entrypoint-initdb.d

属性模板

JANUS_PROPS_TEMPLATE 环境变量用于定义基本的 JanusGraph 属性文件。除非在环境中提供了给定属性的备用值,否则使用模板属性文件中的值。常见的用法是为通用环境(例如 cassandra-es)指定一个模板,然后提供额外的单个配置以覆盖/扩展模板。可用的模板取决于 JanusGraph 版本(参见 conf/janusgraph*.properties)。

JANUS_PROPS_TEMPLATE 支持版本
berkeleyje 全部
berkeleyje-es 全部
berkeleyje-lucene(默认) 全部
cassandra-es <=0.5.3
cql-es >=0.2.1
cql >=0.5.3
inmemory >=0.5.3
示例:Berkeleyje-Lucene

使用默认的 berkeleyje-lucene 模板以及自定义存储和服务器设置启动 JanusGraph 实例

docker run --name janusgraph-default \
    -e janusgraph.storage.berkeleyje.cache-percentage=80 \
    -e gremlinserver.threadPoolWorker=2 \
    docker.io/janusgraph/janusgraph:latest

检查配置

$ docker exec janusgraph-default sh -c 'cat /etc/opt/janusgraph/janusgraph.properties | grep ^[a-z]'
gremlin.graph=org.janusgraph.core.JanusGraphFactory
storage.backend=berkeleyje
storage.directory=/var/lib/janusgraph/data
index.search.backend=lucene
storage.berkeleyje.cache-percentage=80
index.search.directory=/var/lib/janusgraph/index

$ docker exec janusgraph-default grep threadPoolWorker /etc/opt/janusgraph/janusgraph-server.yaml
threadPoolWorker: 2
示例:使用 Docker Compose 的 Cassandra-ES

通过 docker-compose-cql-es.yml 使用 cql-es 模板启动带有 Cassandra 和 Elasticsearch 的 JanusGraph 实例

docker-compose -f docker-compose-cql-es.yml up

使用 docker-compose-cql-es.yml 检查配置

$ docker-compose -f docker-compose-cql-es.yml exec \
      janusgraph sh -c 'cat /etc/opt/janusgraph/janusgraph.properties | grep ^[a-z]'
gremlin.graph=org.janusgraph.core.JanusGraphFactory
storage.backend=cql
storage.hostname=jce-cassandra
cache.db-cache = true
cache.db-cache-clean-wait = 20
cache.db-cache-time = 180000
cache.db-cache-size = 0.25
index.search.backend=elasticsearch
index.search.hostname=jce-elastic
index.search.elasticsearch.client-only=true
storage.directory=/var/lib/janusgraph/data
index.search.directory=/var/lib/janusgraph/index

Gremlin Server 环境变量语法

gremlinserver.gremlinserver%d. 为前缀的环境变量用于编辑基本的 janusgraph-server.yaml 文件。环境变量名称中前缀后的文本应遵循特定的语法。此语法通过 yq 的写入和删除命令实现,yq 文档 可用作此语法的参考。其次,环境变量的值将用于设置环境变量名称中指定的键的值。

让我们看几个例子

嵌套属性

例如,假设我们要添加一个配置属性 graphs.ConfigurationMangementGraph,其值为 conf/JanusGraph-configurationmanagement.properties

$ docker run --rm -it -e gremlinserver.graphs.ConfigurationManagementGraph=\
conf/JanusGraph-configurationmanagement.properties docker.io/janusgraph/janusgraph:latest janusgraph show-config
...
graphs:
  graph: conf/janusgraph-cql-es-server.properties
  ConfigurationManagementGraph: conf/JanusGraph-configurationmanagement.properties
scriptEngines:
...
删除组件

要删除组件,请在 'gremlinserver.' 前缀的闭合点之前追加 %d,然后选择前缀后面的组件。不要忘记末尾的 '='。例如,要删除 graphs.graph 配置属性,我们可以这样做

$ docker run --rm -it -e gremlinserver%d.graphs.graph= docker.io/janusgraph/janusgraph:latest janusgraph show-config
...
channelizer: org.apache.tinkerpop.gremlin.server.channel.WebSocketChannelizer
graphs: {}
scriptEngines:
...
追加项和备用索引语法

此示例展示了如何向列表中添加项。这可以通过在环境变量名称末尾添加 "[+]" 来完成。此示例还展示了如何使用方括号语法作为点语法的替代。如果属性路径中的某个键包含特殊字符,如下例所示,则此替代语法非常有用。

$ docker run --rm -it -e gremlinserver.scriptEngines.gremlin-groovy\
.plugins["org.apache.tinkerpop.gremlin.jsr223.ScriptFileGremlinPlugin"]\
.files[+]=/scripts/another-script.groovy docker.io/janusgraph/janusgraph:latest janusgraph show-config
...
scriptEngines:
  gremlin-groovy:
    plugins:
      org.janusgraph.graphdb.tinkerpop.plugin.JanusGraphGremlinPlugin: {}
      org.apache.tinkerpop.gremlin.server.jsr223.GremlinServerGremlinPlugin: {}
      org.apache.tinkerpop.gremlin.tinkergraph.jsr223.TinkerGraphGremlinPlugin: {}
      org.apache.tinkerpop.gremlin.jsr223.ImportGremlinPlugin:
        classImports:
        - java.lang.Math
        methodImports:
        - java.lang.Math#*
      org.apache.tinkerpop.gremlin.jsr223.ScriptFileGremlinPlugin:
        files:
        - scripts/empty-sample.groovy
        - /scripts/another-script.groovy
...

挂载配置

默认情况下,容器将 janusgraph.propertiesjanusgraph-server.yaml 文件都存储在映射到 /etc/opt/janusgraphJANUS_CONFIG_DIR 目录中。容器启动时,它会使用环境变量值更新这些文件。如果您有特定的配置并且不希望使用环境变量来配置 JanusGraph,则可以通过绑定挂载将包含您自己的这些配置文件的目录挂载到容器中,例如 -v /local/path/on/host:/etc/opt/janusgraph:ro。但是,如果您不希望环境变量覆盖该文件中的值,则需要将文件绑定为只读。

挂载配置示例

使用 docker-compose-mount.yml 启动具有挂载配置的 JanusGraph 实例

$ docker-compose -f docker-compose-mount.yml up
janusgraph-mount | chown: changing ownership of '/etc/opt/janusgraph/janusgraph.properties': Read-only file system
...

默认用户 JanusGraph

注意:从 0.5.3 的最新镜像版本开始,所有版本的默认用户都已更改。

用户以 uid 999 和 gid 999 创建,用户主目录是 /var/lib/janusgraph

以下文件夹以这些用户权限创建:* /var/lib/janusgraph * /etc/opt/janusgraph * /opt/janusgraph * /docker-entrypoint-initdb.d

镜像标签策略

以下是我们对容器镜像进行标记的策略

标签 配置 支持级别 Docker 基础镜像
latest 最新 JanusGraph 版本 不保证没有重大更改 eclipse-temurin:11-jre
x.x JanusGraph 的最新补丁级别版本 预计会有重大更改 eclipse-temurin:11-jre
x.x.x, x.x.x-revision 定义的 JanusGraph 版本 静态标签 eclipse-temurin:11-jre
x.x.x-SNAPSHOT 最新快照构建 预计会有重大更改 eclipse-temurin:11-jre
x.x.x-SNAPSHOT-revision 最新快照构建 静态标签 eclipse-temurin:11-jre