Docker上封装scrapy-redis爬虫,架设到云服务器上运行

需求

  • 编写了一个scrapy-redis爬虫想要封装在docker中
  • 云服务器上架设redis服务,爬虫可以使用redis来调度(服务器同时作为master和slave)

具体实施

云服务器环境准备

操作场景:云服务器

安装redis

  • 安装redis服务端并启动(redis-server)

      sudo apt-get update
      sudo apt-get install redis-server
      nohup redis-server &
    
  • 检测redis是否启动成功(redis-cli)

      ps -ef |grep redis
    
  • redis conf配置修改,bind本地ip和内网段IP

      vi /etc/redis/redis.conf
    

  • bind 127.0.0.1 10.11.1.100
    
  • 重启redis服务

      sudo service redis-server restart
    
  • 使用redis-cli本地连接运行

      redis-cli
      keys *
    

本地docker镜像安装

操作场景:本地服务器

在爬虫目录下创建Dockerfile

vi Dockerfile

FROM python:2.7-onbuild
RUN pip install -r requirements.txt
ENTRYPOINT ["scrapy"]
CMD ["crawl", "spider1"]

在该目录下创建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,上传到云服务器上

docker save -o 1.tar
scp 1.tar root@云服务器ip:/docker

爬虫镜像导入并启动

操作场景:云服务器

  • 镜像导入

      docker load < 1.tar
    
  • 正常启动不带参数(默认的为运行spider1爬虫)

      docker run spiderdocker:1 
    
  • 正常启动带参数(这里表示运行spider2爬虫)

      docker run spiderdocker crawl spider2
    
  • 后台启动(默认的为运行spider1爬虫)

      docker run -d spiderdocker:1
    
  • 后台启动带参数(这里表示运行spider2爬虫)

      docker run -d spiderdocker:1 crawl spider2
    
  • 查看运行的容器

      docker ps -a
    
  • 爬虫镜像启动后,爬虫就会去redis队列消费任务了,此时需要做的就是将爬虫任务投放给redis了

知识点(坑)

  1. redis配置文件中bind,在云服务器上必须设置为云服务器的内网ip或者0.0.0.0,否则docker中的爬虫无法连接到,至于安全问题,可以通过设置redis用户名密码或者防火墙规则去规避
  2. 已经生成的docker镜像文件不要随便删除,以方便之后修改完代码重新生成镜像时可以从本地直接拉取

你可能感兴趣的:(Docker上封装scrapy-redis爬虫,架设到云服务器上运行)