scrapy-redis项目打包docker镜像+部署kubernetes

前言:随着容器技术的发展,Docker+Kubernetes的解决方案越来越流行,接下来,我们就来了解下Scrapy项目基于Docker+Kubernetes的部署和维护方案,内容包含:

  • 如何把Scrapy项目打包成一个Docker镜像;
  • 如何利用Docker Compose来方便地维护和打包镜像;
  • 如何使用Kubernetes 来部署Scrapy项目的Docker镜像;

一.将Scrapy 项目打包成Docker 镜像

1.1 准备工作

  • 准备好一个scrapy-redis分布式爬虫项目
  • 安装好Docker并能正常使用 docker 命令

1.2 创建 Docckerfile

  1. 新建项目依赖环境包

项目根目录新建一个 requirement 文件,如下所示:

scrapy
aiohttp
scrapy-redis
environs
......
# 也可以指定版本号,如:scrapy>=2.5.0
  1. 项目根目录新建一个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"]		# 项目的启动命令了,建议使用双引号
  1. 修改项目环境变量

首先确保重要redis变量,url地址等使用环境变量获取,修改下settings.py,有助于灵活修改项目

from environs import Env
env = Env()
env.read_env()
REDIS_URL = env.str('REDIS_URL')
  1. 构建镜像

接下来,进入到项目更目录镜像构建,命令如下

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端口

  1. 运行检测

现在可以先在本地测试运行,命令如下:

docker run --env-file .env scrapyredisdemo

运行结果和python运行一致说明成功了

  1. 推送至 Docker Hub

Docker Hub 是镜像托管平台,很多镜像都能在这找到。创建步骤:

  • 在 https://hub.docker.com 上注册一个账号,如:bobi,名字自行修改;
  • 新建一个私有Repository:scrapyredisdemo;
  • 那么推送地址就可以使用: bobi/scrapyredisdemo

回到命令端口登录Docker Hub,输入:

docker login
# 运行后按步骤输入上面注册的账号密码完成登录

接下来为新建的镜像打一个标签:

docker tag scrapyredisdemo:latest bobi/scrapyredisdemo:latest

然后就可以推送命令了:

你可能感兴趣的:(scrapy,scrapy,redis,docker,kubernetes,容器)