如何使用Docker组成的Redis flask应用程序容器
#python #devops #docker #kubernetes

Flask是用于构建Web应用程序的开源Python微型框架。它是在Werkzeug和Jinja2上实施的。 Redis是一个充满活力的开源内存数据存储平台。开发人员将Redis用作消息经纪,数据库,流动引擎和应用程序缓存。

我们将使用redis进行缓存。缓存是一种计算技术,它使应用程序能够在随机访问存储器中临时存储数据,文件和登录详细信息。它可以更快地检索该数据,并且应用程序将加载更快。

在本教程中,我们将构建一个示例Python烧瓶应用程序,并实现REDIS进行缓存。然后,我们将使用Docker Compose将REDIS烧瓶应用程序集成。 Docker Compose是一种强大的Docker工具,用于创建和运行多座Docker应用程序。我们的应用程序将有两个容器。第一个容器将托管烧瓶应用程序。另一个容器将用于Redis缓存。 Docker Compose将以一个应用程序运行两个容器。让我们开始

先决条件

在开始之前,您必须了解Docker。您还需要在工作机器中设置以下设置:

制造样品Python烧瓶应用

我们构建了一个样本Python烧瓶应用程序,并实现了用于缓存的Redis。让我们使用终端中的以下pip命令安装烧瓶和redis:

pip install flask
pip install redis

安装过程后,创建一个名为flask-redis的文件夹。在文件夹中,创建一个名为app.py的新文件。打开文件并添加以下代码段:

from flask import Flask
from redis import Redis

app = Flask(__name__)
redis = Redis(host='redis', port=6379)

@app.route('/')
def hello():
    redis.incr('hits')
    counter = str(redis.get('hits'),'utf-8')
    return "Welcome to this webapage!, This webpage has been viewed "+counter+" time(s)"

if __name__ == "__main__":
    app.run(host="0.0.0.0", debug=True)

Blaska应用程序将使用REDIS缓存来显示已查看网页的次数。要运行该应用程序,请cd进入flask-redis文件夹并运行以下python命令:

python app.py

命令将启动并运行烧瓶Web应用程序:

Image description

您可以在http://127.0.0.1:5000/上访问Web应用程序。

Image description

集装Redis烧瓶应用程序

我们将使用Docker组合来容器将Redis Blask应用程序进行容器化。使用Docker Compose,您可以创建一个YAML文件,以添加和配置应用程序的容器作为服务。我们的Docker撰写文件将有两种服务:烧瓶服务和REDIS服务。创建Docker撰写文件时,烧瓶服务将取决于Redis服务。

Docker组成的YAML文件还将定义容器量,端口映射,容器名称和用于构建图像的DockerFiles。docker compose将执行指定的Dockerfiles并构建Docker容器。 Dockerfile是一个文本文件,没有文件扩展名,其中包含Docker Engine用来自动构建Docker映像的所有命令和说明。

我们只需要一个Dockerfile来构建Python烧瓶应用程序图像。用于缓存的Redis容器不需要Dockerfile,因为我们将使用Docker Hub的官方Redis Docker image。官方图像也称为基础/父映像。我们将从Docker Hub中提取REDIS图像,并使用它来构建Redis容器,而无需对Docker映像进行任何更改。我们还将在flask-redis文件夹中创建一个requirements.txt文件。

创建一个requirements.txt文件

此文件将包含用于创建我们应用程序的依赖,库和工具。我们的应用程序需要烧瓶来构建Web应用程序和重新用于缓存的烧瓶。在flask-redis文件夹中,创建一个requirements.txt文件并添加以下内容:

flask
redis

我们将在Dockerfile中添加指令,以在Python Flask应用程序Docker Image中安装这两个诽谤。让我们为Python烧瓶应用程序创建一个Dockerfile

Python烧瓶应用程序的Dockerfile

Docker将阅读Dockefile中写的说明并构建Docker映像。 Dockerfiles因您正在构建的应用程序而有所不同。在flask-redis文件夹中,创建一个新的Dockerfile并添加以下内容:

#The Flask application container will use python:3.10-alpine as the base image
FROM python:3.10-alpine

#This command will create the working directory for our Python Flask application Docker image
WORKDIR /code

#This command will copy the dependancies and libaries in the requirements.txt to the working directory
COPY requirements.txt /code

#This command will install the dependencies in the requirements.txt to the Docker image
RUN pip install -r requirements.txt --no-cache-dir

#This command will copy the files and source code required to run the application
COPY . /code

#This command will start the Python Flask application Docker container
CMD python app.py

现在我们已经创建了DockerFile,我们现在需要创建一个docker-compose.yml文件,该文件将将应用程序的容器配置为服务。它还将添加运行两个Docker容器所需的所有配置。

创建一个docker-compose.yml

docker-compose.yml将简单地创建和运行Docker容器的过程。使用一个命令,您可以运行docker-compose.yml一次启动所有容器。 Docker Compose可以在应用程序开发的各个阶段进行部署。它还具有其他命令,可以帮助管理Docker容器的管理,例如查看创建服务的状态并停止运行服务。

flask-redis文件夹中,创建一个docker-compose.yml文件并添加以下两个服务:

  1. REDIS服务 要创建Redis服务,请在创建的文件中添加以下代码:
services:
   redis: 
     image: redislabs/redismod
     container_name: redis
     ports:
       - '6379:6379' 

上面的代码将创建redis服务。该服务将使用Docker Hub的redislabs/redismod Docker映像来构建Docker容器。 container_nameredisredis容器将在6379端口上运行。

  1. 烧瓶服务 要创建Flask服务,请在创建的文件中添加以下代码:
   flask:
        build: .
        container_name: flask
        ports:
            - "5000:5000"
        volumes:
            - .:/code
        depends_on:
            - redis

上面的代码将创建一个flask服务,该服务取决于要运行的redis服务。此服务将在flask-redis文件夹Docker Image中使用Docker文件来构建Docker容器。 container_nameflaskflask容器将在5000端口上运行。该代码还将在工作目录中创建容器卷。容器将将flask-redis文件夹映射到容器工作目录。当在flask-redis文件夹中进行文件更改时,将在容器工作目录中自动更新它。它可以确保始终更新容器。

最终的docker-compose.yml文件将如下所示:

services:
   redis: 
     image: redislabs/redismod
     container_name: redis
     ports:
       - '6379:6379' 
   flask:
        build: .
        container_name: flask
        ports:
            - "5000:5000"
        volumes:
            - .:/code
        depends_on:
            - redis

将两个服务添加到文件后,下一步是使用单个命令,您可以运行docker-compose.yml一次启动所有容器。

一次启动两个容器

要一次启动两个容器,请使用以下docker-compose命令:

docker-compose up

命令将构建并启动两个Docker容器,如下所示:

Image description

您也可以在http://127.0.0.1:5000/上访问Web应用程序。

Image description

从上图中,我们可以看到使用Redis缓存的容器化烧瓶应用程序正在运行。刷新网页以增加查看网页的次数。

结论

在本教程中,您已经使用docker compose来容器将redis烧瓶应用程序容器化。我们从构建样品Python烧瓶应用程序开始,并实施了用于缓存的Redis。然后,我们创建了一个用于容器化Python烧瓶应用程序的Dockerfile。我们创建了一个docker-compose.yml,用于添加和配置应用程序的容器作为服务。最后,我们使用docker-compose up立即启动了两个容器,并在http://127.0.0.1:5000/上访问了该应用程序。

本教程中的应用程序是用于演示目的的简单应用程序。您可以使用自己的烧瓶应用程序来实现本教程的概念。希望本教程对您的DevOps旅程有所帮助,并感谢您的阅读!