需求
- 編寫了一個(gè)scrapy-redis爬蟲想要封裝在docker中
- 云服務(wù)器上架設(shè)redis服務(wù),爬蟲可以使用redis來(lái)調(diào)度(服務(wù)器同時(shí)作為master和slave)
具體實(shí)施
云服務(wù)器環(huán)境準(zhǔn)備
操作場(chǎng)景:云服務(wù)器
安裝redis
-
安裝redis服務(wù)端并啟動(dòng)(redis-server)
sudo apt-get update sudo apt-get install redis-server nohup redis-server & -
檢測(cè)redis是否啟動(dòng)成功(redis-cli)
ps -ef |grep redis -
redis conf配置修改,bind本地ip和內(nèi)網(wǎng)段IP
vi /etc/redis/redis.conf
bind 127.0.0.1 10.11.1.100-
重啟redis服務(wù)
sudo service redis-server restart -
使用redis-cli本地連接運(yùn)行
redis-cli keys *
本地docker鏡像安裝
操作場(chǎng)景:本地服務(wù)器
在爬蟲目錄下創(chuàng)建Dockerfile
vi Dockerfile
FROM python:2.7-onbuild
RUN pip install -r requirements.txt
ENTRYPOINT ["scrapy"]
CMD ["crawl", "spider1"]
在該目錄下創(chuàng)建docker鏡像
docker build -t spiderdocker:1 .
docker images查看鏡像
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
spiderdocker 1 00d299391ce 2 hours ago 781MB
鏡像保存為1.tar,上傳到云服務(wù)器上
docker save -o 1.tar
scp 1.tar root@云服務(wù)器ip:/docker
爬蟲鏡像導(dǎo)入并啟動(dòng)
操作場(chǎng)景:云服務(wù)器
-
鏡像導(dǎo)入
docker load < 1.tar -
正常啟動(dòng)不帶參數(shù)(默認(rèn)的為運(yùn)行spider1爬蟲)
docker run spiderdocker:1 -
正常啟動(dòng)帶參數(shù)(這里表示運(yùn)行spider2爬蟲)
docker run spiderdocker crawl spider2 -
后臺(tái)啟動(dòng)(默認(rèn)的為運(yùn)行spider1爬蟲)
docker run -d spiderdocker:1 -
后臺(tái)啟動(dòng)帶參數(shù)(這里表示運(yùn)行spider2爬蟲)
docker run -d spiderdocker:1 crawl spider2 -
查看運(yùn)行的容器
docker ps -a 爬蟲鏡像啟動(dòng)后,爬蟲就會(huì)去redis隊(duì)列消費(fèi)任務(wù)了,此時(shí)需要做的就是將爬蟲任務(wù)投放給redis了
知識(shí)點(diǎn)(坑)
- redis配置文件中bind,在云服務(wù)器上必須設(shè)置為云服務(wù)器的內(nèi)網(wǎng)ip或者0.0.0.0,否則docker中的爬蟲無(wú)法連接到,至于安全問(wèn)題,可以通過(guò)設(shè)置redis用戶名密碼或者防火墻規(guī)則去規(guī)避
- 已經(jīng)生成的docker鏡像文件不要隨便刪除,以方便之后修改完代碼重新生成鏡像時(shí)可以從本地直接拉取