Python?Flask?+?Redis?程序練習(xí)
兩個(gè)容器,一個(gè)flask-demo,一個(gè)是redis-server
在一個(gè)自定義網(wǎng)絡(luò)bridge,相互ping,不需要知道ip,只用名字就能ping通

1.程序準(zhǔn)備
準(zhǔn)備一個(gè)Python文件,名字為 app.py 內(nèi)容如下:
提供一個(gè)web服務(wù),可以訪問(wèn)地址,返回一個(gè)Hello Container World!..并且記錄訪問(wèn)的次數(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)備一個(gè)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)備一個(gè)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)建一個(gè)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)建一個(gè)叫 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就可以訪問(wèn)redis服務(wù)了!
$ docker container run -d --network demo-network --name flask-demo --env REDIS_HOST=redis-server -p 5000:5000 flask-demo
6.查看頁(yè)面
打開(kāi)瀏覽器訪問(wèn)http://127.0.0.1:5000
應(yīng)該能看到類(lèi)似下面的內(nèi)容,每次刷新頁(yè)面,計(jì)數(shù)加1
Hello Container World! I have been seen 36 times and my hostname is 925ecb8d111a.
7.總結(jié)
如果把上面的步驟合并到一起,成為一個(gè)部署腳本:
# 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
到此這篇關(guān)于Python Flask + Redis 程序練習(xí)的文章就介紹到這了,更多相關(guān)Python Flask + Redis 練習(xí)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python操作Redis數(shù)據(jù)庫(kù)的超詳細(xì)教程
- python?實(shí)現(xiàn)?redis?數(shù)據(jù)庫(kù)的操作
- python導(dǎo)入導(dǎo)出redis數(shù)據(jù)的實(shí)現(xiàn)
- 解決python-redis-lock分布式鎖的問(wèn)題
- python3使用python-redis-lock解決并發(fā)計(jì)算問(wèn)題
- python動(dòng)態(tài)網(wǎng)站爬蟲(chóng)實(shí)戰(zhàn)(requests+xpath+demjson+redis)
- Python訪問(wèn)Redis的詳細(xì)操作
- Python利用Redis計(jì)算經(jīng)緯度距離案例
相關(guān)文章
python3實(shí)現(xiàn)的zip格式壓縮文件夾操作示例
這篇文章主要介紹了python3實(shí)現(xiàn)的zip格式壓縮文件夾操作,結(jié)合實(shí)例形式分析了Python3基于zipfile模塊實(shí)現(xiàn)zip格式文件壓縮的相關(guān)操作技巧,需要的朋友可以參考下2019-08-08
基于Python編寫(xiě)一個(gè)DOS命令輔助工具
在日常系統(tǒng)管理和維護(hù)工作中,執(zhí)行DOS(Disk?Operating?System)命令是一項(xiàng)必不可少的任務(wù),下面我們就來(lái)看看如何使用Python編寫(xiě)一個(gè)簡(jiǎn)單的DOS命令輔助工具,簡(jiǎn)化系統(tǒng)管理任務(wù)吧2024-01-01
關(guān)于torch.scatter與torch_scatter庫(kù)的使用整理
這篇文章主要介紹了關(guān)于torch.scatter與torch_scatter庫(kù)的使用整理,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09
Python機(jī)器學(xué)習(xí)工具scikit-learn的使用筆記
這篇文章主要介紹了Python機(jī)器學(xué)習(xí)工具scikit-learn的使用筆記,幫助大家更好的理解和使用python,感興趣的朋友可以了解下2021-01-01
Python代碼顯得Pythonic(區(qū)別于其他語(yǔ)言的寫(xiě)法)
這篇文章主要介紹了Python代碼顯得Pythonic(區(qū)別于其他語(yǔ)言的寫(xiě)法),對(duì)于字符串連接,相比于簡(jiǎn)單的+,更pythonic的做法是盡量使用%操作符或者format函數(shù)格式化字符串,感興趣的小伙伴和小編一起進(jìn)入文章了解更詳細(xì)相關(guān)知識(shí)內(nèi)容吧2022-02-02
Python使用requirements.txt和pip打包批量安裝的實(shí)現(xiàn)
本文主要介紹了Python使用requirements.txt和pip打包批量安裝的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02

