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 
anaconda images
因为用的的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到云主机上

  1.  
    scp -r file name@ip:/home/ubuntu/docker/scrapy
  2.  
     
  3.  
    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为新的镜像。

  1.  
    docker ps #获取当前容器id
  2.  
     
  3.  
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  4.  
    6a1971dc899c python:3.5 "/bin/bash" About a minute ago Up About a minute cranky_euler
  5.  
    2a7240457ee0 python:3.5 "/bin/bash" About an hour ago Up About an hour
  6.  
     
  7.  
    docker commit 2a7240457ee0 scrapy #将该镜像保存
  8.  
    docker images
  9.  
     
  10.  
    REPOSITORY TAG IMAGE ID CREATED SIZE
  11.  
    scrapy latest 7f53ab80aa28 6 seconds ago 766.2 MB
  12.  
    python 3.5 538287ecca03 13 hours ago 689.1 MB
  13.  
    ubuntu latest f7b3f317ec73 2 weeks ago 117.3 MB
  14.  
     
  15.  
    docker run -ti -v /home/ubuntu/docker/scrapy/cnki:/usr/src/myapp -w /usr/src/myapp scrapy /bin/sh
  16.  
     
  17.  
    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并启动

  1.  
    sudo apt-get install openssh-server
  2.  
    /etc/init.d/ssh start
  3.  
    vim /etc/ssh/sshd_config //添加5001端口,修改完了记得docker commit 一下
  4.  
    Port 5001
  5.  
     
  6.  
    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,然后就可以直接进入容器操作了

posted @ 2018-12-15 08:34  猪啊美  阅读(1583)  评论(0编辑  收藏  举报