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_app
    ports:
      - "5000:5000"
    volumes:
      - ./workspace/app.py:/workspace/app.py  # 关键挂载
      - ./workspace:/workspace
    environment:
      FLASK_APP: app.py
      FLASK_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 pd

app = 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.0
    restart: always
    ports:
      - "5000:5000"
    volumes:
      - /data/flask_app:/workspace
    environment:
      FLASK_ENV: production
      TZ: 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
  • 使用多阶段构建减小镜像体积
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BTU_YC

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值