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分钟左右上传完毕

目录
相关文章
|
3月前
|
JavaScript 前端开发 数据安全/隐私保护
阿里云云效操作报错合集之流水线中获取不到CI_COMMIT_REF_NAME变量,导致docker镜像打包失败,什么原因
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
18天前
|
存储 Linux Docker
CentOS 7.6安装Docker实战案例及存储引擎和服务进程简介
关于如何在CentOS 7.6上安装Docker、介绍Docker存储引擎以及服务进程关系的实战案例。
64 3
CentOS 7.6安装Docker实战案例及存储引擎和服务进程简介
|
25天前
|
安全 Go Docker
Go服务Docker Pod不断重启排查和解决
该文章分享了Go服务在Docker Pod中不断重启的问题排查过程和解决方案,识别出并发写map导致fatal error的问题,并提供了使用sync.Map或concurrent-map库作为并发安全的替代方案。
19 4
|
25天前
|
Java Docker Python
启动docker服务需要的三个重要文件
这篇文章介绍了启动Docker服务所需的三个重要文件:Dockerfile、build_image.sh和run.sh。文章提供了Java和Python两个版本的Dockerfile示例,并解释了每个阶段的作用,如基础镜像的选择、构建环境的设置、以及如何通过参数传递环境变量。build_image.sh脚本用于执行Docker镜像的构建、标记和推送过程,而run.sh脚本则用于执行具体的运行命令,包括设置Java参数和执行jar文件。 文章还强调了这些文件应由项目负责人维护,并根据项目需求自行修改启动命令参数。
15 2
|
2月前
|
Java Serverless Docker
函数计算产品使用问题之使用Docker镜像部署的Web服务如何获取客户端的真实IP
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
27天前
|
开发框架 .NET Linux
【Azure 应用服务】 部署到App Service for Linux 服务的Docker 镜像,如何配置监听端口呢?
【Azure 应用服务】 部署到App Service for Linux 服务的Docker 镜像,如何配置监听端口呢?
|
27天前
|
开发框架 .NET Linux
【Azure Developer】已发布好的.NET Core项目文件如何打包为Docker镜像文件
【Azure Developer】已发布好的.NET Core项目文件如何打包为Docker镜像文件
|
2月前
|
Shell 应用服务中间件 nginx
docker 服务,镜像,容器命令总结
docker 服务,镜像,容器命令总结
133 4
|
1月前
|
Docker 容器
SonarQube——Docker搭建SonarQube服务
SonarQube——Docker搭建SonarQube服务
28 0
|
3月前
|
缓存 Linux Docker
CentOS 7 下安装 Docker 及配置阿里云加速服务
CentOS 7 下安装 Docker 及配置阿里云加速服务
1090 1