一、宿主机安装docker
1)apt update
切换阿里源速度会更快
1.备份原文件
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
2.直接删除souces.list 然后echo重写
rm /etc/apt/sources.list
echo "deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse" > /etc/apt/sources.list
2)
#安装curl
apt install curl
#安装docker
curl -fsSL https://get.docker.com/ | sh
#查看版本
docker -v
二、创建docker镜像
1)在/home下创建文件夹Dockerfile
mkdir /home/Dockerfile
2)进入Dockerfile,创建Dockerfile文件
cd /home/Dockerfile
vi Dockerfile
Dockerfile:
FROM ubuntu
#sshd
RUN echo "deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse" > /etc/apt/sources.list
RUN apt-get update
RUN apt-get install -y openssh-server
RUN apt-get install vim -y
RUN apt-get install net-tools -y
RUN apt-get install lsof -y
RUN mkdir /var/run/sshd
RUN echo 'root:111' | chpasswd
RUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
RUN sed -i 's/#PermitRootLogin yes/PermitRootLogin yes/' /etc/ssh/sshd_config
# SSH login fix. Otherwise user is kicked off after login
RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd
#jdk1.8
# make a new directory to store the jdk files
RUN mkdir /usr/local/java
ADD jdk-8u281-linux-x64.tar.gz /usr/local/java/
RUN ln -s /usr/local/java/jdk1.8.0_281 /usr/local/java/jdk
ENV JAVA_HOME /usr/local/java/jdk
ENV JRE_HOME ${JAVA_HOME}/jre
ENV CLASSPATH .:${JAVA_HOME}/lib:${JRE_HOME}/lib
ENV PATH ${JAVA_HOME}/bin:$PATH
#解决ssh连接后环境变量无效的问题
RUN sed -i '2a export $(cat /proc/1/environ |tr '"'"'\0'"'"' '"'"'\\n'"'"' | xargs)' /etc/profile
#zookeeper
ADD zookeeper-3.4.6.tar.gz /usr/local/
RUN mkdir -p /home/zookeeper/data
RUN mkdir -p /home/zookeeper/log
RUN cp /usr/local/zookeeper-3.4.6/conf/zoo_sample.cfg /usr/local/zookeeper-3.4.6/conf/zoo.cfg
RUN sed -i 's/dataDir=\/tmp\/zookeeper/dataDir=\/home\/zookeeper\/data/' /usr/local/zookeeper-3.4.6/conf/zoo.cfg
RUN sed -i 13a\dataLogDir=/home/zookeeper/log /usr/local/zookeeper-3.4.6/conf/zoo.cfg
RUN sed -i '$aserver.1=172.18.0.11:2888:3888' /usr/local/zookeeper-3.4.6/conf/zoo.cfg
RUN sed -i '$aserver.2=172.18.0.12:2888:3888' /usr/local/zookeeper-3.4.6/conf/zoo.cfg
RUN sed -i '$aserver.3=172.18.0.13:2888:3888' /usr/local/zookeeper-3.4.6/conf/zoo.cfg
RUN cd /home/zookeeper/data;echo 1 >>myid
#solr
ADD solr-6.6.0.tgz /usr/local/
RUN mkdir -p /usr/local/solrCloud/solr_cloud_home
RUN cp -r /usr/local/solr-6.6.0/server/solr/* /usr/local/solrCloud/solr_cloud_home/
RUN mkdir -p /usr/local/solrCloud/solr_cloud_collection/cloud_core;cp -r /usr/local/solr-6.6.0/example/example-DIH/solr/solr/* /usr/local/solrCloud/solr_cloud_collection/cloud_core/
#ik分词器
COPY ik-analyzer-solr5-5.4.0.jar /usr/local/solr-6.6.0/server/solr-webapp/webapp/WEB-INF/lib/
RUN mkdir -p /usr/local/solr-6.6.0/server/solr-webapp/webapp/WEB-INF/classes
COPY ext.dic /usr/local/solr-6.6.0/server/solr-webapp/webapp/WEB-INF/classes/
COPY IKAnalyzer.cfg.xml /usr/local/solr-6.6.0/server/solr-webapp/webapp/WEB-INF/classes/
COPY stopword.dic /usr/local/solr-6.6.0/server/solr-webapp/webapp/WEB-INF/classes/
RUN sed -i '304i <fieldType name="text_ik" class="solr.TextField">\n <analyzer type="index" useSmart="false" class="org.wltea.analyzer.lucene.IKAnalyzer" />\n <analyzer type="query" useSmart="true" class="org.wltea.analyzer.lucene.IKAnalyzer" />\n</fieldType>' /usr/local/solr-6.6.0/example/example-DIH/solr/solr/conf/managed-schema
ENV NOTVISIBLE "in users profile"
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]
3)复制jdk1.8_281、zookeeper-3.4.6、solr-6.6.0以及IK分词器相关文件至Dockerfile同级目录下
下载地址
http://archive.apache.org/dist/lucene/solr/6.6.0/solr-6.6.0.tgz
http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz
https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
gorilla上述完整打包地址:http://10.196.80.159:5000/sharing/Ra6D4VbXu (非学弟学妹请忽略)
4)构建image
docker build -t solr .
三、创建容器
1) 配置宿主机的hosts文件,以便用ssh登录容器
vi /etc/hosts
172.18.0.11 server1
172.18.0.12 server2
172.18.0.13 server3
2)创建自定义网络
docker network create --subnet=172.18.0.0/16 search_network
3) 创建容器
docker run -d --name server1 --net search_network --ip 172.18.0.11 -p 22 solr /usr/sbin/sshd -D
docker run -d --name server2 --net search_network --ip 172.18.0.12 -p 22 solr /usr/sbin/sshd -D
docker run -d --name server3 --net search_network --ip 172.18.0.13 -p 22 solr /usr/sbin/sshd -D
合并命令
docker run -d --name server1 --net search_network --ip 172.18.0.11 -p 22 solr /usr/sbin/sshd -D;docker run -d --name server2 --net search_network --ip 172.18.0.12 -p 22 solr /usr/sbin/sshd -D;docker run -d --name server3 --net search_network --ip 172.18.0.13 -p 22 solr /usr/sbin/sshd -D
4)进入每个容器修改相应server的zookeeper ID,如server1就是id为1,server2就是id为2
#提示输入密码,默认都是3个1
ssh server1
#进入自建zookeeper的data文件夹
cd /home/zookeeper/data
#进行编辑id
vi myid
四、启动server1、2、3的zookeeper
ssh server1
/usr/local/zookeeper-3.4.6/bin/zkServer.sh start
五、启动server1、2、3的solr
ssh server1
/usr/local/solr-6.6.0/bin/solr start -cloud -p 8983 -s "/usr/local/solrCloud/solr_cloud_home/" -z "172.18.0.11:2181,172.18.0.12:2181,172.18.0.13:2181" -force
访问http://172.18.0.11:8983/solr,启动成功即下图
六、在容器server1上创建Collection(只需要在一台solr节点上操作)
ssh server1
/usr/local/solr-6.6.0/bin/solr create_collection -c cloudsuite_web_search -shards 3 -replicationFactor 3 -d /usr/local/solrCloud/solr_cloud_collection/cloud_core/conf -p 8983 -force
继续访问http://172.18.0.11:8983/solr,点开cloud即可出现集群图
七、上传配置文件到Zookeeper(随便哪个server上传一次即可)
cd /usr/local/solr-6.6.0/server/scripts/cloud-scripts
./zkcli.sh -zkhost 172.18.0.11:2181,172.18.0.12:2181,172.18.0.13:2181 -cmd upconfig -confdir /usr/local/solrCloud/solr_cloud_collection/cloud_core/conf -confname cloudsuite_web_search
输入命令无任何反应就成功,之后访问http://localhost:8983/solr/#/~collections/cloudsuite_web_search,点击Reload重新加载
然后点击左侧菜单的第一个下拉框选中cloudsuite_web_search,点击Files查看schema.xml是否更改成功