Docker部署Flask

首先在本地使用Flask部署模型,参考博客:Flask部署Keras模型 然后,将其部署到Docker当中,

安装centos镜像

# 安装镜像,为centos8
docker pull centos

# 进入镜像, 服务器的3344端口号映射到容器的5000端口
docker run -it -p 3344:5000 centos

# 中途退出镜像容器使用 CTRl + P + Q,使用exit退出会将已保存的内容清空

# 再次进入容器,从正在运行的端口进入
docker attach 容器id

# 新开一个端口进入容器
docker exec -it 容器id /bin/bash

# 查看正在运行的容器id
docker ps

所下载为最新版本centos 8

容器内环境安装

python3.6安装

注:若需安装其他版本的python,只需要将对应的版本号进行更改便可

# 安装依赖
yum install -y zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make

yum -y install wget

# 下载python3.6安装包,文件会下载到执行当前命令的目录中,故注意下载目录
wget https://www.python.org/ftp/python/3.6.4/Python-3.6.4.tgz

# 下载完后,进行解压
tar -zxvf Python-3.6.4.tgz

# 进入解压后的Python-3.6.4的文件夹,编译和安装Python 3.6.4
cd Python-3.6.4
 
./configure && make &&make install
python3.7安装
# 安装依赖
yum install -y zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make

yum -y install wget

# 下载python3.6安装包,文件会下载到执行当前命令的目录中,故注意下载目录
wget https://www.python.org/ftp/python/3.7.13/Python-3.7.13.tgz

# 下载完后,进行解压
tar -zxvf Python-3.7.13.tgz

# 进入解压后的Python-3.7.13的文件夹,编译和安装Python 3.7.13
cd Python-3.7.13
 
./configure --prefix=/usr/local/python3.7.13 --with-ssl
./configure --enable-optimizations
make && make install

# pip安装
yum -y install epel-release
yum -y install python3-pip

# 后验证是否成功
python3 -V
pip3 -V

安装完成之后,输入python3看看是否安装成功

第三方库安装

所需第三方库及版本信息统一放至txt文件内

Dockerfile flask应用 docker部署flask项目_Dockerfile flask应用

# 安装
pip3 install -r requirements.txt

注:centos8使用pip3
其中keras_contrib通过以下命令安装:

# 先安装git
yum install git

# 安装keras_contrib
pip3 install git+https://www.github.com/keras-team/keras-contrib.git
上面太慢,使用下面三步走更快:
git clone https://www.github.com/keras-team/keras-contrib.git
cd keras-contrib
python3 setup.py install

本地文件导入

# 将本地服务器文件导入容器中
docker cp sourcefile.txt ab8647a6dfc0:/root

# 将容器中文件拉入本地服务器
docker cp ab8647a6dfc0:/root/sourcefile.txt /root/ove

导入文件目录如下:

Dockerfile flask应用 docker部署flask项目_docker_02


只需启动server.py便可启动服务

启动服务

在运行环境安装好,项目文件导入完毕之后,启动服务

python3 server.py

Dockerfile flask应用 docker部署flask项目_Dockerfile flask应用_03

客户端调用

import requests
data = {
    "text": "NO MARK PLASTIC SCRAP - PET BOTTLE FLAKES WHITE NW. 131,022.00 KGS. 21DAYS FREE TIME DETENTION"
}
header = {"Content-Type": "application/json; charset=utf-8"}
url = "http://服务器IP地址:3344/predict?"
response = requests.post(url, json=data, headers=header)
res = response.json()
print(res)

该客户端调用只是本人的实践demo,不同项目中的 url 不同

将容器封装成镜像

在顺利完成以上环节后,使用 CTRL + P + Q 退出当前容器。
:不要使用 exit 命令退出,否则会导致之前的配置全部消失!!!
将容器进行封装,供后续直接调用。

docker commit -a "Ove" -m "HG_NER" ab8647a6dfc0 flask_hgner:v1

封装好后,只需要使用如下命令便可进入相同的Docker环境

docker run -it -p 3344:5000 flask_hgner:V1

添加sh文件

添加sh文件,方便以后端运行容器的方式启动服务,即无需进入容器以交互的方式启动服务,直接启动容器时便一道开启服务。
首先,在/root/目录下添加ner_run.sh文件,

python3 /root/config/server.py

然后,将容器封装成镜像文件
运行下面命令便可启动服务

docker run -d -p 3355:5000 flask_hgner:v3 bash "/root/ner_run.sh"

镜像打包保存至本机

docker save -o my_flask_hgner.tar flask_hgner:V1

镜像从本地加载

docker load<my_flask_hgner.tar

报错问题

  1. CentOs 8 使用 yum install python-pip 安装报错 No match for argument: python-pip 错误:没有任何匹配: python-pip
    解决:Centos 8已经换成python3 使用该命令解决yum install python3-pip
  2. 需要安装TensorFlow,遇到库grpcio安装不了的问题:
    python3 -m pip install --upgrade setuptools
    pip3 install --no-cache-dir --force-reinstall -Iv grpcio==<version_number>
  3. keras保存的h5、hdf5模型,加载时出现“AttributeError: ‘str‘ object has no attribute ‘decode‘ “