-
需求背景
环境搭建是一个繁琐的过程,例如 python2.7 和 python3.6 的版本问题, python 中一些安装比较麻烦的模块如 cv2、PIL、pyltp 等。我们在本地开发好了一个爬虫项目,需要部署到多台服务器上跑起来,必须得在各台服务器上重新搭建爬虫运行环境。
如何解决本地开发完成,马上就能上线运行呢?virtualenv 是一种方式,但不适合线上部署运维; 另一种更为便捷的方式就是使用 docker。docker 可以提供操作系统级别的虚拟环境,我们可以将项目制作成 docker 镜像,只要其他机器安装了 docker,下载镜像运行即可。docker 运行采用虚拟环境,和宿主机完全隔离,不必担心环境配置问题或版本冲突问题。 -
爬虫项目
使用已经完成的一个 scrapy 爬虫项目,项目地址为:https://github.com/hexiaosong/cnblogs。克隆项目至本地,项目单独运行:
$ workon python2.7
$ cd cnblogs
$ pip install -r requirements.txt
$ export PYTHONPATH=$(pwd)
$ python main.py
- 创建 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 是容器启动命令,运行项目
- 构建镜像
在根目录下运行一下命令:
$ docker built -t cnblogs:latest .
注意后面的小点
执行过程输出如下所示:
这样数据就说明镜像构建成功,查看已经构建的镜像
docker images
- 运行
测试镜像在本地运行,执行一下命令:
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
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于