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:[email protected]" # 安装 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: 映射到外部端口(访问时使用)