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: 映射到外部端口(访问时使用)
相关推荐
叮当喵是mao31 分钟前
python基础知识(七)——写入excel
android·python·excel
卡卡_R-Python35 分钟前
关联度分析、灰色预测GM(1,1)、GM(1,1)残差模型——基于Python实现
开发语言·python
醒过来摸鱼38 分钟前
Golang时间操作
开发语言·python·golang
吖吖耶33343 分钟前
【Python爬虫】Scrapy框架实战
爬虫·python·scrapy
宋一诺331 小时前
机器学习—再次决定下一步做什么
人工智能·python·机器学习
FellAveal1 小时前
【机器学习】如何配置anaconda环境(无脑版)
python·机器学习·anaconda
daizikui1 小时前
docker使用阿里云容器镜像服务下载公共镜像
阿里云·docker·容器
喝哈喝哈1 小时前
pycharm中配置pyqt5
python·qt·pycharm
lu云之东2 小时前
Harbor2.11.1生成自签证和配置HTTPS访问
网络协议·http·docker·https·harbor
Dreams°1232 小时前
【大数据测试ETL:从0-1实战详细教程】
大数据·数据仓库·python·单元测试·etl