Flask服务封装+Docker服务部署

Flask总结

Faslk是一个Web框架, 可以用于提供服务

流程

  1. 导入Flask

  2. 实例化Flask对象

  3. 创建路由并返回内容, 页面或具体数据

  4. 在main函数中调用Flask对象.run方法, 可以指定端口号和监听地址等

示例代码

复制代码
from flask import Flask, request, json, Response
from dm02_model_train_pred import my_model_predict
​
app = Flask(__name__)
app.json.ensure_ascii = False
​
​
@app.route('/email_handle', methods=['POST'])
def email_handler():
    # 获取请求数据
    request_json = request.get_json()   # 接受json数据
    print(request_json)
    data = request_json['content']  # 获取指定内容的数据
    print(data)
    data = my_model_predict(data)
​
    # 定义相应格式
    response_data = {
        'Status': 'success',
        'content': data
    }
    return Response(status=200, response=json.dumps(response_data, sort_keys=False))    # 返回json数据
​
​
if __name__ == '__main__':
    app.run(port=5000)

Docker总结

服务器安装Docker

★安装docker

复制代码
# 安装依赖工具 
# yum-utils提供yum-config-manager
# device mapper存储驱动程序需要device-mapper-persistent-data和lvm2。
yum install -y yum-utils device-mapper-persistent-data lvm2
​
# 配置镜像源, 我们使用的是阿里云的源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast
​
# 安装 Docker
yum install docker-ce docker-ce-cli containerd.io
​
# 卸载Docker
yum remove docker-ce docker-ce-cli containerd.io
rm -rf /var/lib/docker
rm -rf /var/lib/containerd

检验安装结果

复制代码
docker version

启动docker服务

复制代码
systemctl status docker     # 查看docker服务
systemctl start docker      # 启动docker服务
systemctl restart docker    # 重启docker服务
systemctl enable

镜像操作

Docker镜像(images)是可以被认为是构建容器的模板(系统镜像ISO文件), 一个镜像可以创建多个容器, 后续部署项目时需要有基础镜像. 用Docker基础镜像构建项目镜像后, 该镜像包含了运行容器所需的所有内容,包括代码、运行时、库、环境变量和配置文件等。

查看镜像

复制代码
docker images             # 查看所有镜像
docker images -q          # 只查看镜像的ID
docker images --no-trunc  # 显示镜像完整信息

搜索镜像

复制代码
docker search python
docker search python --no-trunc

★下载镜像

镜像下载命令

复制代码
docker pull 镜像名:版本      # 不指定版本(TAG), 默认使用latest
docker pull python:3.10

直接拉取镜像可能报错链接超时

复制代码
Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

需要配置或创建 /etc/docker/daemon.json, 在文件内加入会修改如下内容

复制代码
{
"registry-mirrors": ["https://docker.registry.cyou",
	"https://docker-cf.registry.cyou",
	"https://dockercf.jsdelivr.fyi",
	"https://docker.jsdelivr.fyi",
	"https://dockertest.jsdelivr.fyi",
	"https://mirror.aliyuncs.com",
	"https://dockerproxy.com",
	"https://mirror.baidubce.com",
	"https://docker.m.daocloud.io",
	"https://docker.nju.edu.cn",
	"https://docker.mirrors.sjtug.sjtu.edu.cn",
	"https://docker.mirrors.ustc.edu.cn",
	"https://mirror.iscas.ac.cn",
	"https://docker.rainbond.cc"]
}

配置后执行下面两条命令进行重新加载

复制代码
systemctl daemon-reload
systemctl restart docker

再次执行拉取镜像命令即可

复制代码
docker pull python:3.10

"""
(base) root@node1:/etc/docker# docker pull python:3.10
3.10: Pulling from library/python
b2b31b28ee3c: Pull complete 
c3cc7b6f0473: Pull complete 
2112e5e7c3ff: Pull complete 
af247aac0764: Downloading  149.5MB/211.3MB
920ce5d9169b: Waiting 
b54a94f4cba6: Waiting 
e06c8c5ca725: Waiting 
"""

等待拉取结束即可

运行/创建镜像

复制代码
docker run -it 镜像名:版本 程序(一般是/bin/bash)  # 交互式运行容器, 会进入容器内部
docker run -it --name=容器名 镜像名:版本 程序     # 指定容器的名字
docker run -itd 镜像名:版本 程序                 # 后台运行容器, 不会进入容器

删除容器

复制代码
docker rmi -f 镜像名
docker rmi -f 镜像ID
docker rmi -f $(docker images -qa)      # 删除所有镜像

★保存镜像

复制代码
docker save 镜像名:版本 -o xxx.tar
​
"""
[root@bogon ~]# docker save alpine:latest -o myalpine.tar
[root@bogon ~]# ls
anaconda-ks.cfg  myalpine.tar
"""

加载镜像

复制代码
docker load -i xxx.tar
"""
[root@bogon ~]# docker load -i myalpine.tar
24302eb7d908: Loading layer [==================================================>]  5.811MB/5.811MB
​
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
alpine       latest    e66264b98777   3 weeks ago    5.53MB
centos       latest    5d0da3dc9764   9 months ago   231MB
"""

容器操作

容器是docker镜像运行的实体**(相当于将系统安装电脑上)**

复制代码
# 1. 查看容器
docker ps       # 查看正在运行的容器实例
docker ps -a    # 查看正在运行或者已停止的容器实例
​
# 2. 运行容器
docker start 容器ID     # 启动容器
docker restart 容器ID   # 重启容器
​
# 3. 停止容器
docker stop 容器ID
​
# 4. 删除容器
docker rm -f 容器ID              # 删除指定容器
docker rm -f $(docker ps -qa)   # 删除所有容器
​
# 5. 进入容器
# attach 退出终端会导致容器停止
# exec 不会导致容器停止
docker attach 容器ID
docker exec -it 容器ID /bin/bash
​
# 6. 容器导出
docker export 容器ID > xxx.tar
​
# 7. 容器导入
docker import xxx.tar xxx:tag

具体项目部署

源文件上传

将本地要上传的文件夹上层目录, 在cmd窗口执行如下命令

复制代码
scp -r 本地文件路径 root@服务器IP:服务器文件路径

编写Dockerfile

文件名称只能是Dockerfile, 放到和项目文件夹路径的同级目录内

项目路径: /temp/app

Dockerfile路径: /temp

复制代码
# 继承的基础镜像
FROM python:latest
MAINTAINER "wechat:chinesecpp, email:chinacpp@hotmail.com"
​
# 安装 app 需要的 Python 包
RUN pip install pandas flask scikit-learn jieba zhconv torch==2.5.1 -i https://pypi.tuna.tsinghua.edu.cn/simple
​
# 设置工作目录
WORKDIR /root/app
​
# COPY 命令使用的是相对路径
COPY app/ /root/app
​
# 显式声明容器服务监听的端口
EXPOSE 5000
​
# 当启动容器时默认执行的命令
CMD ["python", "app.py"]

构建Docker镜像

复制代码
docker build -t 镜像名(要构建的):1.0(自定义版本) .
最后的 . 表示寻找当前路径下的Dockerfile文件

使用镜像构建容器

复制代码
docker run -d -p 8000:5000 上一步构建的镜像:1.0
5000: 容器内监听端口
8000: 映射到外部端口(访问时使用)
相关推荐
郭庆汝1 小时前
pytorch、torchvision与python版本对应关系
人工智能·pytorch·python
思则变4 小时前
[Pytest] [Part 2]增加 log功能
开发语言·python·pytest
漫谈网络5 小时前
WebSocket 在前后端的完整使用流程
javascript·python·websocket
try2find6 小时前
安装llama-cpp-python踩坑记
开发语言·python·llama
博观而约取7 小时前
Django ORM 1. 创建模型(Model)
数据库·python·django
精灵vector8 小时前
构建专家级SQL Agent交互
python·aigc·ai编程
Zonda要好好学习9 小时前
Python入门Day2
开发语言·python
Vertira9 小时前
pdf 合并 python实现(已解决)
前端·python·pdf
太凉9 小时前
Python之 sorted() 函数的基本语法
python
项目題供诗9 小时前
黑马python(二十四)
开发语言·python