Running Solr in Docker

时间:2022-07-03 01:59:46

Docker现在越来越火,所有的应用程序都想Docker一下,但是并没有听说在Docker上运行Solr。在没有Docker之前要想使用Solr需要在宿主机安装JDK,安装Tomcat,下载Solr程序。随着Docker的出现,为Solr创建、维护和部署过程的工作可能大大简化。这篇文章不是Solr的教程和Docker的教程,如果你需要,请移步SolrDocker的官方文档学习。

Running Solr in Docker

我们必须清楚以下几点:
1、将Solr的配置文件放在本地文件夹。
2、将所有的Core放在本地文件夹。
3、将扩展词放在本地文件夹。

首先拉取solr官方镜像,这里选择6.6版本

docker pull solr:6.6

拉取完成后先别急着去运行一个容器,先在宿主机上创建一个文件夹,这个文件夹就是用来存放所有的core和每个core的配置,等会儿将这个文件夹挂载到容器内部。

mkdir -p /usr/local/DockerSolrShared/server/solr

修改文件的权限

chown 8983:8983 /usr/local/DockerSolrShared/server/solr

将core的所有基础配置文件拷贝到此文件夹下
Running Solr in Docker

cp -r /usr/local/solr-6.6.0/server/solr/* /usr/local/DockerSolrShared/server/solr

运行solr容器

docker run --privileged=true  -v /usr/local/DockerSolrShared/server/solr:/opt/solr/server/solr -d -p 8983:8983 -t solr:6.6

-v 参数冒号之前是宿主机目录,冒号之后是容器目录,容器运行起来就会将刚刚创建好的文件夹挂载到容器内部。
进入容器内部,尝试着去创建一个core

docker exec -it <容器名称> /bin/bash
bin/solr create -c testcore

输入exit退出容器
我们在宿主机上也能看到刚刚创建的core
Running Solr in Docker

如果想配置中文分词,可以直接拷贝文件从宿主机到容器内部,这里我也准备好了

docker cp /usr/local/solr-6.6.0/server/solr-webapp/webapp/WEB-INF/lib/IKAnalyzer2012FF_u1-6.51.jar <容器名称>:/opt/solr/server/solr-webapp/webapp/WEB-INF/lib/
docker cp /usr/local/solr-6.6.0/server/solr-webapp/webapp/WEB-INF/classes  <容器名称>:/opt/solr/server/solr-webapp/webapp/WEB-INF/

也可以配置数据导入

docker cp /usr/local/solr-6.6.0/contrib/dataimporthandler/lib <容器名称>:/opt/solr/contrib/dataimporthandler/ 注意:lib目录下必须有solr-dataimporthandler-6.6.0.jar文件
docker cp /usr/local/solr-6.6.0/contrib/db <容器名称>:/opt/solr/contrib/ 注意:db目录下应该有lib目录,lib目录下应该有mysql-connector-java-5.1.25-bin.jar文件

每个core的solrconfig.xml添加以下配置

<lib dir="${solr.install.dir:../../../..}/contrib/dataimporthandler/lib" regex=".*\.jar" />
<lib dir="${solr.install.dir:../../../..}/contrib/db/lib" regex=".*\.jar" />

也可以将现在这个容器重新构建成一个新的容器省的每次运行一个容器都要做这些繁琐的配置,如果你确定这样做的话,请忽略创建testcore的过程。

docker commit <容器名称> <起个新镜像的名字>:<版本号>