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

Docker篇6-项目app.py和flask_app.service配置和映射到docker中

假设你已经有一个简单的 app.py(Flask 后端)和 flask_app.service(系统服务配置,用于在 Ubuntu 上直接启动服务),现在需要将其迁移到 Docker 中运行。下面是完整的步骤和配置示例:

前提条件

已有文件:

  1. app.py(Flask 应用)

    python

    运行

    from flask import Flask
    app = Flask(__name__)@app.route('/')
    def hello():return "Hello from Docker!"if __name__ == '__main__':# 注意:Docker 中需要监听 0.0.0.0(允许外部访问),端口用 5000app.run(host='0.0.0.0', port=5000)
    
  2. flask_app.service(原系统服务配置,用于对比,迁移后可弃用)

    ini

    [Unit]
    Description=Flask App Service
    After=network.target[Service]
    User=ubuntu
    WorkingDirectory=/home/ubuntu/myapp
    ExecStart=/home/ubuntu/myapp/venv/bin/python app.py
    Restart=always[Install]
    WantedBy=multi-user.target
    

步骤 1:创建 Docker 相关配置文件

需要新增 2 个文件,让 Docker 能打包和运行应用:

1. requirements.txt(列出依赖,必选)

Flask 应用需要的依赖,避免手动安装:

txt

flask==2.0.1  # 你的 Flask 版本
2. Dockerfile(构建镜像的脚本,核心)

定义如何打包应用到 Docker 镜像:

dockerfile

# 基础镜像:用 Python 官方镜像(Linux 环境,和 Ubuntu 兼容)
FROM python:3.9-slim# 设置工作目录(容器内的目录,类似 Ubuntu 中的 /home/ubuntu/myapp)
WORKDIR /app# 复制依赖文件到容器,先复制 requirements.txt 可利用缓存优化
COPY requirements.txt .# 安装依赖(类似本地 pip install)
RUN pip install --no-cache-dir -r requirements.txt# 复制应用代码到容器(当前目录的所有文件,包括 app.py)
COPY . .# 容器启动时执行的命令(替代 flask_app.service 中的 ExecStart)
CMD ["python", "app.py"]

步骤 2:构建 Docker 镜像

在 Ubuntu 服务器上,进入项目目录(包含 app.pyDockerfilerequirements.txt),执行以下命令构建镜像:

bash

# 构建镜像,命名为 flask-app,版本为 v1
docker build -t flask-app:v1 .
  • 执行成功后,用 docker images 可看到构建好的镜像。

步骤 3:运行 Docker 容器(替代系统服务)

用以下命令启动容器,替代原来的 systemctl start flask_app

bash

# 启动容器,映射主机端口 80 到容器端口 5000(容器内 app.py 监听 5000)
docker run -d \--name my-flask-container \  # 容器名,类似服务名-p 80:5000 \                 # 端口映射(主机端口:容器端口)--restart always \           # 类似服务的 Restart=always,容器崩溃自动重启flask-app:v1                 # 基于哪个镜像启动
  • 此时访问服务器的 http://服务器IP 即可看到 "Hello from Docker!"。

关键对比:Docker 方式 vs 系统服务方式

功能原系统服务(flask_app.service)Docker 方式
启动命令systemctl start flask_appdocker start my-flask-container
停止命令systemctl stop flask_appdocker stop my-flask-container
开机自启systemctl enable flask_app启动时加 --restart always
日志查看journalctl -u flask_appdocker logs my-flask-container
环境隔离依赖系统全局环境,可能冲突完全隔离,依赖打包在镜像中
端口配置在 app.py 中硬编码,需手动管理冲突通过 -p 参数映射,灵活避免冲突

后续操作

  • 如果修改了 app.py,需要重新构建镜像并重启容器:

    bash

    docker build -t flask-app:v2 .  # 构建新版本
    docker stop my-flask-container  # 停止旧容器
    docker rm my-flask-container    # 删除旧容器
    docker run -d --name my-flask-container -p 80:5000 --restart always flask-app:v2  # 启动新容器
    
  • 如需删除镜像(清理空间):

    bash

    docker rmi flask-app:v1  # 删除指定版本镜像(需先删除依赖该镜像的容器)
    

通过以上步骤,你就将原来的系统服务方式运行的 Flask 应用,迁移到了 Docker 中,实现了环境隔离和更灵活的部署。

http://www.dtcms.com/a/544500.html

相关文章:

  • 从零开始搭建 flask 博客(1)实验
  • 深入解析 Rust 解构模式:元组、结构体与枚举的精准拆解
  • 从零开始搭建 flask 博客实验(2)
  • 筑牢智算“地基”:华为以RAS理念重塑AIDC建设新模式
  • 跨网段耦合器助汽车零部件线实现PLC与MES跨网段互联
  • C#程序实现将Teradata的存储过程转换为Azure Synapse Dedicated SQL pool的存储过程
  • 小型购物网站模板设计网站页面教案
  • 免费购物网站淘宝建设网站首页
  • 成绩发布工具使用方法,附成绩分析教程
  • sward零基础学习:安装与配置
  • java求职学习day45
  • 【有源码】基于Hadoop与Spark的时尚精品店数据分析与可视化系统-基于多维度分析的零售时尚销售数据挖掘与可视化研究
  • Guava - Guava 基本工具 Preconditions、Optional
  • 北京的电商平台网站有哪些内容做网站要多少钱 知乎
  • 北京网站建设 shwl营销单页网站
  • RISC-V开源处理器实战:从Verilog RTL设计到FPGA原型验证
  • Flutter兼容性问题:Namespace not specified
  • MoreFixes
  • 工业厂区人数进出显示屏让排班更科学
  • 分数阶微积分有限差分法求解
  • 软件设计师知识点总结:面向对象技术(面向对象基础+UML)
  • 【案例教程】从入门到精通-AI支持下的-ArcGIS数据处理、空间分析、可视化及多案例综合应用
  • 低压配电系统的AI进化(系统篇)
  • 注册网站代码装修平台网络推广公司
  • vue需要学习的点
  • Kotlin保留小数位的三种方法
  • GXDE OS 25.2.1 更新了!引入 dtk6,修复系统 bug 若干
  • Java 反序列化中的 boolean vs Boolean 陷阱:一个真实的 Bug 修复案例
  • Kotlin 类和对象
  • 内核里常用宏BUG_ON/WARN_ON/WARN_ONCE