在 Neo4j 預存資料集 與 Sandbox 介紹過如何使用 Sandbox,每一個使用者開的 Sandbox 都是完全獨立的環境,其背後的技術原理就是 Docker 實作的,今天我們就來完整分享用 Docker 來跑 Neo4j 囉。
Neo4j 有自己的官方 docker images https://hub.docker.com/_/neo4j/
先來看一段指令如下
docker run \
--name egg_neo4j \
-p7474:7474 -p7687:7687 \
-d \
-v $HOME/neo4j/data:/data \
-v $HOME/neo4j/logs:/logs \
-v $HOME/neo4j/import:/var/lib/neo4j/import \
-v $HOME/neo4j/plugins:/plugins \
--env NEO4J_AUTH=neo4j/mypassword \
neo4j:latest
上述的指令會取得 Neo4j 最新版的 image,以背景模式跑一個 docker container,名稱是 egg_neo4j。
指令細節的部分,請自行參考 Docker 指令教學 囉
一些參數的意義說明
bin/neo4j-admin set-initial-password mypassword
上述是跑 Neo4j 社群版,如果要跑 Neo4j 企業版,則要改成
--env NEO4J_ACCEPT_LICENSE_AGREEMENT=yes \
neo4j:enterprise
如果是在 Windows 跑 Docker,因為 0.0.0.0 不會被當作 localhost,需要額外加上連接器的設定
docker run \
--name egg_neo4j \
-p7474:7474 -p7687:7687 \
-d \
-v $HOME/neo4j/data:/data \
-v $HOME/neo4j/logs:/logs \
-v $HOME/neo4j/import:/var/lib/neo4j/import \
-v $HOME/neo4j/plugins:/plugins \
--env NEO4J_AUTH=neo4j/mypassword \
--env NEO4J_dbms_connector_https_advertised__address="localhost:7473" \
--env NEO4J_dbms_connector_http_advertised__address="localhost:7474" \
--env NEO4J_dbms_connector_bolt_advertised__address="localhost:7687" \
neo4j:latest
之前分享過使用 neo4j-admin 匯入 CSV,同樣在 Docker 也沒問題的
docker run -it \
--name egg_neo4j \
-p7474:7474 -p7687:7687 \
-d \
-v $HOME/neo4j/data:/data \
-v $HOME/neo4j/logs:/logs \
-v $HOME/neo4j/import:/var/lib/neo4j/import \
-v $HOME/neo4j/plugins:/plugins \
--env NEO4J_AUTH=neo4j/mypassword \
neo4j:latest \
neo4j-admin import --nodes=Movies=/import/movies_header.csv,/import/movies.csv \
--nodes=Actors=/import/actors_header.csv,/import/actors.csv \
--relationships=ACTED_IN=/import/roles_header.csv,/import/roles.csv
或是 Docker 跑起來之後用 exec 執行匯入
docker exec -it egg_neo4j \
neo4j-admin import --nodes=Movies=/import/movies_header.csv,/import/movies.csv \
--nodes=Actors=/import/actors_header.csv,/import/actors.csv \
--relationships=ACTED_IN=/import/roles_header.csv,/import/roles.csv
Neo4j Docker Container 服務啟動後,一樣是透過 http://localhost:7474 驗證是否有執行成功,跟之前學習的操作,與 Cypher 查詢是完全一樣的,當然前面如果 port mapping 不是 7474,就要改成你自己設定的 port。
另一個方法是透過 cypher-shell
首先要先在 docker 執行 bash 並取得終端輸入
docker exec -it egg_neo4j bash
接著以 cypher-shell 登入 Neo4j 資料庫
cypher-shell -u neo4j -p mypassword
或是直接合併兩個指令
docker exec -it egg_neo4j cypher-shell -u neo4j -p mypassword
上一篇有提到 Neo4j 記憶體的設定,而 Neo4j Docker 預設給的 pagecache 和 heap 非常小,如果是要跑線上的服務也要記得更改設定,更改的方式一樣在前面 Docker run 之後加上參數
--env NEO4J_dbms_memory_pagecache_size=5G \
--env NEO4J_dbms_memory_heap_max__size=2G
其他的環境變數當然也可以,只需要
將 . 取代成 _
將 _ 取代成 __
Docker 的部分就分享到這裡,謝謝大家的點閱~