docker 部署 scrapy 爬虫(一)

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

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

    497 引用 • 934 回帖
  • Scrapy
    7 引用 • 12 回帖

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • ZooKeeper

    ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,是 Google 的 Chubby 一个开源的实现,是 Hadoop 和 HBase 的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

    59 引用 • 29 回帖 • 9 关注
  • DNSPod

    DNSPod 建立于 2006 年 3 月份,是一款免费智能 DNS 产品。 DNSPod 可以为同时有电信、网通、教育网服务器的网站提供智能的解析,让电信用户访问电信的服务器,网通的用户访问网通的服务器,教育网的用户访问教育网的服务器,达到互联互通的效果。

    6 引用 • 26 回帖 • 539 关注
  • Openfire

    Openfire 是开源的、基于可拓展通讯和表示协议 (XMPP)、采用 Java 编程语言开发的实时协作服务器。Openfire 的效率很高,单台服务器可支持上万并发用户。

    6 引用 • 7 回帖 • 119 关注
  • Gitea

    Gitea 是一个开源社区驱动的轻量级代码托管解决方案,后端采用 Go 编写,采用 MIT 许可证。

    5 引用 • 16 回帖
  • Visio
    1 引用 • 2 回帖 • 1 关注
  • JetBrains

    JetBrains 是一家捷克的软件开发公司,该公司位于捷克的布拉格,并在俄国的圣彼得堡及美国麻州波士顿都设有办公室,该公司最为人所熟知的产品是 Java 编程语言开发撰写时所用的集成开发环境:IntelliJ IDEA

    18 引用 • 54 回帖
  • Sandbox

    如果帖子标签含有 Sandbox ,则该帖子会被视为“测试帖”,主要用于测试社区功能,排查 bug 等,该标签下内容不定期进行清理。

    437 引用 • 1238 回帖 • 587 关注
  • 持续集成

    持续集成(Continuous Integration)是一种软件开发实践,即团队开发成员经常集成他们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。

    15 引用 • 7 回帖
  • sts
    2 引用 • 2 回帖 • 243 关注
  • golang

    Go 语言是 Google 推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发 Go,是因为过去 10 多年间软件开发的难度令人沮丧。Go 是谷歌 2009 发布的第二款编程语言。

    500 引用 • 1395 回帖 • 243 关注
  • Word
    13 引用 • 41 回帖 • 1 关注
  • Python

    Python 是一种面向对象、直译式电脑编程语言,具有近二十年的发展历史,成熟且稳定。它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务。它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用缩进来定义语句块。

    554 引用 • 675 回帖
  • Rust

    Rust 是一门赋予每个人构建可靠且高效软件能力的语言。Rust 由 Mozilla 开发,最早发布于 2014 年 9 月。

    59 引用 • 22 回帖 • 14 关注
  • 反馈

    Communication channel for makers and users.

    120 引用 • 906 回帖 • 280 关注
  • PWA

    PWA(Progressive Web App)是 Google 在 2015 年提出、2016 年 6 月开始推广的项目。它结合了一系列现代 Web 技术,在网页应用中实现和原生应用相近的用户体验。

    14 引用 • 69 回帖 • 184 关注
  • Solidity

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

    3 引用 • 18 回帖 • 438 关注
  • 钉钉

    钉钉,专为中国企业打造的免费沟通协同多端平台, 阿里巴巴出品。

    15 引用 • 67 回帖 • 271 关注
  • 脑图

    脑图又叫思维导图,是表达发散性思维的有效图形思维工具 ,它简单却又很有效,是一种实用性的思维工具。

    32 引用 • 99 回帖 • 1 关注
  • PHP

    PHP(Hypertext Preprocessor)是一种开源脚本语言。语法吸收了 C 语言、 Java 和 Perl 的特点,主要适用于 Web 开发领域,据说是世界上最好的编程语言。

    167 引用 • 408 回帖 • 490 关注
  • CAP

    CAP 指的是在一个分布式系统中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可兼得。

    12 引用 • 5 回帖 • 636 关注
  • GitBook

    GitBook 使您的团队可以轻松编写和维护高质量的文档。 分享知识,提高团队的工作效率,让用户满意。

    3 引用 • 8 回帖 • 1 关注
  • MyBatis

    MyBatis 本是 Apache 软件基金会 的一个开源项目 iBatis,2010 年这个项目由 Apache 软件基金会迁移到了 google code,并且改名为 MyBatis ,2013 年 11 月再次迁移到了 GitHub。

    173 引用 • 414 回帖 • 363 关注
  • 小薇

    小薇是一个用 Java 写的 QQ 聊天机器人 Web 服务,可以用于社群互动。

    由于 Smart QQ 从 2019 年 1 月 1 日起停止服务,所以该项目也已经停止维护了!

    35 引用 • 468 回帖 • 761 关注
  • 服务器

    服务器,也称伺服器,是提供计算服务的设备。由于服务器需要响应服务请求,并进行处理,因此一般来说服务器应具备承担服务并且保障服务的能力。

    125 引用 • 585 回帖 • 1 关注
  • 大数据

    大数据(big data)是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。

    89 引用 • 113 回帖 • 1 关注
  • 微服务

    微服务架构是一种架构模式,它提倡将单一应用划分成一组小的服务。服务之间互相协调,互相配合,为用户提供最终价值。每个服务运行在独立的进程中。服务于服务之间才用轻量级的通信机制互相沟通。每个服务都围绕着具体业务构建,能够被独立的部署。

    96 引用 • 155 回帖
  • Firefox

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

    7 引用 • 30 回帖 • 385 关注