-
在G盘下创建home/Dockerfile文件夹,在该路径下创建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-8u261-linux-x64.tar.gz /usr/local/java/ RUN ln -s /usr/local/java/jdk1.8.0_261 /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.14.tar.gz /usr/local/ RUN mkdir -p /home/zookeeper/data RUN mkdir -p /home/zookeeper/log RUN cp /usr/local/zookeeper-3.4.14/conf/zoo_sample.cfg /usr/local/zookeeper-3.4.14/conf/zoo.cfg RUN sed -i 's/dataDir=\/tmp\/zookeeper/dataDir=\/home\/zookeeper\/data/' /usr/local/zookeeper-3.4.14/conf/zoo.cfg RUN sed -i 13a\dataLogDir=/home/zookeeper/log /usr/local/zookeeper-3.4.14/conf/zoo.cfg RUN sed -i '$aserver.1=172.18.0.11:2888:3888' /usr/local/zookeeper-3.4.14/conf/zoo.cfg RUN sed -i '$aserver.2=172.18.0.12:2888:3888' /usr/local/zookeeper-3.4.14/conf/zoo.cfg RUN sed -i '$aserver.3=172.18.0.13:2888:3888' /usr/local/zookeeper-3.4.14/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"]
docker pull zookeeper
-
复制相关文件至Dockerfile同级目录下
-
构建镜像solr:1.0
docker build -t solr:1.0 g:/home/Dockerfile.
-
创建自定义网络
docker network create --subnet=172.18.0.0/16 search_network
-
创建容器
docker run -d --name server1 --net search_network --ip 172.18.0.11 -p 22 -p 8983:8983 solr:1.0 /usr/sbin/sshd -D docker run -d --name server2 --net search_network --ip 172.18.0.12 -p 22 -p 8984:8984 solr:1.0 /usr/sbin/sshd -D docker run -d --name server3 --net search_network --ip 172.18.0.13 -p 22 -p 8985:8985 solr:1.0 /usr/sbin/sshd -D
合并命令
docker run -d --name server1 --net search_network --ip 172.18.0.11 -p 22 -p 8983:8983 solr:1.0 /usr/sbin/sshd -D;docker run -d --name server2 --net search_network --ip 172.18.0.12 -p 22 -p 8984:8984 solr:1.0 /usr/sbin/sshd -D;docker run -d --name server3 --net search_network --ip 172.18.0.13 -p 22 -p 8985:8985 solr:1.0 /usr/sbin/sshd -D
-
分别进入三个容器,修改zookeeper ID
server1 id为1,server2 id为2,server3 id为3.
#进入容器 docker exec -it [容器id] /bin/bash #进入自建zookeeper的data文件夹 cd /home/zookeeper/data #进行编辑id vi myid
-
在三台容器中分别启动zookeeper
/usr/local/zookeeper-3.4.14/bin/zkServer.sh start
-
分别启动solr
/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 /usr/local/solr-6.6.0/bin/solr start -cloud -p 8984 -s "/usr/local/solrCloud/solr_cloud_home/" -z "172.18.0.11:2181,172.18.0.12:2181,172.18.0.13:2181" -force /usr/local/solr-6.6.0/bin/solr start -cloud -p 8985 -s "/usr/local/solrCloud/solr_cloud_home/" -z "172.18.0.11:2181,172.18.0.12:2181,172.18.0.13:2181" -force
-
在容器server1上创建Collection(只需要在一台solr节点上操作)
/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://192.168.99.100:8983(虚拟机ip),点开cloud即可出现集群图
-
复制conf文件到/usr/local/solrCloud/solr_cloud_collection/cloud_core
-
上传配置文件到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://192.168.99.100:8983/solr/#/~collections/cloudsuite_web_search,点击Reload重新加载
二、遇到的问题
-
宿主机无法访问到每个容器的ip,要使宿主机连接到docker的自定义网络
-
更改路由表:
https://www.pianshen.com/article/35251276782/
route -p add 172.18.12.0 MASK 255.255.255.0 192.168.99.2 #172.18.12.0为自定义网络,192.168.99.2为虚拟机的网段.2
- 用虚拟机ip+容器端口访问
-
-
solr成功启动但无法访问cloud的拓扑模式
创建collection之后才可以
三、参考
https://blog.csdn.net/u014681799/article/details/108049968