Docker install Neo4j

Docker方式安装Neo4j

前言

用docker-compose方式创建、启动neo4j以及迁移数据库

安装docker和docker-compose

1
$ sudo apt install -y docker && docker-compose

编写docker-compose的配置文件

1
2
3
$ mkdir ~/neo4j_docker
$ cd neo4j_docker
$ touch docker-compose.yaml

yaml文件内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
version: "3"
services:
neo4j:
container_name: learn-neo4j
image: neo4j:latest
ports:
- "7474:7474"
- "7687:7687"
volumes:
- ./conf:/conf
- ./import:/import
- ./plugins:/plugins
- ./data:/data
- ./logs:/logs
environment:
- NEO4j_apoc_export_file_enabled=true
- NEO4j_apoc_import_file_enabled=true
- NEO4J_dbms_allow__upgrade=true
- NEO4j_dbms_security_procedures_unrestricted=apoc.*
- NEO4j_dbms_memory_pagecache_size=1G
- NEO4j_dbms_memory_heap_initial__size=1G
- NEO4j_dbms_memory_heap_max__size=4G
- NEO4j_apoc_uuid_enable=true
restart: always

上述配置使用了数据卷,存放持久化的数据。会在~/neo4j_docker/目录下创建:confimportpluginsdatalogs几个文件夹。表示将这几个文件夹挂载到容器中对应的目录下。

  • /import 存放 json、csv这些需要导入的文件
  • /plugins 存放.jar插件,如果需要使用APOC库
  • /data 存放 database文件

启动docker

1
2
$ cd neo4j_docker
$ sudo docker-compose -f "docker-compose.yaml" up -d

如果没有异常,就可以正常访问http://localhost:7474/browser,neo4j默认的username/password是`neo4j/neo4j`,第一次登录成功会提示修改密码。

:warning:踩坑记录:在docker-compose.yaml的environment中,可以配置登录密码,- NEO4j_AUTH=neo4j/admin,但是我配置之后,输入密码是无法登录的,删掉这一项重启容器后,用默认的用户名密码可以正常登录。

迁移数据库

这里的例子是是从非docker安装的neo4j导出数据库,再导入到docker安装的neo4j里

导出

1
2
3
4
5
$ neo4j stop
$ ps -ef | grep neo4j #确保真的关闭了
$ sudo neo4j-admin dump --database=neo4j --to=/home/xxx/neo4j.dump
# 注意1:这里的数据库名可以登录网页看到,网上大多会写成grahp.db,实际上community版本默认的数据库名就是neo4j
# 注意2:to后面路径不能用“~”,要写完整

导入

迁移数据库需要先停止docker,但是停止docker就没法进入docker使用neo4j-admin命令了,所以需要创建一个代TTY的临时容器,因为使用了数据持久化,需要使用-v参数带上volume。

1
2
3
4
5
6
7
8
9
10
11
12
13
$ sudo mv /home/xxx/neo4j.dump /home/xxx/neo4j_docker/data
$ sudo docker stop learn-neo4j
$ sudo docker run \
> -v /home/xxx/neo4j_docker/data:/data \
> --name neo4j-container-dump \
> -it \
> neo4j /bin/bash
# 这样就进入了新的容器
# 执行导入命令
root@69b54b8bffa5:/var/lib/neo4j$ neo4j-admin load --from=data/neo4j.dump --database=neo4j --force
root@69b54b8bffa5:/var/lib/neo4j$ exit
# 启动原来的容器
$ sudo docker start learn-neo4j

如果需要从docker neo4j导出,步骤一样

1
root@69b54b8bffa5:/var/lib/neo4j$ neo4j-admin dump --database=neo4j --to=data/neo4j.dump