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

docker部署flask并迁移至内网

需要直接使用的可以使用下面的链接:

通过网盘分享的文件:docker_flask.tar
链接: https://pan.baidu.com/s/163ocPFw8cqfXgVXeejv36g?pwd=qxqm 提取码: qxqm
来自百度网盘超级会员v6的分享

外网部署docker版flask

目录结构
./miniconda-docker/
├── docker-compose.yml
├── Dockerfile
└── workspace
1. 更新后的 docker-compose.yml(无 version 字段)
services:miniconda:build: .container_name: miniconda_appports:- "5000:5000"volumes:- ./workspace/app.py:/workspace/app.py  # 关键挂载- ./workspace:/workspaceenvironment:FLASK_APP: app.pyFLASK_ENV: development
2. 优化后的 Dockerfile
FROM ubuntu:20.04# 设置环境变量
ENV DEBIAN_FRONTEND=noninteractive \PATH="/opt/conda/bin:$PATH" \CONDA_DIR="/opt/conda"# 安装基础依赖
RUN apt-get update && apt-get install -y \wget \bzip2 \ca-certificates \&& rm -rf /var/lib/apt/lists/*# 下载并安装 Miniconda(清华源)
RUN wget -q https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh -O miniconda.sh && \bash miniconda.sh -b -p $CONDA_DIR && \rm miniconda.sh# 接受Anaconda许可协议
RUN conda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/main && \conda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/r# 配置全量清华源
RUN conda config --remove-key channels && \conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ && \conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ && \conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/ && \conda config --set show_channel_urls yes# 配置pip清华源
RUN mkdir -p /root/.pip && \echo '[global]\n\
index-url = https://pypi.tuna.tsinghua.edu.cn/simple\n\
trusted-host = pypi.tuna.tsinghua.edu.cn' > /root/.pip/pip.conf# 创建Python环境并安装依赖
RUN conda create -n python311 python=3.11 -y && \/opt/conda/envs/python311/bin/pip install numpy flask pandas# 设置工作目录
WORKDIR /workspace
COPY app.py .# 启动命令
CMD ["bash", "-c", "source /opt/conda/bin/activate python311 && flask run --host=0.0.0.0"]
3. 验证用的 app.py
from flask import Flask, jsonify
import numpy as np
import pandas as pdapp = Flask(__name__)app.json.ensure_ascii = False
@app.route('/')
def hello():# 生成测试数据array = np.array([1, 2, 3])df = pd.DataFrame({'列A': [1, 2], '列B': [3, 4]})# 构造响应数据response = {"服务状态": "Flask服务运行正常!","numpy示例数组": array.tolist(),"pandas数据表": {"列名称": list(df.columns),"数据内容": df.to_dict(orient='records')},"环境信息": {"Python版本": "3.11","依赖包版本": {"numpy": np.__version__,"pandas": pd.__version__,"flask": "2.3.2"}}}return jsonify(response)  # 使用jsonify保持JSON格式if __name__ == '__main__':app.run(host='0.0.0.0', debug=True)

使用说明

  1. 创建目录和文件:
mkdir -p miniconda-docker/workspace
cd miniconda-docker
touch docker-compose.yml Dockerfile app.py
  1. 将上述内容写入对应文件

  2. 构建并启动:

docker compose up -d --build
  1. 验证服务:
curl http://localhost:5000
# 或浏览器访问 http://localhost:5000

方案特点

  1. 完全兼容新版本:移除 version 字段,适配最新 Docker Compose
  2. 最小化构建:每个 RUN 指令都清理缓存
  3. 国内优化:全程使用清华源加速
  4. 环境隔离:在独立 conda 环境中安装 Python 和依赖
  5. 生产就绪:适合直接部署到生产环境

常见问题处理

如果遇到构建问题,可以尝试:

# 彻底清理旧构建
docker compose down --rmi all# 重新构建
docker compose build --no-cache

迁移至内网

以下是完整的容器导出为镜像并部署到内网的步骤:


1. 导出当前容器为镜像

# 查看运行中的容器ID
docker ps# 将容器提交为镜像(推荐使用--change参数固化配置)
docker commit \--change='CMD ["bash", "-c", "source /opt/conda/bin/activate python311 && flask run --host=0.0.0.0"]' \--change='ENV PATH=/opt/conda/envs/python311/bin:$PATH' \979444076b82 my_flask_app:1.0

2. 验证新镜像

# 查看新镜像
docker images | grep my_flask_app# 测试运行
docker run -d -p 5000:5000 --name test_flask my_flask_app:1.0
curl http://localhost:5000

3. 导出镜像文件(两种方式任选)

方式一:保存为压缩包(推荐)
docker save my_flask_app:1.0 | gzip > my_flask_app_1.0.tar.gz
方式二:导出为容器快照
docker export 979444076b82 > my_flask_container.tar

4. 内网部署步骤

在内网机器上操作:
# 1. 传输镜像文件到内网(需用U盘/内部文件服务)
scp my_flask_app_1.0.tar.gz user@internal-server:/path/# 2. 加载镜像
gunzip -c my_flask_app_1.0.tar.gz | docker load# 3. 运行容器
docker run -d \-p 5000:5000 \-v /path/to/app_data:/workspace \--name flask_prod \my_flask_app:1.0

5. 生产环境增强配置(可选)

创建 docker-compose.prod.yml
version: '3.8'
services:flask_app:image: my_flask_app:1.0restart: alwaysports:- "5000:5000"volumes:- /data/flask_app:/workspaceenvironment:FLASK_ENV: productionTZ: Asia/Shanghai
启动命令
docker-compose -f docker-compose.prod.yml up -d

关键注意事项

  1. 路径固化

    • 确保容器内所有路径使用绝对路径(如 /workspace/app.py
    • 检查挂载卷路径是否存在
  2. 依赖检查

    # 进入容器检查环境
    docker exec -it flask_prod /opt/conda/envs/python311/bin/pip list
    
  3. 防火墙设置

    • 内网机器需开放5000端口
    • 建议配合Nginx反向代理
  4. 离线包备份(针对极端内网环境):

    # 导出conda环境配置
    docker exec 979444076b82 /opt/conda/envs/python311/bin/pip freeze > requirements.txt
    

排错指南

如果部署失败:

  1. 检查镜像完整性:

    docker run -it --rm my_flask_app:1.0 bash -c "python -c 'import flask; print(flask.__version__)'"
    
  2. 查看容器日志:

    docker logs -f flask_prod
    

通过以上步骤,您可以将开发好的Flask应用完整迁移到内网环境。如需更高安全性,建议:

  • 使用私有Docker仓库(如Harbor)
  • 构建时删除缓存(docker build --no-cache
  • 使用多阶段构建减小镜像体积
http://www.lryc.cn/news/625093.html

相关文章:

  • 前端面试通关:Cesium+Three+React优化+TypeScript实战+ECharts性能方案
  • css word-pass
  • 强化学习-CH2 状态价值和贝尔曼等式
  • 【新手易混】find 命令中 -perm 选项的知识点
  • Unity2022打包安卓报错的奇葩问题
  • 云原生俱乐部-docker知识点归纳(1)
  • 2-4〔O҉S҉C҉P҉ ◈ 研记〕❘ 漏洞扫描▸AWVS(WEB扫描)
  • PyTorch数据处理工具箱详解|深入理解torchvision与torch.utils.data
  • 嵌入式设备Lwip协议栈实现功能
  • 28、企业安防管理(Security)体系构建:从生产安全到日常安保的全方位防护
  • 如何将 LM Studio 与 ONLYOFFICE 结合使用,实现安全的本地 AI 文档编辑
  • 【完整源码+数据集+部署教程】海洋垃圾与生物识别系统源码和数据集:改进yolo11-RVB
  • 遥感机器学习入门实战教程 | Sklearn 案例②:PCA + k-NN 分类与评估
  • 在开发后端API的时候,哪些中间件比较实用
  • 【音视频】ISP能力
  • python实现pdfs合并
  • [矩阵置零]
  • 【HarmonyOS】应用设置全屏和安全区域详解
  • C++/Java双平台表单校验实战:合法性+长度+防重复+Tab顺序四重守卫
  • html页面打水印效果
  • Android使用Kotlin协程+Flow实现打字机效果
  • 【React Hooks】封装的艺术:如何编写高质量的 React 自-定义 Hooks
  • 构建者设计模式 Builder
  • 开源im即时通讯软件开发社交系统全解析:安全可控、功能全面的社交解决方案
  • 使用 Zed + Qwen Code 搭建轻量化 AI 编程 IDE
  • FlycoTabLayout CommonTabLayout 支持Tab选中字体变大 选中tab的加粗效果首次无效的bug
  • Redis-缓存-穿透-布隆过滤器
  • [Linux]学习笔记系列 --[mm][list_lru]
  • bun + vite7 的结合,孕育的 Robot Admin 【靓仔出道】(十三)
  • DELL服务器 R系列 IPMI的配置