iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 22
1
AI & Data

看圖說故事,讓 Neo4j 重新詮釋你的資料庫系列 第 22

以 Docker 執行 Neo4j 資料庫

Neo4j 預存資料集 與 Sandbox 介紹過如何使用 Sandbox,每一個使用者開的 Sandbox 都是完全獨立的環境,其背後的技術原理就是 Docker 實作的,今天我們就來完整分享用 Docker 來跑 Neo4j 囉。

Neo4j 有自己的官方 docker images https://hub.docker.com/_/neo4j/

在 Linux / Mac 跑 Neo4j Docker

先來看一段指令如下

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 指令教學

一些參數的意義說明

  • volumn mapping: data
    把本機端的路徑對應到 Neo4j data,方便在本機直接存取 Neo4j 的資料庫檔案
  • volumn mapping: logs
    方便在本機直接存取 Neo4j logs
  • volumn mapping: import
    Import 的時候直接把檔案放到本機路徑,不用特地複製到 Docker 裡去
  • volumn mapping: plugins
    直接把 jar 檔丟到本機 plugins 路徑
  • env NEO4JLABS_PLUGINS='["apoc","graph-data-science"]'
    可以直接安裝 Labs plugin,但請勿安裝在線上服務環境
  • env NEO4J_AUTH=neo4j/mypassword
    Neo4j Server 預設的密碼是 neo4j/neo4j,第一次登入會提示更改密碼,或是用上述的環境變數,直接在啟動服務時設定新密碼。如果本機端的 data 已經有舊的資料庫,則此環境變數無效,會以該資料庫的帳密為準。
    或是可以透過以下指令設定初始密碼
bin/neo4j-admin set-initial-password mypassword

上述是跑 Neo4j 社群版,如果要跑 Neo4j 企業版,則要改成

--env NEO4J_ACCEPT_LICENSE_AGREEMENT=yes \
neo4j:enterprise

在 Windows 跑 Neo4j Docker

如果是在 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

啟動 Docker 同時匯入 CSV

之前分享過使用 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 執行 Cypher 查詢

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 Docker bash

Neo4j Docker 記憶體的設定

上一篇有提到 Neo4j 記憶體的設定,而 Neo4j Docker 預設給的 pagecache 和 heap 非常小,如果是要跑線上的服務也要記得更改設定,更改的方式一樣在前面 Docker run 之後加上參數

--env NEO4J_dbms_memory_pagecache_size=5G \
--env NEO4J_dbms_memory_heap_max__size=2G

其他的環境變數當然也可以,只需要
將 . 取代成 _
將 _ 取代成 __

Docker 的部分就分享到這裡,謝謝大家的點閱~


上一篇
Neo4j Server 記憶體與連線設定
下一篇
Neo4j 高可用性與因果叢集
系列文
看圖說故事,讓 Neo4j 重新詮釋你的資料庫30

尚未有邦友留言

立即登入留言