确保win10系统上安装了docker. 由于我的win10系统是家庭版
请确认win10上安装了mongodb服务
如何把scrapy项目打包成一个docker镜像 ?
- 从github上下载scrapy工程:https:///Python3WebSpider/ScrapyTutorial ,当然也可以自己新建一个爬取工程,既然有了,就用现成的代码把,主要是熟悉下打包docker镜像的过程。 下载到本地后,解压的路径如下: D:\python_study\ScrapyTutorial-master\ScrapyTutorial-master
- 进入D:\python_study\ScrapyTutorial-master\ScrapyTutorial-master,然后在该目录下,新建一个requirements.txt文件,该文件主要作用,下载爬虫工程所对应的python 库. 例如:该例举工程需要两个库scrapy / pymongo ,所以,文件的内容设定如下:
不带版本号获取不带版本号都可以:
pymongo
Scrapypymongo==3.9.0
Scrapy==1.7.3- 同理,在该目录下D:\python_study\ScrapyTutorial-master\ScrapyTutorial-master,新建一个Dockerfile文件,文件不加任何后缀名,修改内容如下所示:
FROM python:3.7
ENV PATH /usr/local/bin:$PATH
ADD . /code
WORKDIR /code
RUN pip3.7 install -r requirements.txt -i http:///simple --trusted-host
CMD scrapy crawl quotes- docker如和访问 mongodb数据库,需要做以下设定才能正确访问:
A: 进入mongodb数据库安装路径C:\Program Files\MongoDB\Server\4.2\bin ,然后找到mongod.cfg文件:
修改前
net:
port: 27017
bindIp: 127.0.0.1mongodb默认监听的是127.0.0.1:27017,因此是不允许远程访问的。所以安装mongodb时,如果:
要远程访问(使用ip访问),应当在配置文件配置开启IP访问. 绑定ip:0.0.0.0表示所有的ip都可以访问, 从docker 虚拟环境中访问win10的mongodb,相当于从远程电脑访问 这台win10主机.所有需要把ip配置成0.0.0.0
net:
port: 27017
bindIp: 0.0.0.0配置好后,然后重启mongodb服务:

进入D:\python_study\ScrapyTutorial-master\ScrapyTutorial-master\tutorial,然后找到settings.py ,把MONGO_URI 设置如下: 192.168.1.6为我本机win10 ip地址
MONGO_URI='mongodb://192.168.1.6:27017'如果不按上述配置,在docker中运行程序,就会提示: pymongo.errors.ServerSelectionTimeoutError: ip:27017: [WinError 10061] 由于目标计算机积极拒绝,无法连接。
- 接下来我们构建Docker镜像,执行如下命令:
双击打开Docker Quickstart Terminal,出现如下界面:
然后进入到D:\python_study\ScrapyTutorial-master\ScrapyTutorial-master\,执行如下命令:
docker build -t quotes:latest .出现如下提示,就说明构建成功:
$ docker build -t quotes:latest .
Sending build context to Docker daemon 196.1kB
Step 1/6 : FROM python:3.7
---> 02d2bb146b3b
Step 2/6 : ENV PATH /usr/local/bin:$PATH
---> Using cache
---> 7b99ea57dee5
Step 3/6 : ADD . /code
---> 976ebbfcccc6
Step 4/6 : WORKDIR /code
---> Running in 5009b54696d4
..........
..........
---> cf2bbe222d24
Step 6/6 : CMD scrapy crawl quotes
---> Running in 040969dfe2c7
Removing intermediate container 040969dfe2c7
---> 5290b4af9ee8
Successfully built 5290b4af9ee8
Successfully tagged quotes:latest输入下列命令,查看一下构建的镜像,如下所示:
docker images运行接口可以看到,这就是我们新构建的镜像。

如何运行?执行下列命令:
docker run quotes可以看到通过docker抓取流程跟 正常的爬取流程一样:



通过工具Robo3T访问mongodb数据库,就能查看爬取的数据信息:

如何把镜像推送至Docker Hub
1: 首先在https://注册一个账号,新建一个Repository,名为quotes。比如,我的用户名为***, 新建的Repository名为quotes,那么此Repository的地址就可以用 ***/quotes来表示
为新建的镜像打一个标签,命令如下所示:
docker tag quotes:latest ***/quotes:latestPush镜像到Docker Hub即可,命令如下所示:
docker push ***/quotespush过程中可能会出现如下错误:
$ docker push ***/quotes
The push refers to repository [/***/quotes]
9f060cf20d2d: Preparing
1d72c0ea3cd7: Preparing
46ed3d879948: Preparing
fbeeb71995b3: Preparing
bb9e1c111e49: Preparing
ac3ac7a153b5: Waiting
3bfeb766f97b: Waiting
ea1227feeccb: Waiting
9cae1895156d: Waiting
52dba9daa22c: Waiting
78c1b9419976: Waiting
denied: requested access to the resource is denied可以参考截图,解决的方法: 启动docker,然后登录自己的账号和密码:
docker login
然后登录https://cloud.docker.com,查看,如截图多出了一个Tags列表项, 就代表推送成功:

如果我们想在其他的主机上运行这个镜像,主机上装好Docker后,可以直接执行如下命令:
首先登录docker账号/密码,然后运行下列命令:
docker run ***/quotes还可以指定标签运行(如果有多个标签,需要指定标签运行):
docker run ***/quotes:latest这样就会自动下载镜像,启动容器运行。不需要配置Python环境,不需要关心版本冲突问题。
运行结果如截图:

运行过程中遇到的错误:
1.执行docker-machine restart会提示如下错误:
Unable to verify the Docker daemon is listening: Maximum number of retries (10) exceeded
默认配置出问题,重置默认配置即可。输入指令
docker-machine rm -f default
docker-machine create -d virtualbox default- Looks like something went wrong in step ´Finalize´… Press any key to continue…
如果遇到这种错误:
脚本执行错误,找到start.sh文件,我本地默认放到 C:\Program Files\Docker Toolbox目录下,
注释“Finalize”的下一行“clear”即可(84行的位置)
STEP="Finalize"
#clear
cat << EOF#通过docker-machine进入docker环境
打开Oracle VM VirtualBox,可以看到对应的虚拟机名称,默认为default
docker-machine ssh default开启default虚拟机:
docker-machine start default关闭default虚拟机:
docker-machine stop default如果还有其他虚拟机,想进入docker环境,也可以输入
docker-machine ssh others进入/var/lib/boot2docker/profile中,可以配置加速地址:
#在--label provider=virtualbox的下一行添加
--registry-mirror https://然后重启docker服务
sudo /etc/init.d/docker restart或者重启VM:exit退出VM bash,在windows bash中执行
docker-machine restart如何删除本地docker images 某一个tag:
先查看docker 中有几个images :

如何要删除 tag: latest, 可以执行以下命令:

运行结果出错,由于image被某个container引用(拿来运行),如果不将这个引用的container销毁(删除),那image肯定是不能被删除. 可以通过以下命令查看 该images被哪个container引用:

可以看出5290b4af9ee8的image被14a0b0936326的container使用着,所以必须首先删除该container:

出现错误,这是因为该container正在运行中(运行docker ps查看),先将其关闭


然后依次删除 container , IMAGE_ID :



可以看出,image已经被删除。
















