前言
最近組織分配了一個任務是將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