Docker 初体验指南
Docker Compose 可用于配置一组相关的容器作为服务,以进行实验或在测试环境中运行。
Docker 不建议在生产环境中使用 Compose。
生成自签名证书
-
在运行 Docker Compose 之前,在本地机器上创建一个目录
~/.nom/ssc
。以下 Compose 文件指定将此目录挂载到 Docker 容器中,以便生成的证书可用于 NOM 服务器和代理。 -
更改到
~/.nom/ssc
,并使用server
作为通用名称 (CN) 和 DNS 名称,以及127.0.0.1
作为 IP 地址,使用openssl
生成自签名证书(详细信息请参见 此处)。openssl req -x509 -nodes -days 365 -newkey rsa:2048 \ -subj "/CN=server" \ -addext "subjectAltName = DNS:server, IP:127.0.0.1" \ -addext "keyUsage = critical, digitalSignature, keyEncipherment" \ -addext "extendedKeyUsage = serverAuth" \ -addext "authorityKeyIdentifier = keyid:always,issuer:always" \ -keyout "server.key" \ -out "server.cer" openssl pkcs12 -export \ -inkey "server.key" \ -in "server.cer" \ -out "server.pfx" \ -password "pass:changeit"
这将创建
server.cer
、server.key
和server.pfx
。 -
在接下来的部分中,使用为证书存储应用的密码(
changeit
)替换<SSC_PASSWORD>
。
为了简化示例,生成的证书将用于 NOM 服务器和代理。 |
创建 Docker Compose 文件
以下是一个 Docker Compose 文件,可用于启动 NOM 服务器(包括其持久化)和一个由 NOM 管理的单个 Neo4j 企业版实例。在本地机器上的空目录中创建文件 docker-compose.yaml
。此目录在本文档中之后被引用为 INSTALLATION_ROOT
。
networks:
lan:
services:
storage:
hostname: storage
image: neo4j:enterprise
networks:
- lan
ports:
- "9000:9000"
- "9001:9001"
environment:
NEO4J_ACCEPT_LICENSE_AGREEMENT: "yes"
NEO4J_AUTH: neo4j/<PERSISTENCE_PASSWORD>
NEO4J_server_default__advertised__address: storage
NEO4J_server_http_listen__address: storage:9000
NEO4J_server_bolt_listen__address: storage:9001
healthcheck:
test: [ "CMD-SHELL", "echo RETURN 1 | cypher-shell -a bolt://storage:9001 -u neo4j -p <PERSISTENCE_PASSWORD> || exit 1" ]
server:
hostname: server
image: neo4j/neo4j-ops-manager-server
depends_on:
storage:
condition: service_healthy
networks:
- lan
ports:
- "8080:8080"
- "9090:9090"
environment:
SPRING_NEO4J_URI: bolt://storage:9001
SPRING_NEO4J_AUTHENTICATION_USERNAME: neo4j
SPRING_NEO4J_AUTHENTICATION_PASSWORD: <PERSISTENCE_PASSWORD>
SERVER_SSL_KEY_STORE_TYPE: PKCS12
SERVER_SSL_KEY_STORE: file:/certificates/server.pfx
SERVER_SSL_KEY_STORE_PASSWORD: <SSC_PASSWORD>
GRPC_SERVER_SECURITY_KEY_STORE_TYPE: PKCS12
GRPC_SERVER_SECURITY_KEY_STORE: file:/certificates/server.pfx
GRPC_SERVER_SECURITY_KEY_STORE_PASSWORD: <SSC_PASSWORD>
CORS_ALLOWEDHEADERS: "*"
CORS_ALLOWEDORIGINS: "http://localhost:[*],https://localhost:[*], http://server:[*]"
GRPC_SERVER_SECURITY_TRUST_CERT_COLLECTION: file:/certificates/server.cer
volumes:
- type: bind
source: ~/.nom/ssc
target: /certificates
entrypoint:
- "sh"
- "-c"
- "java -jar app.jar"
db-single:
hostname: db-single
image: neo4j:enterprise
networks:
- lan
ports:
- "10000:10000"
- "10001:10001"
environment:
CONFIG_SERVER_GRPC_ADDRESS: "server:9090"
CONFIG_SERVER_HTTP_ADDRESS: "https://server:8080"
CONFIG_TLS_TRUSTED_CERTS: "/certificates/server.cer"
CONFIG_TLS_CLIENT_CERT: "/certificates/server.cer"
CONFIG_TLS_CLIENT_KEY: "/certificates/server.key"
CONFIG_LOG_LEVEL: "debug"
CONFIG_INSTANCE_1_NAME: "single-instance"
CONFIG_INSTANCE_1_BOLT_URI: "bolt://db-single:10001"
CONFIG_INSTANCE_1_BOLT_USERNAME: "neo4j"
CONFIG_INSTANCE_1_BOLT_PASSWORD: <NEO4J_INSTANCE_PASSWORD>
CONFIG_INSTANCE_1_QUERY_LOG_PORT: "9500"
CONFIG_INSTANCE_1_LOG_CONFIG_PATH: "/var/lib/neo4j/conf/server-logs.xml"
CONFIG_INSTANCE_1_QUERY_LOG_MIN_DURATION: "1"
NEO4J_ACCEPT_LICENSE_AGREEMENT: "yes"
NEO4J_AUTH: neo4j/<NEO4J_INSTANCE_PASSWORD>
NEO4J_EDITION: "enterprise"
NEO4J_server_default__advertised__address: db-single
NEO4J_server_http_listen__address: db-single:10000
NEO4J_server_bolt_listen__address: db-single:10001
NEO4J_server_bolt_advertised__address: db-single:10001
NEO4J_server_metrics_prometheus_enabled: "true"
NEO4J_server_metrics_prometheus_endpoint: "localhost:2004"
NEO4J_server_metrics_filter: "*"
volumes:
- type: bind
source: ~/.nom/ssc
target: /certificates
- type: bind
source: agent
target: /agent
healthcheck:
test: [ "CMD-SHELL", "echo RETURN 1 | cypher-shell -a bolt://db-single:10001 -u neo4j -p <NEO4J_INSTANCE_PASSWORD> || exit 1" ]
interval: 10s
timeout: 10s
retries: 3
start_period: 5s
NOM 服务器 Docker 镜像的文档 此处。
编辑 docker-compose.yaml
如下
-
替换所有出现的
<SSC_PASSWORD>
为上面应用的证书存储密码。 -
替换所有出现的
<PERSISTENCE_PASSWORD>
为安全密码。 -
替换所有出现的
<NEO4J_INSTANCE_PASSWORD>
为安全密码。
下载 NOM 代理
从 部署中心 下载 NOM 代理二进制 TAR 文件,并在您的 INSTALLATION_ROOT
中执行以下命令
mkdir agent
tar -xvf <DOWNLOADED_AGENT_BINARIES_TAR> -C agent --strip-components=1
启动 Docker Compose 环境
在您的 INSTALLATION_ROOT
中运行以下命令
docker compose -f docker-compose.yaml up
查看输出,确保 Docker 容器 storage
、server
和 db-single
成功启动。
启动 NOM 代理
在 INSTALLATION_ROOT
中,以自动注册模式启动代理
docker compose -f docker-compose.yaml exec db-single sh -c "/agent/bin/agent console -s"
注册代理的完整文档 此处。
探索 NOM UI
-
等待服务器容器启动,然后访问 https://server:8080。
-
使用
admin
/passw0rd
登录并接受许可协议。 -
单击右上角的设置图标,它会将您重定向到全局设置。
-
确保代理在线。如果需要,重命名代理。
-
返回主页面,等待 DBMS 出现 - 这可能需要几分钟。一旦 DBMS 显示在主页上,双击名称(最初是生成的字符串)进行编辑。双击 DBMS 以查看 DBMS 的指标、状态、安全面板、日志和升级页面。