日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無先后,達(dá)者為師

網(wǎng)站首頁 編程語言 正文

Python?Flask?+?Redis?程序練習(xí)_python

作者:小葉柏杉 ? 更新時間: 2022-04-03 編程語言

兩個容器,一個flask-demo,一個是redis-server
在一個自定義網(wǎng)絡(luò)bridge,相互ping,不需要知道ip,只用名字就能ping通

1.程序準(zhǔn)備

準(zhǔn)備一個Python文件,名字為 app.py 內(nèi)容如下:

提供一個web服務(wù),可以訪問地址,返回一個Hello Container World!..并且記錄訪問的次數(shù)。

from flask import Flask
from redis import Redis
import os
import socket

app = Flask(__name__)
redis = Redis(host=os.environ.get('REDIS_HOST', '127.0.0.1'), port=6379)


@app.route('/')
def hello():
? ? redis.incr('hits')
? ? return f"Hello Container World! I have been seen {redis.get('hits').decode('utf-8')} times and my hostname is {socket.gethostname()}.\n"

準(zhǔn)備一個Dockerfile

FROM python:3.9.5-slim

RUN pip install flask redis && \
? ? groupadd -r flask && useradd -r -g flask flask && \
? ? mkdir /src && \
? ? chown -R flask:flask /src

USER flask

COPY app.py /src/app.py

WORKDIR /src

ENV FLASK_APP=app.py REDIS_HOST=redis

EXPOSE 5000

CMD ["flask", "run", "-h", "0.0.0.0"]

2.鏡像準(zhǔn)備

構(gòu)建flask鏡像,準(zhǔn)備一個redis鏡像。

$ docker image pull redis
$ docker image build -t flask-demo .
$ docker image ls
REPOSITORY ? TAG ? ? ? ? ?IMAGE ID ? ? ? CREATED ? ? ? ? ? ? ?SIZE
flask-demo ? latest ? ? ? 4778411a24c5 ? About a minute ago ? 126MB
python ? ? ? 3.9.5-slim ? c71955050276 ? 8 days ago ? ? ? ? ? 115MB
redis ? ? ? ?latest ? ? ? 08502081bff6 ? 2 weeks ago ? ? ? ? ?105MB

3.創(chuàng)建一個docker bridge

$ docker network create -d bridge demo-network
8005f4348c44ffe3cdcbbda165beea2b0cb520179d3745b24e8f9e05a3e6456d
$ docker network ls
NETWORK ID ? ? NAME ? ? ? ? ? DRIVER ? ?SCOPE
2a464c0b8ec7 ? bridge ? ? ? ? bridge ? ?local
8005f4348c44 ? demo-network ? bridge ? ?local
80b63f711a37 ? host ? ? ? ? ? host ? ? ?local
fae746a75be1 ? none ? ? ? ? ? null ? ? ?local
$

4.創(chuàng)建redis container

創(chuàng)建一個叫 redis-server container,連到demo-network

$ docker container run -d --name redis-server --network demo-network redis
002800c265020310231d689e6fd35bc084a0fa015e8b0a3174aa2c5e29824c0e
$ docker container ls
CONTAINER ID ? IMAGE ? ? COMMAND ? ? ? ? ? ? ? ? ?CREATED ? ? ? ? STATUS ? ? ? ? PORTS ? ? ?NAMES
002800c26502 ? redis ? ? "docker-entrypoint.s…" ? 4 seconds ago ? Up 3 seconds ? 6379/tcp ? redis-server

5.創(chuàng)建flask container

注意:--env REDIS_HOST=redis-server 這樣app.py中的REDIS_HOST就可以訪問redis服務(wù)了!

$ docker container run -d --network demo-network --name flask-demo --env REDIS_HOST=redis-server -p 5000:5000 flask-demo

6.查看頁面

打開瀏覽器訪問http://127.0.0.1:5000

應(yīng)該能看到類似下面的內(nèi)容,每次刷新頁面,計(jì)數(shù)加1

Hello Container World! I have been seen 36 times and my hostname is 925ecb8d111a.

7.總結(jié)

如果把上面的步驟合并到一起,成為一個部署腳本:

# prepare image
docker image pull redis
docker image build -t flask-demo .

# create network
docker network create -d bridge demo-network

# create container
docker container run -d --name redis-server --network demo-network redis
docker container run -d --network demo-network --name flask-demo --env REDIS_HOST=redis-server -p 5000:5000 flask-demo

原文鏈接:https://blog.csdn.net/weixin_48447848/article/details/122612582

欄目分類
最近更新