0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DockerコンテナでNeo4j環境構築。APOCとGraphDataScienceプラグイン対応

Posted at

要旨

開発環境(Windows11でのWSL2(ubuntu))にNeo4jを構築する手順を備忘録として残す

前提

  • VScodeでWSL2(ubuntu)にアクセスでき、dockerがすでに実行できる環境であること

手順

1. Neo4jのDockerコンテナを起動する

1.1 Docker起動方法

Neo4jをDockerコンテナで運用する際、docker runコマンドでも起動可能だが、以下の理由からdocker composeを利用する。

  • 起動時のオプション(環境変数、ポート、ボリュームなど)を明示的に記録できる
  • 複数のサービスを一括管理する準備が容易になる

1.2 ディレクトリ構成

  • 以下のようにhomeディレクトリ配下に構成させるとする
suzuki/ <==HOMEディレクトリ
├── docker-compose.yaml <== ここに用意する
├── neo4j/
    ├── conf
    ├── data
    ├── logs
    └── plugins
        ├── apoc-2025.08.0-core.jar <==ここに入れる
        ├── neo4j-graph-data-science-2.21.0.jar <==ここに入れる
        └── neo4j-graph-data-science-2.21.0.zip

Dockerはコンテナ内の /data/conf/pluginsをホスト(ローカルPC)の./neo4jディレクトリ内の対応するサブディレクトリにマウントするようにすれば
Neo4jに関するすべてのファイルが./neo4jディレクトリに整理されて保存されるので管理がしやすくなる。

1.3 ディレクトリの作成

まず、docker-compose.yamlファイルを置く場所と同じ階層に、neo4jディレクトリを作成し、その中にサブディレクトリを作成する。

mkdir -p neo4j/{data,logs,conf,plugins}

このコマンドは、neo4jディレクトリと、その下にあるdata,logs,conf,pluginsの4つのサブディレクトリを一度に作成します

1.4 docker-composer.yamlの作成

# ファイルを作成する
touch docker-compose.yaml
docker-compose.yaml
services:
  neo4j:
    image: neo4j:latest
    ports:
      - "7474:7474"
      - "7687:7687"
    environment:
      NEO4J_AUTH: "neo4j/your password" <==パスワードは適宜変えてください
      NEO4J_apoc_export_file_enabled: "true"
      NEO4J_apoc_import_file_enabled: "true"
      NEO4J_apoc_import_file_use__neo4j__config: "true"
      NEO4J_dbms_security_procedures_unrestricted: "apoc.*,gds.*"
    ulimits:
      nofile:
        soft: 40000
        hard: 40000
    volumes:
      - ./neo4j/data:/data
      - ./neo4j/logs:/logs
      - ./neo4j/conf:/conf
      - ./neo4j/plugins:/plugins

  • NEO4J_AUTH: "neo4j/your password"
    • パスワード部分は適宜変えてください
  • NEO4J_dbms_security_procedures_unrestricted: "apoc.*,gds.*"で、apocと、GDSの手続きがコンテナ内で利用可能になる
  • volumes:の部分は、さきほど作成したフォルダに合わせて記述する
  • soft:40000と、hard:40000は、Neo4jコンテナのファイルディスクリプタの最大数を設定
    • ファイルディスクリプタとは、OSがファイルやネットワークソケットなどのリソースを識別するために使用する番号。Neo4jのようなグラフデータベースでは、多くのファイル(データファイル、インデックスファイルなど)を同時に開く必要があるため、この制限が必要になる。
      - soft limit(ソフトリミット): プロセスが一時的に設定できる最大値。この値はプロセス自身が変更可能。ただしhard limitを超えることはできない.
    • hard limit (ハードリミット): ユーザが設定できる最大値で、ソフトリミットの上限を定義します。ハードリミットは、一般ユーザが引き上げることはできない。
    • この設定では、ソフトリミットとハードリミットの両方を 40000に設定している。
    • これはNeo4jが大量のファイルを扱えるように、ファイルのディスクリプタをデフォルトの制限に意図的に引き上げていることを意味する。これにより大規模なグラフデータセットを扱う際に発生する可能性のある「Too many open file」(開いているファイルが多すぎます)といったエラーを防ぐことができる

1.5 GDS(Graph Data Science)ライブラリをマウントする

1.5.1.公式のウェブサイトから GDSライブラリをマウントするをダウンロードする

  • Graph Data Science Self-Managedの章で、
    • Communityに切り替え、Neo4j Graph Data Science Library 2.21.0をダウンロード
    • image.png

1.5.2 解凍

ダウンロードした、neo4j-graph-data-science-2.21.0.zipファイルを解凍(unzip)すると、jarファイルを得る

1.5.3 jarファイルの格納

neo4j-graph-data-science-2.21.0.jarを、pluginsの中にコピーして入れる

1.6 APOCファイルをダウンロードしてマウントする

  • ダウンロードしていれないと、Neo4jの起動後にCALL apoc.help('apoc')をブラウザから投入すると、Error Neo.ClientError.Procedure.Procedure.ProrocolNotFoundエラーになる

1.6.1 コンテナ名の確認

docker ps
  • NAMESで表示される名前が、次のdocker execコマンドで指定すべき正しい名前。
    例えば、docker-composeで起動した場合、名前は通常 docekr-compose.yamlを書いたディレクトリ名と、サービス名({neo4j})から生成される。例:mydirectory_neo4j_1

1.6.2 正しいVersion確認コマンドの実行

bash docker exec -it <コンテナ名> neo4j --version

# 例えばホームのsuzukiディレクトリで作業した場合
docker exec -it suzuki-neo4j-1 neo4j --version
2025.08.0

2025.08.0というバージョンであることがわかる

1.6.3 GitHubからダウンロードする

GitHub neo4j apoc releasesからダウンロードする

# versionが2025.08.0の場合
wget https://github.com/neo4j/apoc/releases/download/2025.08.0/apoc-2025.08.0-core.jar

1.6.4 pluginsディレクトリに配置

ダウンロードしたファイルをホストマシンのpluginsディレクトリに配置する

mv apoc-<version>-core.jar ./plugins/

1.7 コンテナを起動する

docker compose up -d
# 起動
docker compose up -d
[+] Running 2/2
 ✓Network suzuki_default     Created
 ✓Container suzuki-neo4j-1   Started
  • -dはバックグランドで実行のオプション
  • もし起動しても、apocが動かないなど、おかしい場合は一度落として、フォアグラウンドで起動すると起動ログでエラーが確認できるので、それをみてエラーの原因を確認する
# 一度落とす
docker compose down
# フォアグラウンドで起動させる
docker compose up
[+] Running 2/2
 ✓Network suzuki_default     Created
 ✓Container suzuki-neo4j-1   Started
# この後に起動ログが表示される

1.8 確認

1.8.1 Neo4jにブラウザからアクセスする

  • http://localhost:7474/browser/にアクセスする
    • もしフォアグラウンドでdocker compose upを実行した場合は、VS Codeにより自動でブラウザが起動する

1.8.2 APOCの利用可能の確認

Neo4jブラウザで以下を実行し、APOCが利用可能になっていることを確認

CALL apoc.help('apoc')

image.png

1.8.3 テストデータの登録

起動したNeo4jにテストデータを登録する。

ブラウザ管理画面で以下のCypherクエリを実行し、ノードとリレーションシップを作成する。

CREATE (p:Person {name: "Alice", age: 30})-[:KNOWS]->(p2:Person {name: "Bob", age: 25})

image.png

1.8.4 登録したデータを確認する。

MATCH (n) RETURN n

image.png

1.8.5 データ永続化の確認

コンテナを再起動してデータが永続化されているか確認する。

コンテナを停止する。

docker compose down

コンテナを再起動する。

docker compose up -d

再びCypherクエリを実行し、データが存在することを確認する。

MATCH (n) RETURN n

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?