使用docker-compose搭建flask和redis环境

简介

docker-compose的出现,解决了批量化docker环境的问题,只需要配置docker-compose.yml文件,就可以搭建自己所需的环境。所以,我就根据docker官网的手册,使用docker-compose来搭建环境,首先搭建的是一个flask网站,使用的是redis。

搭建

Step 1:Setup

1.创建仓库,安装的镜像,服务都在创建的仓库里

$ mkdir composetest
$ cd composetest

2.创建app.py,我们的flask网站内容反映在app.py里面

import time

import redis
from flask import Flask

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


def get_hit_count():
    retries = 5
    while True:
        try:
            return cache.incr('hits')
        except redis.exceptions.ConnectionError as exc:
            if retries == 0:
                raise exc
            retries -= 1
            time.sleep(0.5)


@app.route('/')
def hello():
    count = get_hit_count()
    return 'Hello World! I have been seen {} times.\n'.format(count)

代码的意思是每次刷新网站,访问次数会在页面显示。官方文档中显示的注意事项,关于get_hit_count的细节,翻译过来是

注意get_hit_count函数的编写方式。如果Redis服务不可用,这个基本的重试循环允许我们多次尝试请求。
当应用程序联机时,这在启动时很有用,但如果在应用程序的生命周期内需要随时重新启动Redis服务,这也会使我们的应用程序更有弹性。
在集群中,这也有助于处理节点之间的瞬时连接丢失。

3.创建requirements.txt文件,里面的内容是

flask
redis

这是flask必要的文件,里面是需求

Step 2:Create a Dockerfile

在你编写的dockerfile里面,包含了python应用程序需要的所有依赖项,包括python本身,在本项目里,dockerfile内容如下

FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP app.py
ENV FLASK_RUN_HOST 0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
CMD ["flask", "run"]

功能如下:

从python 3.7映像开始构建映像。              
将工作目录设置为/code。              
设置flask命令使用的环境变量。              
安装gcc,让诸如markupsafe和sqlacalchemy之类的python包可以编译加速。              
复制requirements.txt并安装python依赖项。              
复制当前目录。在项目中到WorkDir。在图像中。              
将容器的默认命令设置为flask run。

更多的使用方法,可以参考官方文档

https://docs.docker.com/engine/reference/builder/

step 3:Create a docker-compose.yml

在这一步中,我们需要做的就是根据自己的需要,来写配置文件

version: '3'
services:
  web:
    build: .
    ports:
      - "5000:5000"
  redis:
    image: "redis:alpine"

可以发现,services里面有两个服务,一个是web,另一个是redis,web服务的作用是在容器里绑定端口5000,redis是从网上pull下来的。
这里是配置文件的参数信息

https://blog.csdn.net/Aria_Miazzy/article/details/89326829

step 4:Build and run

使用命令

docker-compose up

让我们的容器运转起来,在执行过程中可能会出现报错

ERROR: Service 'web' failed to build: The command '/bin/sh -c apt-get update --fix-missing' returned a non-zero code: 127

这是源的问题,就需要我们换一下源,换源可以参考文章

http://dvsx.cn/2019/07/11/ubuntu-huan-yuan/

问题解决之后,就可与在网站上访问了
在这里插入图片描述
主机访问
虚拟机访问

更新参数

想要更改参数,需要先关闭环境

docker-compose down

我们想要修改的是增加一个环境变量,允许动态的修改代码,而不必重启镜像。flask_env环境变量,指示flask run以开发者模式运行。

version: '3'
services:
  web:
    build: .
    ports:
      - "5000:5000"
    volumes:
      - .:/code
    environment:
      FLASK_ENV: development
  redis:
    image: "redis:alpine"

然后再开启环境就可以了

docker-compose up

总结

在环境的搭建过程中,daockerfile和docker-compose.yml的编写是很重要的步骤,要理解各个参数的意思,才能根据自己的需求搭建出自己想要的环境。

Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具,通过一个简单的 `docker-compose.yml` 文件就可以管理应用的所有服务。当你想要部署一个 Flask 应用并整合 Redis 作为缓存或消息队列时,可以使用 Docker Compose 来同时运行 Flask 应用和 Redis 服务。 下面是一个简单的 `docker-compose.yml` 文件示例,用于部署一个 Flask 应用和 Redis 服务: ```yaml version: '3.8' services: web: build: . ports: - app-network redis: image: redis:alpine networks: - app-network networks: app-network: driver: bridge ``` 在这个配置中: - `web` 服务使用当前目录下的 `Dockerfile` 构建 Flask 应用的镜像。 - `ports` 将容器内部的5000端口映射到宿主机的5000端口。 - `depends_on` 表示 web 服务依赖于 redis 服务。 - `redis` 服务使用官方的 Redis 镜像,并设置为 `alpine` 版本以减小镜像大小。 - `networks` 定义了一个名为 `app-network` 的桥接网络,使得 web 和 redis 服务能够在同一个网络中通信。 你还需要创建一个 `Dockerfile` 来告诉 Docker 如何构建你的 Flask 应用镜像。一个简单的 `Dockerfile` 可能看起来如下: ```Dockerfile # 使用官方 Python 开发镜像 FROM python:3.8-slim # 设置工作目录 WORKDIR /usr/src/app # 将依赖文件复制到容器内 COPY requirements.txt ./ # 安装依赖 RUN pip install --no-cache-dir -r requirements.txt # 将应用源代码复制到容器内 COPY . . # 暴露端口 EXPOSE 5000 # 运行 Flask 应用 CMD [ "python", "./app.py" ] ``` 这个 `Dockerfile`: - 使用 Python 3.8 的瘦版镜像作为基础镜像。 - 设置工作目录到 `/usr/src/app`。 - 将依赖文件 `requirements.txt` 复制到容器中,并安装这些依赖。 - 将当前目录下的所有文件复制到容器中的工作目录。 - 暴露5000端口,这是 Flask 应用默认监听的端口。 - 设置容器启动时执行的命令为运行 Flask 应用。 在构建和启动服务之前,确保你的 Flask 应用能够在本地正常运行,并且已经创建了 `requirements.txt` 文件列出了所有依赖。 要构建并启动服务,执行以下命令: ```bash docker-compose up --build ``` 这将根据 `docker-compose.yml` 文件和 `Dockerfile` 构建 Flask 应用镜像,并启动 Flask 应用和 Redis 服务。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值