docker打包scrapyd镜像实现批量部署

应用背景

在实现分布式爬虫时,由于主机数量一般较多,使用手动安装scrapyd服务以及python环境较为繁琐又容易出现版本不一致等问题,docker对接scrapyd很好的解决了这一难题。

实现过程

docker的安装:
1.主机端:
本机使用的win10系统,在官网上下载太慢,选择https://dn-dao-github-mirror.qbox.me/docker/install/windows/InstallDocker.msi这里进行docker的下载。
下载完后记得打开Hyper_V微软自带虚拟机,因为docker容器在win10系统中是运行在Linux的虚拟机里的。
docker打包scrapyd镜像实现批量部署_第1张图片
安装完后cmd运行docker,出现下图所示表示安装成功:
docker打包scrapyd镜像实现批量部署_第2张图片
这里把国际库修改为国内库,否则上传下载镜像太慢:
docker打包scrapyd镜像实现批量部署_第3张图片
在这里添加国内库:

https://registry.docker-cn.com

docker打包scrapyd镜像实现批量部署_第4张图片
配置完成后进行打包
新建目录dockerfile,目录中新建scrapy.conf:

[scrapyd]
eggs_dir    = eggs
logs_dir    = logs
items_dir   =
jobs_to_keep = 5
dbs_dir     = dbs
max_proc    = 0
max_proc_per_cpu = 10
finished_to_keep = 100
poll_interval = 5.0
#bind_address = 127.0.0.1
bind_address = 0.0.0.0
http_port   = 6800
debug       = off
runner      = scrapyd.runner
application = scrapyd.app.application
launcher    = scrapyd.launcher.Launcher
webroot     = scrapyd.website.Root
 
[services]
schedule.json     = scrapyd.webservice.Schedule
cancel.json       = scrapyd.webservice.Cancel
addversion.json   = scrapyd.webservice.AddVersion
listprojects.json = scrapyd.webservice.ListProjects
listversions.json = scrapyd.webservice.ListVersions
listspiders.json  = scrapyd.webservice.ListSpiders
delproject.json   = scrapyd.webservice.DeleteProject
delversion.json   = scrapyd.webservice.DeleteVersion
listjobs.json     = scrapyd.webservice.ListJobs
daemonstatus.json = scrapyd.webservice.DaemonStatus

这里修改自scrapyd官方conf文件,bind_address改为0000即可实现外部访问。
新建requirement.txt,将爬虫常用库写入:
requirement.txt

requests
selenium
beautifulsoup4
pyquery
pymysql
redis
flasky
django
scrapy
scrapyd
scrapyd-client
scrapy-redis
scrapy-splash

新建文件dockerfile,此处无后缀名,docker会默认运行此文件

from python:3.7
add . /code
workdir /code
copy ./scrapyd.conf /etc/scrapyd/
expose 6800
run pip3 install -r requirements.txt
cmd scrapyd

第一行要写自己的python版本,也就是说在构建时就已经有了Python 3.7的环境。

cmd进入dockerfile路径,运行:
docker build -t scrapy:1 .
创建镜像,这里scrapy:1可以更改名称,后面的“.”不要忘记。
创建成功后本地进行测试:

docker -d -p 6800:6800 scrapyd

此时浏览器访问localhost:6800显示下图
docker打包scrapyd镜像实现批量部署_第5张图片

到此打包完成。
上传dockerhub
打包完成后可以把镜像上传到在线库,这样后续主机就可以使用了。
1.cmd运行:
docker login
依次输入账号密码即可登录成功。
2.必须给打包好的镜像打一个标签才能上传:
docker tag scrapyd:1 scrapyd username/scrapyd:1

3.然后使用push命令:

docker push username/scrapyd:1

便可上传。
4.上传完毕后,其他主机使用命令:

docker run -d -p 6800:6800 username/scrapyd

即可运行镜像并启动scrapyd。
上传阿里云仓库
优点:速度很快
示例:
使用"docker tag"命令重命名镜像,并将它通过专有网络地址推送至Registry。

$ sudo docker images
REPOSITORY                                                         TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
registry.aliyuncs.com/acs/agent                                    0.7-dfb6816         37bb9c63c8b2        7 days ago          37.89 MB
$ sudo docker tag 37bb9c63c8b2 registry-vpc.cn-hangzhou.aliyuncs.com/acs/agent:0.7-dfb6816
使用"docker images"命令找到镜像,将该镜像名称中的域名部分变更为Registry专有网络地址。

$ sudo docker push registry-vpc.cn-hangzhou.aliyuncs.com/acs/agent:0.7-dfb6816

2.目标主机端
待部署的主机为centos7系统
使用curl -sSL https://get.daocloud.io/docker | sh进行安装。
安装完成后即可使用dockerhub的镜像部署。

3.弊端
这样部署虽然解决了环境等问题,但如果目标主机数量太多就很麻烦,每台主机都要安装docker,所以可以在一台云主机上安装完docker和scrapyd后制作镜像,在新建主机的时候选择安装镜像。

你可能感兴趣的:(scrapy学习笔记)