Docker-通过docker打包scrapyd服务并启动

简介: 前言这里尝试用docker做个简单的服务启动,只要能够正常启动scrapyd,并且外部可以对其进行访问即可。至于项目打包和利用数据卷进行持久化到下一篇文章再写,到时候要将这几样东西结合起来运行一个完整的项目。

前言

这里尝试用docker做个简单的服务启动,只要能够正常启动scrapyd,并且外部可以对其进行访问即可。

至于项目打包和利用数据卷进行持久化到下一篇文章再写,到时候要将这几样东西结合起来运行一个完整的项目。--


安装docker

在本地机器上安装docker,只需要输入命令:

sudo apt-get install docker-ce

就可以安装docker了(ce是社区免费版),然后通过命令:

sudo docker images

可以查看docker是否完整安装并且可运行


项目基本知识

scrapyd是scrapy官方团队为用户提供的用于发布scrapy项目的web服务,通过pip install安装好后输入scrapyd即可启动,但是如果需要外部访问则要将bind_adress设置为0.0.0.0

在安装好docker后,需要编写Dockerfile和docker-compose.yml以构建docker镜像。我这里新建了一个空目录,在里面通过sudo nano 编写Dockerfile:

FROM python:3.6
MAINTAINER ranbos
RUN pip install scrapyd \
&& pip install scrapyd-client
COPY default_scrapyd.conf /usr/local/lib/python3.6/site-packages/scrapyd/
CMD ["scrapyd"]

  1. 基于python3.6
  2. 作者ranbos
  3. 安装scrapyd 接着安装scrapyd-client
  4. 复制本机上改好的default_scrapyd.conf 到docker python镜像内的 /usr/local/lib/python3.6/site-packages/scrapyd/目录下,以覆盖原来的配置文件,实现外部可访问(里面我只改动了bind地址,将127.0.0.1改成0.0.0.0)
  5. 最后执行命令scrapyd来启动服务

更改后的default_scrapyd.conf内容为:

[scrapyd]
eggs_dir    = eggs
logs_dir    = logs
items_dir   =
jobs_to_keep = 5
dbs_dir     = dbs
max_proc    = 0
max_proc_per_cpu = 4
finished_to_keep = 100
poll_interval = 5.0
bind_address = 0.0.0.0
http_port   = 6800
debug       = off
runner      = scrapyd.runner
application = scrapyd.app.application
launcher    = scrapyd.launcher.Launcher
webroot     = scrapyd.website.Root

[services]
schedule.json     = scrapyd.webservice.Schedule
cancel.json       = scrapyd.webservice.Cancel
addversion.json   = scrapyd.webservice.AddVersion
listprojects.json = scrapyd.webservice.ListProjects
listversions.json = scrapyd.webservice.ListVersions
listspiders.json  = scrapyd.webservice.ListSpiders
delproject.json   = scrapyd.webservice.DeleteProject
delversion.json   = scrapyd.webservice.DeleteVersion
listjobs.json     = scrapyd.webservice.ListJobs
daemonstatus.json = scrapyd.webservice.DaemonStatus

至于为什么复制后的路径是/usr/local/lib/python3.6/site-packages/scrapyd/呢?

在容器启动后,通过命令:

 sudo docker exec -it a86  bash

其中a86是镜像id可以进入到容器内部,然后在里面通过:

pip show scrapyd

就可以找到scrapyd的安装路径。

在编写好Dockerfile后,就需要编写docker-compose.yml文件了:

version: '3'
services:

  web:
    build: .
    ports:
     - "6800:6800"

指定compose版本
然后指定服务为web
在当前目录构建
映射端口将开放给外部的端口映射到scrapyd服务端口6800

将Dockerfile和docker-compose.yml文件编写好后,通过命令:

sudo docker-compose up

就可以让它自行打包(根据Dockerfile的设定),下载和复制对应的依赖及文件,然后根据docker-compose.yml的设定构建镜像并且运行。

输入图片说明

可以看到容器正常启动,而且外部也可以访问scrapyd服务了。


下次启动

这次的打包构建做好了,那么下一次的呢?

通过命令:

sudo docker-images

可以看到本地有一个名为dockerscrapyd_web的镜像,就是刚才我构建的镜像

然后用命令:

sudo docker run -p 6800:6800  dockerscrapyd_web

其中dockerscrapyd_web就是容器的名称,就可以看到它又被启动了。


存储到云仓库

构建好的镜像可以通过命令启动,但是这不是最终目的,最终目的应该是将它放到云仓库当中,当自己需要的时候直接run或者pull就可以使用了。

Docker官方为人们提供了这样的服务,网址是hub.docker.com

登录后可以点击create

输入图片说明

输入信息后创建一个云镜像

输入图片说明

用命令登录docker:

sudo docker login

根据提示输入用户名和密码就行,登录成功后会回传消息:

Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: ranbovideo
Password: 
Login Succeeded


然后再用命令提交镜像:

sudo docker push <hub-user>/<repo-name>:<tag>

<hub-user>指的是用户名

<repo-name>指的是建立的仓库名,用图举例:

输入图片说明

后面跟着版本tag,用命令举例:

sudo docker push dockerscrapyd_web

如果是这样的命令,直接输入镜像名称是不行的


会得到回传信息:

denied: requested access to the resource is denied

要根据刚才的格式,将镜像tag和名称改一下:

sudo docker tag dockerscrapyd_web ranbovideo/scrapyd

然后可以用 sudo docker images查看是否改成功。看到镜像存在后用命令进行上传:

sudo docker push ranbovideo/scrapyd:latest

就可以看到它在一步步上传镜像了

输入图片说明

注意:推送Docker Hub速度很慢,耐心等待,很有可能失败,之后断开推送(但已推送上去的会保留,保留时间不知道是多久,可以通过刚才的命令继续上传,毕竟一个镜像几百M(我也不知道为什么那么大,700多M,我看了python3.6镜像有690多M,估计就是它),不是那么容易的


最后检查

push上云端之后,为了检查是否正常和正确,我把本地的镜像全都删了,然后从云端将它pull下载到本地运行

阿里云仓库

阿里云也为广大用户提供了仓库,可以传到共有也可以申请私有本地仓库,而且速度肯定比远在国外的hub docker快,而且对于直接在阿里云ECS上部署的话,拉取的速度超快,还不计算公网流量,可以体验一下:

$ sudo docker login --username=m152********@163.com registry.cn-beijing.aliyuncs.com
$ sudo docker tag [ImageId] registry.cn-beijing.aliyuncs.com/ranbos/scrapyd:[镜像版本号]
$ sudo docker push registry.cn-beijing.aliyuncs.com/ranbos/scrapyd:[镜像版本号]

上面由于700多M的数据上传到国外服务器实在是卡得不行,我这次就放在Aliyun的私有仓库中

输入图片说明

速度真是快的没话说,767M的镜像 2分钟左右上传完毕

目录
相关文章
|
1月前
|
前端开发 关系型数据库 MySQL
IDEA集成Docker插件打包服务镜像与运行【附Docker命令汇总】
IDEA集成Docker插件打包服务镜像与运行【附Docker命令汇总】
|
1月前
|
存储 Linux 数据安全/隐私保护
如何在本地Docker中部署MinIO服务并实现远程访问管理界面
如何在本地Docker中部署MinIO服务并实现远程访问管理界面
199 0
|
1月前
|
弹性计算 关系型数据库 MySQL
阿里云ECS使用docker搭建mysql服务
阿里云ECS使用docker搭建mysql服务
152 1
|
3天前
|
运维 前端开发 Devops
云效产品使用报错问题之流水线打包docker镜像时报网络代理有问题如何解决
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
18天前
|
关系型数据库 MySQL 数据安全/隐私保护
使用docker快速搭建wordpress服务,并指定域名访问
通过以上步骤,你可以使用Docker快速搭建WordPress服务,并通过指定的域名进行访问。 买CN2云服务器,免备案服务器,高防服务器,就选蓝易云。百度搜索:蓝易云
19 1
|
18天前
|
Ubuntu 网络安全 数据安全/隐私保护
ubuntu篇-配置FTP服务,本机和docker安装
通过以上步骤,你可以在Ubuntu上配置FTP服务,无论是本机安装还是Docker内安装,都可以提供FTP文件传输服务。 买CN2云服务器,免备案服务器,高防服务器,就选蓝易云。百度搜索:蓝易云
20 1
|
26天前
|
关系型数据库 MySQL Nacos
【深入浅出Nacos原理及调优】「实战开发专题」采用Docker容器进行部署和搭建Nacos服务以及“坑点”
【深入浅出Nacos原理及调优】「实战开发专题」采用Docker容器进行部署和搭建Nacos服务以及“坑点”
47 1
|
30天前
|
关系型数据库 MySQL 数据库
使用Docker搭建MySQL数据库服务
本文介绍了如何使用Docker搭建MySQL数据库服务。首先,通过`docker pull mysql:5.7`命令拉取MySQL 5.7镜像,然后运行`docker run`命令创建并启动容器。接着,使用`docker exec`进入容器并创建MySQL用户及授权。最后,通过MySQL客户端如Navicat测试连接,验证安装成功。Docker简化了MySQL的部署和管理,确保环境一致性。
37 0
|
1月前
|
NoSQL 关系型数据库 MySQL
Docker安装详细步骤及相关环境安装配置(mysql、jdk、redis、自己的私有仓库Gitlab 、C和C++环境以及Nginx服务代理)
Docker安装详细步骤及相关环境安装配置(mysql、jdk、redis、自己的私有仓库Gitlab 、C和C++环境以及Nginx服务代理)
209 0
|
1月前
|
存储 网络协议 文件存储
如何使用Docker本地部署Traefik并实现公网访问内网服务
如何使用Docker本地部署Traefik并实现公网访问内网服务
29 2