前言:随着容器技术的发展,Docker+Kubernetes的解决方案越来越流行,接下来,我们就来了解下Scrapy项目基于Docker+Kubernetes的部署和维护方案,内容包含:
- 如何把Scrapy项目打包成一个Docker镜像;
- 如何利用Docker Compose来方便地维护和打包镜像;
- 如何使用Kubernetes 来部署Scrapy项目的Docker镜像;
一.将Scrapy 项目打包成Docker 镜像
1.1 准备工作
- 准备好一个scrapy-redis分布式爬虫项目
- 安装好Docker并能正常使用 docker 命令
1.2 创建 Docckerfile
- 新建项目依赖环境包
项目根目录新建一个 requirement 文件,如下所示:
scrapy
aiohttp
scrapy-redis
environs
......
# 也可以指定版本号,如:scrapy>=2.5.0
- 项目根目录新建一个Dockerfile
注意:文件不加任何后缀名!将其内容改为:
FROM python:3.9 # 代表使用基础镜像,运行当前项目
WORKDIR /app # 运行路径,这样在Docker中,最终运行程序所在路径是/app
COPY requirements.txt . # 将本地的依赖文件复制到Docker中,即复制到 /app 下
RUN pip3 install -r requirements.txt # 读取上步复制的依赖文件,并安装所列出来的依赖库
COPY . . # 将当前文件夹下的所有文件全部复制到Docker的 /app 路径下
# 这里再次复制,因为这样将相对费时的依赖库安装操作放在相对靠前的层级实现。并且在依赖文件不变情况下,再次构建Docker镜像时候,就直接用这个该构建好的层级,不会在费时间构建依赖库。
CMD ["scrapy" "crawl" "book"] # 项目的启动命令了,建议使用双引号
- 修改项目环境变量
首先确保重要redis变量,url地址等使用环境变量获取,修改下settings.py,有助于灵活修改项目
from environs import Env
env = Env()
env.read_env()
REDIS_URL = env.str('REDIS_URL')
- 构建镜像
接下来,进入到项目更目录镜像构建,命令如下
docker build -t scrapyredisdemo .
# 注意命令最后一个 . 点号,代表当前运行目录
构建过程根据Dockerfile步骤来,没有出现报错就说明构建成功
查看构建好的镜像执行:
docker images
如果需要删除镜像的话执行:
docker rmi -f <iamges-name / images-id>
构建好,在执行之前新建一个 .env 文件,其内容如下:
REDIS_URL=redis://host.docker.internal:6379
# host.docker.internal 这代表Docker所在宿主机的IP地址,在Docker内部就可以访问宿主机的相关资源
# 如果有其他变量,也可以自行添加,提前需要设置项目文件的变量名
同时在本机运行redis 数据库运行在6379端口
- 运行检测
现在可以先在本地测试运行,命令如下:
docker run --env-file .env scrapyredisdemo
运行结果和python运行一致说明成功了
- 推送至 Docker Hub
Docker Hub 是镜像托管平台,很多镜像都能在这找到。创建步骤:
- 在 https://hub.docker.com 上注册一个账号,如:bobi,名字自行修改;
- 新建一个私有Repository:scrapyredisdemo;
- 那么推送地址就可以使用: bobi/scrapyredisdemo
回到命令端口登录Docker Hub,输入:
docker login
# 运行后按步骤输入上面注册的账号密码完成登录
接下来为新建的镜像打一个标签:
docker tag scrapyredisdemo:latest bobi/scrapyredisdemo:latest
然后就可以推送命令了:
docke