当前位置: 首页 > 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.dtcms.com/a/338003.html

相关文章:

  • Zephyr下控制ESP32S3的GPIO口
  • RK3568 NPU RKNN(六):RKNPU2 SDK
  • FlycoTabLayout CommonTabLayout 支持Tab选中字体变大 选中tab的加粗效果首次无效的bug
  • 探索性测试:灵活找Bug的“人肉探测仪”
  • 前端 大文件分片下载上传
  • 宝塔面板多Python版本管理与项目部署
  • excel表格 Vue3(非插件)
  • day25|学习前端js
  • Linux: RAID(磁盘冗余阵列)配置全指南
  • 损失函数与反向传播 小土堆pytorch记录
  • FPGA-Vivado2017.4-建立AXI4用于单片机与FPGA之间数据互通
  • 计算机组成原理(9) - 整数的乘除法运算
  • js计算两个经纬度之间的角度
  • Python字符串连接与合并工程实践:从基础到高性能解决方案
  • 【笔记】位错的定义和分类
  • B站 韩顺平 笔记 (Day 22)
  • 【人工智能】2025年AI代理失控危机:构建安全壁垒,守护智能未来
  • 规避(EDR)安全检测--避免二进制文件落地
  • 面向对象爬虫进阶:类封装实现高复用爬虫框架​
  • DP-v2.1-mem-clean学习(3.6.9-3.6.12)
  • Python 爬虫实战:玩转 Playwright 跨浏览器自动化(Chromium/Firefox/WebKit 全支持)
  • 嵌入式第三十二课!!线程间的同步机制与进程间的通信(IPC机制)
  • PotPlayer使用AI生成字幕和API实时翻译
  • Redis中LRU与LFU的底层实现:字节级的精巧设计
  • 树莓派安装python第三方库如keras,tensorflow
  • day35-负载均衡
  • 智能化合同处理与知识应用平台:让合同从 “管得住” 到 “用得好”
  • C15T3
  • openssl加密里面的pem格式和rsa有什么区别?
  • 财务分析师如何提升自身专业能力:突破职业瓶颈的五年进阶规划