Neo4j Docker版を動かしてみました #neo4j
この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。
Neo4j Docker版を動かしてみました。Neo4j On Dockerは、コミュニティ版とエンタープライズ版がありますが、ここではコミュニティ版のNeo4j On Dockerを利用して起動方法などを簡略に紹介します。
事前準備
LinuxサーバーにDockerをインストールしてください。ここでは、AWSを使っています。
- CentOS 7.2
- Small
- Docker 1.12.2
- Neo4j Community 3.0.6
ホストにDockerをインストールしましょう。
$ yum update -y
$ sudo tee /etc/yum.repos.d/docker.repo <<-'EOF'
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
EOF$ yum install docker-engine -y
$ systemctl enable docker.service
$ systemctl start docker
$ sudo usermod -a -G docker ec2-user
$ docker info
ec2-user、あるいは他のユーザーでdockerコマンドを使用するためには、ログインし直す必要があります。
[参考サイト]
https://docs.docker.com/engine/installation/linux/centos
Neo4j Docker版のインストール
今回、Neo4jのデータベース及びログ、環境ファイルの格納ストレージは、ホスト上のユーザディレクトリをマッピングして使っています。
$ docker run \
--detach \
--publish=7474:7474 --publish=7473:7473 --publish=7687:7687 \
--volume=$HOME/neo4j/data:/data \
--volume=$HOME/neo4j/logs:/logs \
--volume=$HOME/neo4j/conf:/conf \
--ulimit=nofile=40000:40000 \
neo4j:3.0
コンテナーを確認してみましょう。
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9dea4d26be98 neo4j:3.0 "/docker-entrypoint.s" 3 minutes ago Up 3 minutes 0.0.0.0:7473-7474->7473-7474/tcp, 0.0.0.0:7687->7687/tcp condescending_goldstine
ポートは、次の通りです。
ポート | プロトコル |
---|---|
7474 | HTTP |
7473 | HTTPS |
7687 | Boltドライバー |
ボリュームマッピングの中身を確認してみましょう。
$HOME配下に、Neo4jの構成ディレクトリが作られているはずです。
# ls $HOME
neo4j# ls $HOME/neo4j/
conf data logs
インストールの確認
では、仕上げとしてWebブラウザーから接続してみましょう。
Public IPは、DockerをインストールしているホストのPublic IPです。
http://Public IP:7474 or https://Public IP:7473
パスワードを初期化し、次に進んでいくと、Webインターフェースの初期画面が表示されるはずです。
ここまで表示できたら、インストールは成功です。
Note
この検証の間、次のような不可解なことを経験しています。HTTPとHTTPSとちらも、ブラウザーから接続すると、「このサイトにアクセスできません。「123.123.123.123 で接続が拒否されました。」と言われました。しかし、しばらく経ってから接続すると、問題なく接続できました(時間的には数十秒?)。皆様の環境で再現するかどうか分かりませんが、もし、似たような境遇にあったら、即断せず、しばらく待ってから接続を試みてください。今のところ、原因の解明はできておりません。明らかになったら追記しておきます。
パラメ―タ設定及び変更
Neo4jは、運用環境を最適化するための多数のパラメータをもっており、運用状況に応じてパラメータの値は変更する必要があります。パラメータの変更には、次の3つの方法が使えます。
- 起動時の環境変数として設定
- conf/配下にコンフィグレーションファイルをデプロイ
- 新しいイメージを作成
起動時の環境変数として設定
この方法は、起動時のオプションとして「--env=NEO4J_<パラメータ名>」のように環境変数としてパラメータを引き渡す方法です。
$ docker run \
--detach \
--publish=7474:7474 --publish=7473:7473 --publish=7687:7687 \
--volume=$HOME/neo4j/data:/data \
--volume=$HOME/neo4j/logs:/logs \
--volume=$HOME/neo4j/conf:/conf \
--ulimit=nofile=40000:40000 \
--env=NEO4J_dbms_memory_pagecache_size=4G \
neo4j:3.0
conf/neo4j.confの初期値から変更したいパラメータは、すべて環境変数として設定する必要があります。
conf/配下にコンフィグレーションファイルをデプロイ
この方法は、ホスト上のconf/の配下にNeo4jの環境ファイルをデプロイしておいて、コンテナー起動時にマウントする方法です。もちろん、conf/neo4j.conf及びconf/neo4j-wrapper.confを適切に設定しておく必要があります。
この方法の注意点は、ホスト上のNeo4jの初期環境にコンフィグレーションファイルが存在しないことです。
# ls $HOME/neo4j/conf/
Neo4jのコンフィグレーションファイルは、次のようにダンプして使います。
ただ、一般のNeo4jのコンフィグレーションファイルと同じなので、同様なNeo4j環境からコピーして利用しても構いません。
# docker run --rm \
--volume=$HOME/neo4j/conf:/conf \
neo4j:3.0 dump-config# ls $HOME/neo4j/conf
neo4j.conf neo4j-wrapper.conf
中身を確認してみましょう。
このファイルの中身は、Dockerのイメージファイルに埋め込まれているconf/neo4j.conf及びconf/neo4j-wrapper.confであり、Neo4jの初期値のままです。起動時に環境変数として引き渡したパラメータは反映されていません。
# cat $HOME/neo4j/conf/neo4j.conf
#*****************************************************************
# Neo4j configuration
#*****************************************************************
#dbms.active_database=graph.db
#dbms.directories.data=data
#dbms.directories.plugins=plugins
#dbms.directories.certificates=certificates
#dbms.directories.logs=logs
dbms.directories.import=import
#dbms.security.auth_enabled=false
#dbms.allow_format_migration=true
#dbms.memory.pagecache.size=10g#*****************************************************************
# Network connector configuration
#*****************************************************************
dbms.connector.bolt.type=BOLT
dbms.connector.bolt.enabled=true
dbms.connector.bolt.tls_level=OPTIONAL
# To have Bolt accept non-local connections, uncomment this line
# dbms.connector.bolt.address=0.0.0.0:7687dbms.connector.http.type=HTTP
dbms.connector.http.enabled=true
# To accept non-local HTTP connections, uncomment this line
#dbms.connector.http.address=0.0.0.0:7474dbms.connector.https.type=HTTP
dbms.connector.https.enabled=true
dbms.connector.https.encryption=TLS
# To accept non-local HTTPS connection, change 'localhost' to '0.0.0.0'
dbms.connector.https.address=localhost:7473# Number of Neo4j worker threads.
#dbms.threads.worker_count=#*****************************************************************
# Logging configuration
#*****************************************************************
#dbms.logs.http.enabled=true
#dbms.logs.http.rotation.keep_number=5
#dbms.logs.http.rotation.size=20m
#dbms.logs.gc.enabled=true
#dbms.logs.gc.options=-XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCApplicationStoppedTime -XX:+PrintPromotionFailure -XX:+PrintTenuringDistribution
#dbms.logs.gc.rotation.keep_number=5
#dbms.logs.gc.rotation.size=20m
#dbms.logs.debug.rotation.size=20m
#dbms.logs.debug.rotation.keep_number=7#*****************************************************************
# Miscellaneous configuration
#*****************************************************************
#cypher.default_language_version=3.0
#dbms.security.allow_csv_import_from_file_urls=true
#dbms.tx_log.rotation.retention_policy=7 days
#dbms.shell.enabled=true
#dbms.shell.host=127.0.0.1
#dbms.shell.port=1337
#dbms.read_only=false
http://localhost:7474/examples/unmanaged/helloworld/{nodeId}
#dbms.unmanaged_extension_classes=org.neo4j.examples.server.unmanaged=/examples/unmanaged
ホスト上にNeo4jのコンフィグレーションファイルが存在している状態でNeo4jのコンテナーを起動すると、コンテナー上のコンフィグレーションファイルは、ホスト上のコンフィグレーションファイルの内容にオーバライドされます。もちろん、Neo4jの環境構成も設定値のとおりに構成されます。
例えば、遠隔地からHTTP/HTTPS/BOLTの動作確認をする場合、関連の初期設定を次のように編集します。
#*****************************************************************
# Network connector configuration
#*****************************************************************
dbms.connector.bolt.type=BOLT
dbms.connector.bolt.enabled=true
dbms.connector.bolt.tls_level=OPTIONAL
# To have Bolt accept non-local connections, uncomment this line
dbms.connector.bolt.address=0.0.0.0:7687dbms.connector.http.type=HTTP
dbms.connector.http.enabled=true
# To accept non-local HTTP connections, uncomment this line
dbms.connector.http.address=0.0.0.0:7474dbms.connector.https.type=HTTP
dbms.connector.https.enabled=true
dbms.connector.https.encryption=TLS
# To accept non-local HTTPS connection, change 'localhost' to '0.0.0.0'
dbms.connector.https.address=0.0.0.0:7473
ちなみに、コンテナーの中のconf/neo4j.confは、次のようなdockerコマンドで確認できます。
$ docker exec <コンテナーID> ls conf/
$ docker exec <コンテナーID> cat conf/neo4j.conf
新しいイメージ作成
この方法は、自前でDockerfileを書いてNeo4jのDockerイメージを作る方法です。ここで紹介している内容では物足りないと感じる方は、ぜひ、試してみてください。
Dockerfile
FROM neo4j:3.0
Neo4jコンテナーの再起動
設定ファイルの変更など、Neo4jのコンテナーを再起動する際には、コンテナーを完全に削除してから起動(RUN)すれば良いです。
$ docker ps
$ docker sotp
$ docker ps -a
$ docker rm <コンテナーID>
まとめ
Neo4j Docker版を使いこなすためには、Dockerコマンドの知識も少々必要になりそうですね。ただ、いくつかの基本的なコマンドさえ理解すれば、まずまず動かしてみるのには全然問題なさそうです。もっと興味ある方は、以下のサイトを参照してください。
[参考サイト]
Neo4j with Docker [英語]
Neo4j公式ドキュメント(Neo4j3.0 Docker page) [英語]