該文原文為
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 ...