前言
最近组织分配了一个任务是将neo4j镜像化,并写一个docker-compose.yml实现一键部署数量为3的因果集群
之前对Dockerfile,docker-compose并不是很会,做完这次任务后颇有收获记录一下
为neo4j企业版编写Dockerfile
组织提供了neo4j企业版的文件夹,需要通过Dockerfile自己制作一个镜像
我们吧文件夹打包成tar包 方便传到我们操作docker的机器上
tar -zcvf neo4j.tar.gz ./ongdb-enterprise-3.6.2
打包好后来到操作docker的机器上
随便创建一个文件夹
mkdir ./home/neo4jtest
将neo4j压缩包解压到该文件夹下,由于neo4j运行依赖jdk1.8(neo4j版本为3)
同样准备好一个jdk1.8的压缩包解压至里面
同时写一个start.sh Dockerfile 推荐使用脚本运行命令,虽然我们的脚本就两行。。
#!/bin/bash
/usr/neo4j/bin/neo4j start
制作镜像会用到centos镜像,可以先拉取下来
docker pull centos
可以开始编写Dockerfile了
vim ./Dockfile
FROM centos
#切换镜像目录,进入/usr目录
WORKDIR /usr
#在/usr/下创建jdk目录,用来存放jdk文件
RUN mkdir jdk
#在/usr/下创建neo4j目录,用来存放neo4j
RUN mkdir neo4j
#将宿主机的jdk目录下的文件拷至镜像的/usr/jdk目录下
ADD jdk1.8.0_321 /usr/jdk/
#将宿主机的neo4j目录下的文件拷至镜像的/usr/neo4j目录下
ADD neo4j-3.5.14 /usr/neo4j
#添加启动脚本
ADD start.sh /usr/start.sh
RUN chmod +x /usr/start.sh
#设置环境变量
ENV JAVA_HOME=/usr/jdk
ENV JRE_HOME=$JAVA_HOME/jre
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH=/sbin:$JAVA_HOME/bin:$PATH
#设置启动命令
CMD /usr/start.sh && /bin/bash
这里需要注意启动命令 一般会在加上&& /bin/bash 然后在docker run 时加上-itd 就可以避免容器自动关闭无法后台运行的问题
文件写好后输入命令制作镜像
docker build -t neo4j-3.5.14 .
测试运行容器
准备好文件夹用来挂载neo4j集群的文件
一级目录:
二级目录:
其中conf文件夹下拷贝neo4j默认的neo4j.conf 用来修改容器的neo4j
拷贝好后在配置文件底部添加下面内容 开启远程访问
dbms.connector.http.listen_address=0.0.0.0:7474
dbms.connector.bolt.listen_address=0.0.0.0:7687
之后我们需要单独设置集群部分信息
neo4j1文件夹的配置文件添加 作为集群的leader
dbms.mode=CORE
causal_clustering.initial_discovery_members=neo4j1:5000,neo4j2:5000
causal_clustering.minimum_core_cluster_size_at_formation=2
causal_clustering.minimum_core_cluster_size_at_runtime=2
causal_clustering.discovery_type=LIST
dbms.connectors.default_advertised_address=neo4j1
dbms.connectors.default_listen_address=0.0.0.0
neo4j2文件夹的配置文件添加 作为集群的follower
dbms.mode=CORE
causal_clustering.initial_discovery_members=neo4j1:5000,neo4j2:5000
causal_clustering.minimum_core_cluster_size_at_formation=2
causal_clustering.minimum_core_cluster_size_at_runtime=2
causal_clustering.discovery_type=LIST
dbms.connectors.default_advertised_address=neo4j2
dbms.connectors.default_listen_address=0.0.0.0
neo4j3配置为只读节点
dbms.mode=READ_REPLICA
causal_clustering.initial_discovery_members=neo4j1:5000,neo4j2:5000,neo4j3:5000
causal_clustering.minimum_core_cluster_size_at_formation=3
causal_clustering.minimum_core_cluster_size_at_runtime=3
causal_clustering.discovery_type=LIST
dbms.connectors.default_advertised_address=neo4j3
dbms.connectors.default_listen_address=0.0.0.0
这里需要注意配置文件给出的地址是neo4j1,neo4j2这样的 是因为我们后续是让容器在docker网络中运行,可以通过这种方式找到容器地址
准备好后将挂载文件夹 放到/home 目录下
运行容器
创建一个docker网络用于后续操作
docker network create -d bridge kgap-net
分别执行命令启动neo4j集群: 注意容器名字一定要neo4j1,neo4j2 和配置文件对应
docker run --network=kgap-net -itd --name neo4j1 -p 7474:7474 -p 7687:7687 -v /home/neo4j/neo4j1/data:/usr/neo4j/data -v /home/neo4j/neo4j1/logs:/usr/neo4j/logs -v /home/neo4j/neo4j1/conf:/usr/neo4j/conf -v /home/neo4j/neo4j1/import:/usr/neo4j/import neo4j-3.5.14:latest
docker run --network=kgap-net -itd --name neo4j2 -p 8474:7474 -p 8687:7687 -v /home/neo4j/neo4j2/data:/usr/neo4j/data -v /home/neo4j/neo4j2/logs:/usr/neo4j/logs -v /home/neo4j/neo4j2/conf:/usr/neo4j/conf -v /home/neo4j/neo4j2/import:/usr/neo4j/import neo4j-3.5.14:latest
docker run --network=kgap-net -itd --name neo4j3 -p 9474:7474 -p 9687:7687 -v /home/neo4j/neo4j3/data:/usr/neo4j/data -v /home/neo4j/neo4j3/logs:/usr/neo4j/logs -v /home/neo4j/neo4j3/conf:/usr/neo4j/conf -v /home/neo4j/neo4j3/import:/usr/neo4j/import neo4j-3.5.14:latest
访问主机:7474 默认用户名密码为neo4j
进入面板后查看集群状态:
CALL dbms.cluster.overview()
到此neo4j集群部署成功
编写docker-compose.yml
启动3个服务的命令就很复杂了,这样每次要启动操作都多的一B 所以出现了伟大的docker-compose
我们直接在任意目录 创建一个docker-compose.yml 这里是选择在挂载目录创建
配置文件内容:
version: '3.7'
# 给neo4j集群配置一个网络,网络名为kgap-net
networks:
kgap-net:
name: kgap-net
services:
neo4j1:
# docker container所使用的docker image
image: kgap/neo4j-3.5.14:v1
hostname: neo4j1
container_name: kgap-neo4j1
# 配置docker container和宿主机的端口映射
ports:
- 7473:7473
- 7474:7474
- 7687:7687
volumes:
- /home/compose-docker/neo4j/neo4j1/conf:/usr/neo4j/conf
- /home/compose-docker/neo4j/neo4j1/mnt:/usr/neo4j/import
- /home/compose-docker/neo4j/neo4j1/plugins:/usr/neo4j/plugins
- /home/compose-docker/neo4j/neo4j1/data:/usr/neo4j/data
- /home/compose-docker/neo4j/neo4j1/logs:/usr/neo4j/logs
# 当前docker container加入名为kgap-net的隔离网络
networks:
- kgap-net
#阻止自动关闭
tty: true
neo4j2:
# docker container所使用的docker image
image: kgap/neo4j-3.5.14:v1
hostname: neo4j2
container_name: kgap-neo4j2
# 配置docker container和宿主机的端口映射
ports:
- 8473:7473
- 8474:7474
- 8687:7687
volumes:
- /home/compose-docker/neo4j/neo4j2/conf:/usr/neo4j/conf
- /home/compose-docker/neo4j/neo4j2/mnt:/usr/neo4j/import
- /home/compose-docker/neo4j/neo4j2/plugins:/usr/neo4j/plugins
- /home/compose-docker/neo4j/neo4j2/data:/usr/neo4j/data
- /home/compose-docker/neo4j/neo4j2/logs:/usr/neo4j/logs
# 当前docker container加入名为kgap-net的隔离网络
networks:
- kgap-net
#阻止自动关闭
tty: true
neo4j3:
# docker container所使用的docker image
image: kgap/neo4j-3.5.14:v1
hostname: neo4j3
container_name: kgap-neo4j3
# 配置docker container和宿主机的端口映射
ports:
- 9473:7473
- 9474:7474
- 9687:7687
volumes:
- /home/compose-docker/neo4j/neo4j3/conf:/usr/neo4j/conf
- /home/compose-docker/neo4j/neo4j3/mnt:/usr/neo4j/import
- /home/compose-docker/neo4j/neo4j3/plugins:/usr/neo4j/plugins
- /home/compose-docker/neo4j/neo4j3/data:/usr/neo4j/data
- /home/compose-docker/neo4j/neo4j3/logs:/usr/neo4j/logs
# 当前docker container加入名为kgap-net的隔离网络
networks:
- kgap-net
#阻止自动关闭
tty: true
之后只要输入下面命令就可以一键启动
docker-compose up -d