Flask总结
Faslk是一个Web框架, 可以用于提供服务
流程
-
导入Flask
-
实例化Flask对象
-
创建路由并返回内容, 页面或具体数据
-
在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: 映射到外部端口(访问时使用)