docker 部署 scrapy 爬虫(一)

本贴最后更新于 2490 天前,其中的信息可能已经时移世改

  1. 需求背景
    环境搭建是一个繁琐的过程,例如 python2.7 和 python3.6 的版本问题, python 中一些安装比较麻烦的模块如 cv2、PIL、pyltp 等。我们在本地开发好了一个爬虫项目,需要部署到多台服务器上跑起来,必须得在各台服务器上重新搭建爬虫运行环境。
    如何解决本地开发完成,马上就能上线运行呢?virtualenv 是一种方式,但不适合线上部署运维; 另一种更为便捷的方式就是使用 docker。docker 可以提供操作系统级别的虚拟环境,我们可以将项目制作成 docker 镜像,只要其他机器安装了 docker,下载镜像运行即可。docker 运行采用虚拟环境,和宿主机完全隔离,不必担心环境配置问题或版本冲突问题。

  2. 爬虫项目
    使用已经完成的一个 scrapy 爬虫项目,项目地址为:https://github.com/hexiaosong/cnblogs。克隆项目至本地,项目单独运行:

$ workon python2.7 $ cd cnblogs $ pip install -r requirements.txt $ export PYTHONPATH=$(pwd) $ python main.py
  1. 创建 Dockerfile
    确保本地已经安装了 Docker 并正常运行。在项目的根目录下新建一个 Dockerfile,文件不加任何后缀, 添加以下内容:
FROM hexiaosong/python2.7:latest RUN yum install -y python-devel gcc gcc-c++ autoconf automake libtool make ENV PATH /usr/local/bin:$PATH ADD . /code VOLUME /data WORKDIR /code RUN pip install -i https://pypi.doubanio.com/simple/ --trusted-host pypi.doubanio.com -r requirements.txt CMD ["python", "main.py"]
  • 第一行 FROM 代表使用的 Docker 基础镜像,这里我们使用 lmurawsk/python2.7 的作为基础镜像,在此基础上运行爬虫项目
  • 第二行 RUN 是安装 python 的环境依赖
  • 第三行 ENV 是环境变量设计,将/usr/local/bin:$PATH 赋值给 PATH,即添加/usr/local/bin 环境变量路径
  • 第四行是添加当前代码到容器的/code 目录
  • 第五行 VOLUME 是在容器中创建数据卷,作为数据挂载点,将爬取的数据从容器中取出至本地,后面会用到
  • 第六行是将/code 设置为工作目录
  • 第七行 CMD 是容器启动命令,运行项目
  1. 构建镜像
    在根目录下运行一下命令:
$ docker built -t cnblogs:latest .

注意后面的小点

执行过程输出如下所示:
构建

这样数据就说明镜像构建成功,查看已经构建的镜像

docker images

镜像

  1. 运行
    测试镜像在本地运行,执行一下命令:
docker run -v /Users/apple/Downloads/data:/data cnblogs

/Users/apple/Downloads 为本地存放爬虫结果的路径

这样我们就用镜像新建并运行了一个 Docker 容器,运行效果和直接跑 scrapy 项目完全一样, 如下图所示:
镜像
当运行完成时,可以看到本地目录/Users/apple/Downloads 下生成了 cnblog.json, 即为爬取结果.

6.拷贝此镜像至服务器
将镜像拷贝成.tar 文件

docker save -o cnblogs.tar cnblogs:latest

将 cnblogs.tar 拷贝至服务器,确保服务器安装并运行了 Docker。载入 cnblogs.tar。

docker load --input cnblogs.tar cnblogs:latest

在服务器上运行镜像

docker run -v /home:/data cnblogs
  • Docker

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的操作系统上。容器完全使用沙箱机制,几乎没有性能开销,可以很容易地在机器和数据中心中运行。

    495 引用 • 930 回帖
  • Scrapy
    7 引用 • 12 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • 小说

    小说是以刻画人物形象为中心,通过完整的故事情节和环境描写来反映社会生活的文学体裁。

    32 引用 • 108 回帖
  • abitmean

    有点意思就行了

    37 关注
  • frp

    frp 是一个可用于内网穿透的高性能的反向代理应用,支持 TCP、UDP、 HTTP 和 HTTPS 协议。

    20 引用 • 7 回帖 • 3 关注
  • Elasticsearch

    Elasticsearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful 接口。Elasticsearch 是用 Java 开发的,并作为 Apache 许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

    117 引用 • 99 回帖 • 204 关注
  • Follow
    4 引用 • 12 回帖 • 13 关注
  • WordPress

    WordPress 是一个使用 PHP 语言开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设自己的博客。也可以把 WordPress 当作一个内容管理系统(CMS)来使用。WordPress 是一个免费的开源项目,在 GNU 通用公共许可证(GPLv2)下授权发布。

    66 引用 • 114 回帖 • 191 关注
  • Firefox

    Mozilla Firefox 中文俗称“火狐”(正式缩写为 Fx 或 fx,非正式缩写为 FF),是一个开源的网页浏览器,使用 Gecko 排版引擎,支持多种操作系统,如 Windows、OSX 及 Linux 等。

    7 引用 • 30 回帖 • 384 关注
  • Thymeleaf

    Thymeleaf 是一款用于渲染 XML/XHTML/HTML5 内容的模板引擎。类似 Velocity、 FreeMarker 等,它也可以轻易的与 Spring 等 Web 框架进行集成作为 Web 应用的模板引擎。与其它模板引擎相比,Thymeleaf 最大的特点是能够直接在浏览器中打开并正确显示模板页面,而不需要启动整个 Web 应用。

    11 引用 • 19 回帖 • 390 关注
  • Docker

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的操作系统上。容器完全使用沙箱机制,几乎没有性能开销,可以很容易地在机器和数据中心中运行。

    495 引用 • 930 回帖
  • BookxNote

    BookxNote 是一款全新的电子书学习工具,助力您的学习与思考,让您的大脑更高效的记忆。

    笔记整理交给我,一心只读圣贤书。

    1 引用 • 1 回帖 • 2 关注
  • FreeMarker

    FreeMarker 是一款好用且功能强大的 Java 模版引擎。

    23 引用 • 20 回帖 • 465 关注
  • Oracle

    Oracle(甲骨文)公司,全称甲骨文股份有限公司(甲骨文软件系统有限公司),是全球最大的企业级软件公司,总部位于美国加利福尼亚州的红木滩。1989 年正式进入中国市场。2013 年,甲骨文已超越 IBM,成为继 Microsoft 后全球第二大软件公司。

    107 引用 • 127 回帖 • 339 关注
  • 知乎

    知乎是网络问答社区,连接各行各业的用户。用户分享着彼此的知识、经验和见解,为中文互联网源源不断地提供多种多样的信息。

    10 引用 • 66 回帖
  • CSDN

    CSDN (Chinese Software Developer Network) 创立于 1999 年,是中国的 IT 社区和服务平台,为中国的软件开发者和 IT 从业者提供知识传播、职业发展、软件开发等全生命周期服务,满足他们在职业发展中学习及共享知识和信息、建立职业发展社交圈、通过软件开发实现技术商业化等刚性需求。

    14 引用 • 155 回帖
  • ZeroNet

    ZeroNet 是一个基于比特币加密技术和 BT 网络技术的去中心化的、开放开源的网络和交流系统。

    1 引用 • 21 回帖 • 650 关注
  • 笔记

    好记性不如烂笔头。

    310 引用 • 794 回帖
  • jsoup

    jsoup 是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址、HTML 文本内容。它提供了一套非常省力的 API,可通过 DOM,CSS 以及类似于 jQuery 的操作方法来取出和操作数据。

    6 引用 • 1 回帖 • 487 关注
  • NetBeans

    NetBeans 是一个始于 1997 年的 Xelfi 计划,本身是捷克布拉格查理大学的数学及物理学院的学生计划。此计划延伸而成立了一家公司进而发展这个商用版本的 NetBeans IDE,直到 1999 年 Sun 买下此公司。Sun 于次年(2000 年)六月将 NetBeans IDE 开源,直到现在 NetBeans 的社群依然持续增长。

    78 引用 • 102 回帖 • 705 关注
  • 禅道

    禅道是一款国产的开源项目管理软件,她的核心管理思想基于敏捷方法 scrum,内置了产品管理和项目管理,同时又根据国内研发现状补充了测试管理、计划管理、发布管理、文档管理、事务管理等功能,在一个软件中就可以将软件研发中的需求、任务、bug、用例、计划、发布等要素有序的跟踪管理起来,完整地覆盖了项目管理的核心流程。

    6 引用 • 15 回帖 • 17 关注
  • 书籍

    宋真宗赵恒曾经说过:“书中自有黄金屋,书中自有颜如玉。”

    78 引用 • 396 回帖
  • Gzip

    gzip (GNU zip)是 GNU 自由软件的文件压缩程序。我们在 Linux 中经常会用到后缀为 .gz 的文件,它们就是 Gzip 格式的。现今已经成为互联网上使用非常普遍的一种数据压缩格式,或者说一种文件格式。

    9 引用 • 12 回帖 • 166 关注
  • 单点登录

    单点登录(Single Sign On)是目前比较流行的企业业务整合的解决方案之一。SSO 的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

    9 引用 • 25 回帖 • 2 关注
  • OpenCV
    15 引用 • 36 回帖 • 5 关注
  • Shell

    Shell 脚本与 Windows/Dos 下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比 Windows 下的批处理更强大,比用其他编程程序编辑的程序效率更高,因为它使用了 Linux/Unix 下的命令。

    124 引用 • 74 回帖
  • Solidity

    Solidity 是一种智能合约高级语言,运行在 [以太坊] 虚拟机(EVM)之上。它的语法接近于 JavaScript,是一种面向对象的语言。

    3 引用 • 18 回帖 • 437 关注
  • Hexo

    Hexo 是一款快速、简洁且高效的博客框架,使用 Node.js 编写。

    22 引用 • 148 回帖 • 16 关注
  • Vditor

    Vditor 是一款浏览器端的 Markdown 编辑器,支持所见即所得、即时渲染(类似 Typora)和分屏预览模式。它使用 TypeScript 实现,支持原生 JavaScript、Vue、React 和 Angular。

    368 引用 • 1846 回帖