当前位置: 首页 > news >正文

docker_快速部署flask架构下的web容器

保证你的机器上安装了docker 并正常启动可参考
阿里镜像站docker

flask项目结构如下:

my-flask-app/
├── Dockerfile
├── app.py
├── requirements.txt
└── config/└── settings.py

my-flask-app/
这是你的项目根目录,包含了所有与 Flask 应用相关的文件和配置。
Dockerfile
这个文件包含了构建 Docker 镜像所需的指令和配置。Dockerfile 定义了如何从基础镜像开始,逐步添加应用程序所需的所有组件(例如安装依赖、复制文件、设置环境变量等)。

# 基于 centos:7 作为基础镜像
FROM centos:7# 设置维护者信息
LABEL maintainer="your_email@example.com"# 更换为阿里云的 CentOS 镜像源
RUN mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup && \curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo && \yum clean all && yum makecache# 安装 Python 和 pip
RUN yum -y update && \yum -y install epel-release && \yum -y install python3 python3-pip && \yum clean all# 设置工作目录
WORKDIR /app# 复制本地的 requirements.txt 到镜像中的 /app 目录
COPY . /app# 查看 requirements.txt 内容,确认是否存在
RUN cat /app/requirements.txt# 安装 Python 依赖
# 使用阿里云的 Python 镜像源
RUN pip3 install --no-cache-dir -r /app/requirements.txt -i https://mirrors.aliyun.com/pypi/simple/# 暴露 Flask 应用的端口(例如5000)
EXPOSE 5000# 设置启动命令
CMD ["python3", "app.py"]

基础镜像:使用 FROM 指令指定基础镜像。
维护者信息:使用 LABEL 指令添加镜像的元数据。
安装软件:使用 RUN 指令执行命令来安装软件包。
复制文件:使用 COPY 或 ADD 指令将文件复制到镜像中。
设置工作目录:使用 WORKDIR 指令指定工作目录。
设置环境变量:使用 ENV 指令设置环境变量。
暴露端口:使用 EXPOSE 指令声明容器的网络端口。
运行命令:使用 CMD 或 ENTRYPOINT 指令定义容器启动时执行的命令。

app.py
这是你的 Flask 应用的主要代码文件。Flask 是一个轻量级的 Python Web 框架,app.py 通常包含应用的主要逻辑、路由处理和其他功能实现。

from flask import Flaskapp = Flask(__name__)@app.route('/')
def hello():return "Hello, Docker World!"if __name__ == "__main__":app.run(host="0.0.0.0", port=5000)

requirements.txt
这个文件列出了你的 Flask 应用所需的所有 Python 包及其版本。Dockerfile 会使用这个文件来安装应用所需的依赖。比如,文件可能包含:

Flask==2.0.1
gunicorn==20.1.0

config/
这个目录通常包含配置文件,供 Flask 应用使用。配置文件可以包括数据库设置、API 密钥、应用参数等。
settings.py
这是一个配置文件,通常用于存储应用的配置设置,比如数据库连接信息、应用环境(开发、测试、生产)等。Flask 应用可以从这个文件读取配置,来调整其行为。

构建镜像
在包含Dockerfile目录下 : 末尾的 . 表示当前目录下 通过Dockerfile文件来构建一个名为my-flask的容器

[root@localhost my-flask-app]# docker build -t my-flask .
[+] Building 18.2s (12/12) FINISHED                                                                                                                            docker:default=> [internal] load build definition from Dockerfile                                                                                                                     0.0s=> => transferring dockerfile: 1.09kB                                                                                                                                   0.0s=> [internal] load metadata for docker.io/library/centos:7                                                                                                              2.7s=> [internal] load .dockerignore                                                                                                                                        0.0s=> => transferring context: 2B                                                                                                                                          0.0s=> [1/7] FROM docker.io/library/centos:7@sha256:be65f488b7764ad3638f236b7b515b3678369a5124c47b8d32916d6487418ea4                                                        0.0s=> [internal] load build context                                                                                                                                        0.0s=> => transferring context: 643B                                                                                                                                        0.0s=> CACHED [2/7] RUN mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup &&     curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliy  0.0s=> CACHED [3/7] RUN yum -y update &&     yum -y install epel-release &&     yum -y install python3 python3-pip &&     yum clean all                                     0.0s=> CACHED [4/7] WORKDIR /app                                                                                                                                            0.0s=> [5/7] COPY . /app                                                                                                                                                    0.0s=> [6/7] RUN cat /app/requirements.txt                                                                                                                                  0.6s=> [7/7] RUN pip3 install --no-cache-dir -r /app/requirements.txt -i https://mirrors.aliyun.com/pypi/simple/                                                           14.8s=> exporting to image                                                                                                                                                   0.1s => => exporting layers                                                                                                                                                  0.1s => => writing image sha256:4836d2469ecf52ceab01d2338fc88f4c5cfdb4e59eca822d0d78e19214a04ca0# 查看
[root@localhost my-flask-app]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
my-flask     latest    4836d2469ecf   47 minutes ago   953MB
nginx        latest    39286ab8a5e1   4 weeks ago      188MB

构建容器

[root@localhost my-flask-app]# docker run -d -p 5000:5000 my-flask
a869bd32ff5471c1cb61df92c4322172d4f86dd474f1d04e82fbfdd426cc59ee
[root@localhost my-flask-app]# docker ps
CONTAINER ID   IMAGE      COMMAND            CREATED         STATUS         PORTS                                       NAMES
a869bd32ff54   my-flask   "python3 app.py"   7 seconds ago   Up 5 seconds   0.0.0.0:5000->5000/tcp, :::5000->5000/tcp   flamboyant_brattain

验证

浏览器输入:
http://localhost:5000/   应该可以看到app.py的输出内容

http://www.mrgr.cn/news/25014.html

相关文章:

  • 基于“硅基”的AI数字人要闻直播
  • 最小二乘估计
  • qt绘制时钟
  • QGIS 如何连接空间库,并实时编辑空间表?编辑后库表如何刷新,保证是最新数据?
  • 拱式桥安全结构健康监测解决方案
  • 机器学习 第14章 概率图模型
  • 【Linux 从基础到进阶】自动化部署工具(Jenkins、GitLab CI/CD)
  • 信息安全基础知识-1
  • shell脚本控制语句
  • 使用 SpEL 替换中文时出现了 java.lang.IllegalStateException: Cannot handle 错误
  • 蓄电池制造5G智能工厂物联数字孪生平台,推进制造业数字化转型
  • ICM20948 DMP代码详解(15)
  • 深入理解Docke工作原理:UnionFS文件系统详解
  • 生成式人工智能(Generative AI)
  • 【C++ 面试 - 新特性】每日 3 题(十一)
  • 【C++登堂入室】类与对象(上)
  • Python数据分析与可视化
  • python安装包的三种区别
  • 【文件包含】之日志文件注入
  • 稀土抗菌剂真的能抗菌吗?