docker操作包括使用docker制作为接口

news/2025/9/19 11:05:34/文章来源:https://www.cnblogs.com/1014040868lyn/p/19097317

 

Docker 化 Flask OCR 应用指南

1. 创建必要的文件

在你的 Flask 应用项目根目录下,你需要创建以下文件:

1.1 Dockerfile

这是一个文本文件,包含了构建 Docker 镜像所需的所有指令

 1 # 使用官方 Python 3.10 (Python 3.13)精简版作为基础镜像,减小镜像体积
 2 FROM python:3.10-slim
 3 
 4 # 设置工作目录
 5 WORKDIR /app
 6 
 7 # 复制依赖文件清单
 8 COPY requirements.txt .
 9 
10 # 安装 Python 依赖
11 # 使用清华 PyPI 镜像加速下载,并清理缓存以减小镜像层大小
12 RUN pip install --no-cache-dir -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
13 
14 # 复制应用代码到容器中
15 COPY . .
16 
17 # 创建上传目录并确保适当的权限
18 RUN mkdir -p uploads && chmod 755 uploads
19 
20 # 暴露 Flask 应用运行的端口
21 EXPOSE 5000
22 
23 # 设置环境变量,确保 Python 输出直接显示在容器日志中
24 ENV PYTHONUNBUFFERED=1
25 
26 # 设置容器启动时执行的命令
27 CMD ["python", "app.py"]

1.2 requirements.txt

可以使用 pip freeze > requirements.txt命令生成当前环境的完整依赖清单。

1.3 .dockerignore(可选但推荐)

避免将不必要的文件复制到 Docker 镜像中,类似于 .gitignore

 1 .git
 2 .gitignore
 3 __pycache__
 4 *.pyc
 5 *.pyo
 6 *.pyd
 7 .env
 8 venv/
 9 env/
10 .DS_Store
11 README.md
.gitignore

2. 构建 Docker 镜像

在包含 Dockerfile 的目录中,打开终端执行以下命令:  
# 构建镜像,-t 参数给镜像命名
docker build -t flask-ocr-app .

 

这个过程会
  1. 1.下载 Python 3.10 slim 基础镜像
  2. 2.安装 requirements.txt中指定的依赖
  3. 3.将你的应用代码复制到镜像中
  4. 4.设置启动命令

3. 运行 Docker 容器

 

镜像构建完成后,运行容器:
 
1 # 运行容器
2 docker run -d -p 5000:5000 --name ocr-container flask-ocr-app

参数说明

-d: 在后台运行容器(守护模式)
-p 5000:5000: 将主机的 5000 端口映射到容器的 5000 端口
--name ocr-container: 给容器指定一个名称

 

 

4. 修改代码后重新构建服务

1.sudo docker stop flask-ocr-container 2>/dev/null || true   停止flask-ocr-container服务

2.sudo docker rm flask-ocr-container 2>/dev/null || true      删除flask-ocr-container服务

3.sudo docker run -d -p 5000:5000 --name flask-ocr-container flask-ocr-app:latest   重新映射端口

 

 

 sudo docker build --no-cache -t flask-ocr-app . 构建docker容器

sudo docker logs -f flask-ocr-container 查询容器flask-ocr-container 日志

sudo docker restart flask-ocr-container 重启容器flask-ocr-container

sudo docker ps -a | grep flask-ocr-container # 查看容器状态~

sudo docker exec flask-ocr-container netstat -tuln | grep :5000

sudo docker images ps -a 查看镜像

sudo docker  ps -a 查看容器

 

5. 可视化docker


通过 VNC + noVNC 在浏览器中访问(推荐 ✅)

1.创建并运行新容器,在构建时直接安装桌面环境和 VNC:

1 docker run -itd \
2   --name Documentrecognition \
3   -p 6111:80 \          # 将容器的80端口映射到宿主机的6111端口,用于noVNC网页访问
4   -p 5901:5901 \        # 可选:映射VNC端口,用于VNC客户端直接连接
5   ubuntu:22.04

进入容器并安装必要软件​:

 1 docker exec -it Documentrecognition /bin/bash
 2 
 3 # 在容器内执行以下命令
 4 apt update
 5 
 6 # 1. 安装轻量级桌面环境(例如 Xfce)和基础工具
 7 apt install -y xfce4 xfce4-goodies x11vnc xvfb firefox
 8 
 9 # 2. 安装 noVNC(让我们可以通过浏览器访问VNC)
10 apt install -y novnc websockify
11 
12 # 3. 设置VNC密码(这里以密码'password'为例,请务必修改!)
13 mkdir ~/.vnc
14 x11vnc -storepasswd password ~/.vnc/passwd

在容器内启动 VNC 和 noVNC 服务​:

 1 # 启动一个虚拟显示器并在后台运行VNC服务器
 2 Xvfb :1 -screen 0 1920x1080x24 &
 3 export DISPLAY=:1
 4 startxfce4 &
 5 
 6 # 启动VNC服务器,监听5901端口
 7 x11vnc -display :1 -forever -shared -rfbport 5901 -passwd password &
 8 
 9 # 启动noVNC,将VNC的5901端口映射到noVNC的6080端口
10 websockify -D --web=/usr/share/novnc/ 6080 localhost:5901 &

2. 通过浏览器访问

现在,打开你的浏览器,访问:

http://你的宿主机IP地址:6111/vnc.html

例如:http://192.168.1.100:6111/vnc.html

首次连接时需要输入之前设置的 VNC 密码,之后就能看到完整的 Ubuntu 桌面环境了!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/907709.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

BuildingSystemPlugin使用指南

使用自定义碰撞 1.启用Use Custom Overlay:2.修改Overlapping Box的BoxExtent来设置大小(不能设置Scale来设置大小):

openEuler 24.03 (LTS-SP2)安装mysql5.7.42

环境:OS:openEuler 24.03 (LTS-SP2)(安装时候没有图形界面的选择项可选)mysql:5.7.42 glib.2.17 操作系统下载https://www.openeuler.org/en/download/#openEuler%2024.03%20LTS%20SP2 查看系统glibc版本[root@localho…

Trae AI IDE与Gitee MCP深度整合:开启智能协作开发新时代

Trae AI IDE与Gitee MCP深度整合:开启智能协作开发新时代 在AI技术快速渗透软件开发领域的当下,字节跳动推出的Trae AI IDE凭借其创新的智能编码能力,正在重塑开发者的工作流程。这款国产AI编程工具通过深度整合Git…

【字节跳动】LLM大模型算法面试题:大模型 LLM的架构介绍? - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

LangChain 入门:从 0 到 1 搞懂 LLM 应用开发框架​

LangChain 入门:从 0 到 1 搞懂 LLM 应用开发框架​如果你常逛技术社区,大概率听过 “大语言模型(LLM)能做很多事”—— 写文案、答问题、编代码,但真要把它放进实际业务里,比如给公司做个智能客服、给团队搭个文…

cpu wa

cpu wa👌 我明白了,你需要的是把 两个文档合并:逐指标展开分析逻辑(cycles/instructions、context-switches、page-faults、syscalls 等 → 如何推导分支)。典型 %wa 场景说明(本地块设备、NFS/iSCSI、Swap、虚…

解码C语言指针

一、指针的定义与本质 1. 指针是什么? 指针是一种 存储变量内存地址 的特殊变量。所有数据存储在内存中,每个内存单元都有唯一地址(编号),指针通过记录地址实现对数据的间接访问。 2. 指针的核心作用直接操作内存…

windows下Qt调用fftw库

环境:Windows 11 Qt:6.8.3 程序中需要用到fftw库来进行傅里叶变换,通过网上的资料,配置了很久一直没成功,后来发下还是没有配置正确,最后终于成功,顺便记录一下 1.下载fftw3.3.5 http://www.fftw.org/install/…

Gitee崛起:国产代码托管平台如何接棒CODING成为开发者新宠

Gitee崛起:国产代码托管平台如何接棒CODING成为开发者新宠 随着腾讯云宣布CODING DevOps系列产品逐步停止服务,中国开发者生态正在经历一次重要的基础设施迁移。在这场变革中,开源中国旗下Gitee平台凭借其十年本土化…

flask下的MySQL增查配置

flask下的MySQL增删配置 添加数据 @app.route(/add) def add_data():u = UserInfo()new_user1 = UserInfo(nickname=flask_test1, mobile=13888888888, signature=理想, create_time=datetime.now(), role_id=1)new_us…

AT_agc056_c [AGC056C] 01 Balanced

不难设 \(d_i\) 为前缀 \(i\) 中 \(0/1\) 数量的差值,显然有两个限制:\(d_{l - 1} = d_r\) \(|d_{i - 1} - d_i| \le 1\)可以差分约束,事实上,直接跑差分约束就可以得到字典序最小的构造了,这也算本题的价值之一。…

高效智能(到家服务)管理平台解决方案

一、项目背景 随着互联网技术的快速发展以及服务行业的数字化转型,传统的线下服务模式逐渐向线上迁移。为了提升服务效率、优化用户体验,并满足用户对快速响应和精准服务的需求,本项目旨在打造一个高效、智能的服务…

centos7卸载openjdk-java11

[root@localhost ~]# rpm -qa|grep -i openjdk java-11-openjdk-headless-11.0.23.0.9-2.el7_9.x86_64 java-11-openjdk-devel-11.0.23.0.9-2.el7_9.x86_64 java-11-openjdk-11.0.23.0.9-2.el7_9.x86_64# 卸载命令, yu…

jenkins的安装和配置

windows 安装 jenkins 自动化构建部署至linux服务器上 一、环境准备1、git安装环境 参考链接 https://www.cnblogs.com/yuarvin/p/12500038.html 2、maven安装环境,包括jdk环境安装 参考链接 https://www.cnblogs.com…

从MMoE到PLE:读懂多任务学习架构的渐进式演化

从MMoE到PLE:读懂多任务学习架构的渐进式演化从MMoE到PLE:读懂多任务学习架构的渐进式演化 引言 在多任务学习(MTL)领域,MMoE(Multi-gate Mixture-of-Experts)无疑是一个里程碑式的模型,它通过巧妙的软参数共享…

在VSCode中设置Qt编写环境

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

深入解析:【Day 52 】Linux-Jenkins

深入解析:【Day 52 】Linux-Jenkinspre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monac…

本土开发者如何选择代码管理工具?Gitee与GitHub深度对比解析

本土开发者如何选择代码管理工具?Gitee与GitHub深度对比解析 在数字化转型浪潮下,代码管理工具已成为开发者日常工作的必备基础设施。面对国内外众多选择,新手开发者往往陷入选择困难。本文将从本土化开发视角,深入…

MES系统核心组件

核心总览 在半导体工厂中,MES(Manufacturing Execution System,制造执行系统) 是最高层的指挥中枢,它负责管理生产线上从投料开始到成品产出的全部作业流程。而其他各种“XX Server”则是MES这个大脑指挥下的专业…

易基因:多组学整合分析揭示DNA甲基化与基因组改变在肿瘤进化中的协同驱动机制|Nat Genet/IF29重磅

大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因。 近日,伦敦大学学院癌症研究所Nnennaya Kanu和弗朗西斯克里克研究所Peter Van Loo团队合作在国际遗传学Top期刊《自然遗传学》(Nature Genetics)发…