首页 > 数据库 >docker多容器之间的连接(Flask和Redis)

docker多容器之间的连接(Flask和Redis)

时间:2023-02-20 22:59:42浏览次数:63  
标签:容器 Flask Redis app redis flask docker data

(一) docker 多容器的应用

  1. 使用 flask 编写一个 web 应用,将数据存放于 redis 中
  2. 在 docker 开发中,我们应该遵循每个容器只做一件事的原则
  3. 我们运行两个容器,一个用于运行 flask 应用,一个用于运行 redis

(二) flask 应用和 redis

1. flask 应用

具体的操作请参考之前的博客:

需要改动的地方

  1. Dockerfile 文件
# 指定下载 python 版本,说明该镜像以哪个镜像为基础
FROM python:3.8.5

# 构建者的基本信息
MAINTAINER whxcer

# 创建 app 文件夹
RUN mkdir -p /app

# 进入 app 目录
RUN cd /app
# 或 WORKDIR /app

# 在容器内部执行的命令
RUN pip install flask -i https://pypi.douban.com/simple/
RUN pip install flask-redis -i https://pypi.douban.com/simple/
# RUN pip install -r requirements.txt -i https://pypi.douban.com/simple/

# 将 linux 系统当前目录下的内容拷贝到容器的 /app 目录下
ADD . /app

# 暴露 5000 端口
EXPOSE 5000

# 将 app 文件夹为工作目录
WORKDIR /app

# 容器启动的时候执行的命令 flask run
CMD ["flask", "run", "--host", "0.0.0.0"]
# 用单引号的话,flask应用启动不起来,必须要用双引号
  1. app.py 文件
from flask import Flask, jsonify
from flask_redis import FlaskRedis
import time


app = Flask(__name__)


# flask-redis 的配置和初始化
# 说明:Redis 服务启动后默认有 16 个数据库,编号分别是从 0 到 15,这边连接的是 0 号数据库
# 这边的 REDIS_URL 中的主机名必须使用 redis,使用 localhost 或者是 127.0.0.1 的话都不能连接上 redis
app.config['REDIS_URL'] = 'redis://:123456@redis:6379/0'
redis_client = FlaskRedis(app)


@app.route('/')
def index():
    return 'Hello World'

@app.route('/redis/set_data/<int:id>')
def set_data(id):
    # 准备相关的数据
    user_id = str(id)
    data = 'dyn_data_{}'.format(user_id)
    data_key = 'dyn_key_{}'.format(user_id)
    # 设置超时时间为 60 秒,当动态数据超过 60 没有更新时,Redis 会自动清除该数据。
    expires = int (time.time()) + 60

    # 写入 redis 中
    # 通过管道 pipeline 来操作 redis,以减少客户端与 redis-server 的交互次数。
    p = redis_client.pipeline()
    p.set(data_key, data)
    p.expireat(data_key, expires)
    p.execute()

    return '设置成功'

@app.route('/redis/get_data/<int:id>')
def get_data(id):
    user_id = str(id)
    data_key = 'dyn_key_{}'.format(user_id)
    data = redis_client.get(data_key)

    print('data = {}'.format(data))

    if data:
        return jsonify(
            {
                'data': data.decode(),
            }
        )
    else:
        return jsonify({})

2. Docker 运行 redis

具体的操作请参考之前的博客:使用Docker启动并运行Redis

(三) 将这两个容器相互连接

docker run -d --rm -p 5000:5000 --link redis flask_demo

命令说明:

  • -d 后台运行容器,并返回容器ID
  • --rm 表示退出容器时会自动将其删除
  • -p 指定端口映射,格式为:主机(宿主)端口:容器端口
  • --link 用于连接其他容器,我们这里连接的是 redis 容器
  • flask_demo 为运行的镜像的名字

(四) 运行效果图

  1. 访问主页
    image
  2. 设置数据,在 Redis 中缓存
    image
  3. 查看 Redis 中存储的数据
    image
  4. 获取 Redis 中存储的数据
    image

(五)额外说明:进入容器手动操作

1. 常用的 docker 命令

docker images       查看存在的镜像
docker ps -a        查看存在的容器
docker ps           查看正在运行的容器

docker rm -f [id]   删除容器
docker rmi [id]     删除镜像

docker start [id]   将处于暂停状态的容器启动
docker stop [id]    将处于运行状态的容器暂停
docker restart [id] 将处于暂停状态的容器启动
docker attach [id]  进入运行状态的容器中
ctrl+p ctrl+q       退出容器,容器状态处于 Up
exit                退出容器,容器状态处于 exit

2. 以交互模式运行容器

docker run -it -p 5000:5000 flask_demo /bin/bash
或
docker run -it -p 5000:5000 --link redis flask_demo /bin/bash

标签:容器,Flask,Redis,app,redis,flask,docker,data
From: https://www.cnblogs.com/wanghuizhao/p/17139298.html

相关文章

  • docker-compose的使用
    (一)概述使用Docker来开发,我们应遵循每个容器只做一件事的原则,因此Flask应用、MySQL、Redis等,它们分别运行在各自的容器中,所以一个完整的项目,可以视为是由多个容器组成......
  • flask_sqlalchemy_datetime_fakedate
    /Users/song/codelearn/QueryingWithDatesinFlask-SQLAlchemy/datequeries/app.pyfromdatetimeimportdate,datetime,timedeltafromfakerimportFakerfrom......
  • vue2,nginx,redis,tomcat,Java的关系
    Java作为一种广泛应用的编程语言,在后端开发中扮演着重要的角色。Java后端开发不仅需要掌握Java语言的基本语法和相关技术,还需要熟悉一些其他的技术和工具,如Vue2、Nginx、Re......
  • MyBatis-RedisCache源码分析
    回顾在前面,我们通过redis​集成了MyBatis​的二级缓存,440.MyBatis的二级缓存整合redis,接下来,我们来分析一下RedisCache​的源码。源码分析RedisCache主要是通过......
  • centos宿主机无法ping通docker容器以及dockers容器curl: (56) Recv failure: Connecti
    今天在测试docker容器时,本来配置的一切都挺顺利,放出我的测试经过:dockerrun-d--namenginx-p8080:80nginx然后这个nginx就在后台启动了,我接着使用命令curl127.......
  • redis-6.2
    1.事务(1).命令行形式首先是开启事务命令multi,执行完数据修改后EXEC提交事务,DISCARD取消事务  (2).代码形式pipe=r.pipeline()#创建一个管道pipe.multi()pi......
  • redis的docker使用介绍
    介绍(redisversion)镜像,容器,仓库的关系仓库中可能有很多镜像,拉取一个镜像到本地,镜像在容器中运行如果在一个操作系统中需要使用到另外一种操作系统,那么可以使用docker......
  • redis数据类型-string
    存储字符串类型的key-value形式常用场景验证码计数器重复提交:生成随机token,提交后token删除,token存在redis中复杂信息的序列化存储常用命令(https://try.redis.i......
  • docker常用命令
    Docker虚拟化#什么是Docker?Docker是一个开源的应用容器引擎,它让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到安装了任何Linux发行版本的机器上......
  • 常用包管理工具, 国内换源操作以及源地址收集(npm, yarn, pip, docker, linux, github
    常用包管理工具的换源本文将保持更新,以适应不同时代软件源的变化;如发现软件源失效请留言提醒常用包管理工具,国内换源操作以及镜像源地址收集(npm,yarn,pip,doc......