修改默认配置
Neo4j 镜像提供的默认配置旨在用于学习 Neo4j,但必须进行修改才能使其适合生产使用。特别是,默认情况下 Neo4j 的内存分配非常有限(NEO4J_server_memory_pagecache_size=512M
和 NEO4J_server_memory_heap_max__size=512M
),以便允许在同一台服务器上运行多个容器。您可以在 Docker 特定配置设置 中了解更多关于配置 Neo4j 的信息。
有三种方法可以修改配置
-
设置环境变量。
-
挂载 /conf 卷。
-
构建一个新镜像。
选择哪一种取决于您需要对镜像进行多少自定义。
环境变量
在运行容器时向容器传递环境变量,例如
docker run \
--detach \
--publish=7474:7474 --publish=7687:7687 \
--volume=$HOME/neo4j/data:/data \
--volume=$HOME/neo4j/logs:/logs \
--env NEO4J_dbms_memory_pagecache_size=4G \
neo4j:5.25.1
可以使用以下命名方案传递任何配置值(参见 配置设置)
-
以
NEO4J_
为前缀。 -
下划线必须写两次:
_
写作__
。 -
句点转换为下划线:
.
写作_
。
例如,db.tx_log.rotation.size
可以通过向 Docker 指定以下参数来设置
--env NEO4J_db_tx__log_rotation_size
可以接受多个选项的变量,例如 NEO4J_server_jvm_additional
,必须定义一次,并且包含多个值的串联。例如
--env NEO4J_server_jvm_additional="-Dcom.sun.management.jmxremote.authenticate=true -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.password.file=$HOME/conf/jmx.password -Dcom.sun.management.jmxremote.access.file=$HOME/conf/jmx.access -Dcom.sun.management.jmxremote.port=3637"
从 Neo4j 5.6 开始,通过环境变量为 JVM 设置的 Docker 额外配置设置不再覆盖默认的 JVM 配置,而是追加到它们。 |
挂载 /conf 卷
要对 Neo4j 配置进行任意修改,请为容器提供一个 /conf 卷
docker run \
--detach \
--publish=7474:7474 --publish=7687:7687 \
--volume=$HOME/neo4j/data:/data \
--volume=$HOME/neo4j/logs:/logs \
--volume=$HOME/neo4j/conf:/conf \
neo4j:5.25.1
/conf 卷中的配置文件会覆盖镜像提供的文件。因此,如果您想更改文件中一个值,必须确保文件其余部分完整且正确。Docker 传递给容器的环境变量会覆盖 /conf 卷中配置文件中的值。
如果您使用配置卷,则必须确保监听所有网络接口。这可以通过设置 |
要转储初始配置文件集,请使用 dump-config
命令运行镜像。您必须将 neo4j
用户设置为 $HOME/neo4j/conf 的所有者,以允许 Neo4j Docker 容器从该目录进行写操作
sudo chown neo4j:neo4j $HOME/neo4j/conf
默认情况下,Neo4j Docker 容器中的进程在 |
docker run --rm \
--volume=$HOME/neo4j/conf:/conf \
neo4j:5.25.1 dump-config
自定义 Neo4j Docker 镜像
要自定义 Neo4j Docker 镜像,您可以基于 Neo4j 镜像创建自定义 Dockerfile(使用 FROM
指令),构建该镜像,并运行基于它的容器。
建议指定基本 Neo4j Docker 镜像的明确版本。有关可用的 Neo4j Docker 镜像,请参见 https://hub.docker.com/_/neo4j。 |
此外,您可以将 EXTENSION_SCRIPT
作为环境变量传递,指向您需要挂载的文件夹中的位置。您可以使用此脚本执行环境的额外初始化或配置,例如加载凭据或动态设置 neo4j.conf 设置等。Neo4j 镜像的 entrypoint
脚本将检查 EXTENSION_SCRIPT
环境变量是否存在。如果设置了,它将首先执行 entrypoint
代码,然后执行指定的扩展脚本,最后启动 Neo4j。
以下是如何基于 Neo4j 镜像创建自定义 Dockerfile、构建镜像以及运行基于它的容器的示例。它还展示了如何使用 EXTENSION_SCRIPT
功能。
# Create a custom Dockerfile based on a Neo4j image:
/example/Dockerfile
FROM neo4j:5.25.1-enterprise
COPY extension_script.sh /extension_script.sh
ENV EXTENSION_SCRIPT=/extension_script.sh
/example/extension_script.sh
echo "extension logic"
# Build the custom image:
docker build --file /example/Dockerfile --tag neo4j:5.25.1-enterprise-custom-container-1 /example
# Create and run a container based on the custom image:
docker run --interactive --tty --name custom-container-1 -p7687:7687 -p7474:7474 -p7473:7473 --env NEO4J_AUTH=neo4j/password --env NEO4J_ACCEPT_LICENSE_AGREEMENT=yes neo4j:5.25.1-enterprise-custom-container-1
可以在 Docker 文档 → Dockerfile 最佳实践 中找到构建高效 Docker 镜像的推荐最佳实践和方法。