在Docker中运行Sphinx基础

该文原文为Sphinx in Docker. The basics.发表于http://sphinxsearch.com。

      留心一下互联网,你会发现一些关于Docker的消息。Docker是一个帮助开发者和系统管理员构建、封装和运行分布式应用的开源平台。在这篇博客中,我会就如何在一个Docker容器内使用Sphinx,建立一个基本的实例。

什么是Docker?
     你可以从这里找到这个问题的答案。概括起来就是(直接从前面的网站上摘抄下来):
  • 使用Docker,开发者可以使用任何工具链用任何语言构建任何app。"Docker化的(Dockerized)"应用完全是可移植的,可以在任何地方运行。
  • 系统管理员使用Docker,可以为开发、QA和产品团队提供标准化的环境,减少“明明在我的机器上就能正常工作”这样的相互指责。通过将应用平台及其依赖Docker化,系统管理员可以抽象掉不同的操作系统和底层基础设施之间的差异。
  • Docker与虚拟机有那些不同点?Docker引擎容器仅仅由应用及其依赖组成。它就像一个隔离的进程一样,运行在宿主操作系统的用户空间中,与其它容器共享内核。因此,它既可以将资源相互隔离,还可以像虚拟机一样便于分发,但与虚拟机相比可移植性更强,效率更高。
      这里有一份不错的案例列表。看一看表中的案例,它们会给你一些启发。

Docker和Sphinx
      我认为还是由你自己来决定这对你的团队意味着什么,但是这篇博客在余下的部分,将为好奇的你简要的介绍在一个Docker容器中使用Sphinx会是什么样子。
      为了继续下面的内容,下载Docker,check出这个github仓库(包含一个Docker文件,一个简短但是值得深究的Sphix配置实例,以及一些.sh文件)。你可能注意到我已经总结出了下面几个步骤。

克隆和构建

      在这个例子中,因为我运行的是Ubuntu 14.04,所以 “docker”变成了“docker.io”。克隆这个github仓库后,下一步你要做的就是到合适的目录下构建容器。
       Docker文件包含一个命令列表,这些命令将添加Sphinx PPA,安装Sphinx-beta,创建一些目录,添加我们的.sh文件,最后将9306端口暴露给宿主机。在运行以上命令后,Docker将会按照Docker文件中列出的步骤运行,最终会告诉你镜像已经成功创建。
      从Docker hub上pull下这个镜像:

<span style="font-size:14px;">sudo docker.io pull stefobark/sphinxdocker</span>

运行

      现在,成功创建镜像之后,可以启动我们的Sphinx容器了。就像这样:
sudo docker.io build -t sphinx .
     发生了什么?
  • -p 9311:9306向容器内的9306端口开启了宿主机的9311端口。然后,在我们的Sphinx配置文件中,我们让Sphinx在9306端口上监听MySQL协议。因此,我们将能够在宿主机的9311端口上打开Sphinx的命令行接口。
  • 通过-v,我们向容器添加了数据卷。现在,我么能将Sphinx配置文件和各种索引数据文件保存到宿主机上。这么做相当方便,而且对于索引文件来说非常重要,因为在容易意外关闭后,这些文件都将不再存在。
  • -d为容器初始化一个守护进程
  • ./indexandsearch.s最终运行索引器,启动搜索。
它在运行吗?
      现在是时候来检查一下了:
sudo docker.io ps
CONTAINER ID        IMAGE                     COMMAND                CREATED             STATUS              PORTS                    NAMES
250a08d4adc1        sphinx:latest             ./indexandsearch.sh    8 seconds ago       Up 3 seconds        0.0.0.0:9311->9306/tcp   backstabbing_fermi   
8fd479563a87        stefobark/mysql:latest    /run.sh                2 days ago          Up 36 hours         0.0.0.0:3311->3306/tcp   elegant_albattani
      你能看到容器正在运行,状态列告诉我们它已经运行了3s。你也能看到我们有一个运行中的MySQL容器。

sphinxy.conf     

      当我们启动这个Sphinx容器时,我们共享了宿主机上包含我们的基本配置文件的那个目录。在这个文件中,”sphinxy.conf“,我已经将Sphinx指向了一个MySQL数据源。为了设置这个源,我获取了这个运行中的MySQL容器的ID,然后运行docker.io inspect (container id)。
      下面就是那个容器的检查结果:
"NetworkSettings": {
        "IPAddress": "172.17.0.2",
        "IPPrefixLen": 16,
        "Gateway": "172.17.42.1",
        "Bridge": "docker0",
        "PortMapping": null,
        "Ports": {
            "3306/tcp": [
                {
                    "HostIp": "0.0.0.0",
                    "HostPort": "3309"
                }
            ]
        }
      我用上面的结果来定义数据源(很明显,这可能会与你的不同,你可以将Sphinx指向你喜欢的任何数据源)。
source src1
{
    type              = mysql
    sql_host          = 172.17.42.1
    sql_user          = admin
    sql_pass          =
    sql_db            = testing
    sql_port          = 3309 
 
    sql_query         = select * from test
    sql_field_string  = content
    sql_attr_uint     = g_id
}
      这份配置文件实在是太简单了(我用了许多默认设置),但是如果你看看文件剩下的部分,注意它正在设定的路径,以及在9306端口上监听MySQL协议。
      检查一下我们的文档,可以了解更多有关我们所做的设定的内容。

indexandsearch.sh和searchd.sh

      indexandsearch.sh很简单:
#!/bin/bash
 
/usr/bin/indexer -c /etc/sphinxsearch/sphinxy.conf test
./searchd.sh
      它运行索引器,使用sphinxy.conf这个文件从我们刚刚通过-v选项共享的宿主机目录,被挂载到了容器。运行searchd.sh将会结束(实际上启动了搜索)。

命令行搜索

      现在,来确认一下Sphinx是否成功地索引了我们的测试数据和准备好为搜索提供服务。让我们试试下面的命令:
mysql -h127.0.0.1 -P9311
     或者
mysql -h0.0.0.0 -P9311
      或者,还可以更快一点
mysql -h0 -P9311


     这会产生下面的结果:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 2.2.3-id64-beta (r4690)
 
Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
 
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
 
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
 
mysql>
      不要被迷惑了。我们正在和Sphinx对话。你能看到服务器的版本是2.2.3-id64-beta (r4690)。现在,继续下一步,试着搜索“test”索引。
select * from test;
      到现在为止,如果一切顺利的话,你会看到你选择索引的任何数据。就是这样,Docker看起来相当方便,试试吧。

视频

      最后,这里有一个视频可以帮你复习一下上面的每个步骤,视频演示了在一个容器中运行Sphinx是什么样子。

      你已经尝试在Docker中运行Sphinx了吗?我很乐意听到你的想法。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值