Dockerfile,docker-compose实战之部署neo4j 因果集群

前言

最近组织分配了一个任务是将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
posted @ 2022-01-24 17:23  一个经常掉线的人  阅读(841)  评论(0编辑  收藏  举报