scrapy的docker部署
https://blog.csdn.net/dream8062/article/details/78875830
Docker环境部署
Docker安装: 我使用的是企鹅的云服务器,ubuntu 32位
网上有根多安装教程,我找了个最简单的
sudo apt-get install -y docker.io
如果安装成功: docker info 后会出现docker版本信息
但是不出所料,肯定没那么顺利
Cannot connect to the Docker daemon.
网上查询一番。原来是sudo的原因
使用sudo docker info就不存在这个问题,但每个docker命令都要加sudo似乎太麻烦
按照下列步骤就可以完美解决
1.创建docker组:sudo groupadd docker
2.将当前用户加入docker组:sudo gpasswd -a ${USER} docker
3.重启服务:sudo service docker restart
4.刷新Docker成员:newgrp - docker
然后我想下载一个Anaconda的镜像
docker search anaconda
因为用的的python3,所以选择了continuumio/anaconda3 ,下下来总共有2个G..
docker images
然后我想进入该镜像,docker run continuumio/anaconda3
错误!!
panic: standard_init_linux.go:178: exec user process caused “exec format error”
panic: standard_init_linux.go:178: exec user process caused “exec format error”
然后老夫从中文查到英文。。。原来是他鸟的docker不支持32位ubuntu…”exec format error”当时就有点怀疑是不是系统的问题=,=,唉,还是太年轻
然后重装系统,重复上面的操作!Bingo!
Docker 应用部署
因为continuumio/anaconda3太大了,所以选择现在官方的python3.5镜像,然后惊奇的发现里面竟然包含了pip,json等常用库。
docker run -t -i python:3.5 /bin/bash
- 1
进入交互界面,然后通过pip完成scrapy的安装,完成scrapy安装后,将电脑上的scrapy工程scp到云主机上
-
scp -r file name@ip:/home/ubuntu/docker/scrapy
-
-
docker run -ti -v $PWD/docker/scrapy/cnki:/usr/src/myapp -w /usr/src/myapp python:3.5 /bin/sh
- 1
- 2
- 3
然后在容器中运行爬虫
scrapy crawl cnki1
- 1
但是,提示的是没有scrapy命令..这个咋回事,进入python后,import scrapy也不存在。
后来仔细想了下,当你停止一个Docker容器,对初始状态(创建容器所用的镜像的状态)做的所有变化都会丢失。因此当我退出时,刚刚pip下来的scrapy已经丢失了,回到了初始状态。
所以我又重复了一遍scrapy的安装,后来知道通过docker ps -al可以找到之前运行的容器然后直接commit为新的镜像。
-
docker ps #获取当前容器id
-
-
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
-
6a1971dc899c python:3.5 "/bin/bash" About a minute ago Up About a minute cranky_euler
-
2a7240457ee0 python:3.5 "/bin/bash" About an hour ago Up About an hour
-
-
docker commit 2a7240457ee0 scrapy #将该镜像保存
-
docker images
-
-
REPOSITORY TAG IMAGE ID CREATED SIZE
-
scrapy latest 7f53ab80aa28 6 seconds ago 766.2 MB
-
python 3.5 538287ecca03 13 hours ago 689.1 MB
-
ubuntu latest f7b3f317ec73 2 weeks ago 117.3 MB
-
-
docker run -ti -v /home/ubuntu/docker/scrapy/cnki:/usr/src/myapp -w /usr/src/myapp scrapy /bin/sh
-
-
scrapy crawl spider1
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
命令说明:
-v /home/ubuntu/docker/scrapy/cnkimyapp:/usr/src/myapp :将主机中目录下的myapp挂载到容器的/usr/src/myapp
-w /usr/src/myapp :指定容器的/usr/src/myapp目录为工作目录
成功爬取数据
Docker容器链接
由于在服务器端部署的docker,所以希望能够远程直接使用,因此考虑使用ssh远程连接docker。
首先交互模式进入容器,安装ssh并启动
-
sudo apt-get install openssh-server
-
/etc/init.d/ssh start
-
vim /etc/ssh/sshd_config //添加5001端口,修改完了记得docker commit 一下
-
Port 5001
-
-
docker run -d -p 5001:22 scrapy/cnki /etc/init.d/ssh start
- 1
- 2
- 3
- 4
- 5
- 6
期间也出了很多问题…但是由于时间比较久了,都没咋记录,不过都通过百度谷歌等方法找到了解决方案。
ssh root@ip -p 5001
- 1
因为容器是root用户所以这里是root,然后就可以直接进入容器操作了