在Docker中執行Sphinx基礎

2021-06-23 05:51:58 字數 3505 閱讀 7831

該文原文為

sphinx in docker. the basics.

發表於

留心一下網際網路,你會發現一些關於docker的訊息。docker是乙個幫助開發者和系統管理員構建、封裝和執行分布式應用的開源平台。在這篇部落格中,我會就如何在乙個docker容器內使用sphinx,建立乙個基本的例項。

什麼是docker?

你可以從這裡找到這個問題的答案。概括起來就是(直接從前面的**上摘抄下來):

系統管理員使用docker,可以為開發、qa和產品團隊提供標準化的環境,減少「明明在我的機器上就能正常工作」這樣的相互指責。通過將應用平台及其依賴docker化,系統管理員可以抽象掉不同的作業系統和底層基礎設施之間的差異。

docker與虛擬機器有那些不同點?docker引擎容器僅僅由應用及其依賴組成。它就像乙個隔離的程序一樣,執行在宿主作業系統的使用者空間中,與其它容器共享核心。因此,它既可以將資源相互隔離,還可以像虛擬機器一樣便於分發,但與虛擬機器相比可移植性更強,效率更高。

這裡有乙份不錯的案例列表。看一看表中的案例,它們會給你一些啟發。

docker和sphinx

我認為還是由你自己來決定這對你的團隊意味著什麼,但是這篇部落格在餘下的部分,將為好奇的你簡要的介紹在乙個docker容器中使用sphinx會是什麼樣子。

在這個例子中,因為我執行的是ubuntu 14.04,所以 「docker」變成了「docker.io」。轉殖這個github倉庫後,下一步你要做的就是到合適的目錄下構建容器。

docker檔案包含乙個命令列表,這些命令將新增sphinx ppa,安裝sphinx-beta,建立一些目錄,新增我們的.sh檔案,最後將9306埠暴露給宿主機。在執行以上命令後,docker將會按照docker檔案中列出的步驟執行,最終會告訴你映象已經成功建立。

從docker hub上pull下這個映象:

sudo docker.io pull stefobark/sphinxdocker

執行

現在,成功建立映象之後,可以啟動我們的sphinx容器了。就像這樣:

sudo docker.io build -t sphinx .

發生了什麼?

它在執行嗎?

現在是時候來檢查一下了:

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": 

]}

我用上面的結果來定義資料源(很明顯,這可能會與你的不同,你可以將sphinx指向你喜歡的任何資料來源)。

source src1

這份配置檔案實在是太簡單了(我用了許多預設設定),但是如果你看看檔案剩下的部分,注意它正在設定的路徑,以及在9306埠上監聽mysql協議。

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)

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看起來相當方便,試試吧。

你已經嘗試在docker中執行sphinx了嗎?我很樂意聽到你的想法。

在Docker中執行crontab

在把自己的專案通過docker進行打包時,由於專案中用到了crontab,不過使用到的基礎映象python 3.6 slim並沒有安裝這項服務,記錄下在映象中安裝和配置crontab的過程。由於基礎映象中沒有crontab服務,需要在打包自己映象的dockerfile中加入安裝cron服務的步驟。f...

在OS X上執行Docker

brew update brew install docker brew install boot2docker docker剛開始推出的時候,只支援ubuntu。因為docker依賴於linux container,預設是不支援os x系統的。因此如果我們想在os x上使用docker,就必須借助...

Docker容器中執行docker 命令

一 在一台執行了docker的伺服器上,啟動374c3bec1f4b 映象的容器,這個映象中安裝docker yum install docker y docker run itd v var run docker.sock var run docker.sock name docker test ...