飞桨PaddleSpeech:智能语音-Python项目制作Docker镜像

目标简述

将Python项目发布到Linux环境并生成Docker镜像文件,可实现镜像文件导出,便于服务迁移;

一、准备项目源码

1.准备项目源码

1.1 参照上篇文章:
飞桨PaddleSpeech:智能语音示例环境搭建Win11
https://juejin.cn/post/7213499442182619193

1.2 下载完整源码请关注微信公众号【笑傲江湖工作室】,回复后获取【PaddleSpeechWeb】

2.导出依赖包列表

运行:pip install pipreqs
运行:pipreqs ./ --encoding=utf-8
然后会看到这个项目所有以来环境的requirements.txt了

3.打包项目

打包项目zip包,准备上传Linux服务器

二、安装依赖并生成docker镜像文件

1.准备Dockerfile文件

#基于的基础镜像
FROM python:3.9
#代码添加到code文件夹
ADD ./speech_server /code
#设置code文件夹是工作目录
WORKDIR /code
#安装支持
RUN pip3 install -r requirements.txt
EXPOSE 8010
CMD [“python”, “/code/main.py”]

2.下载离线依赖包

若安装依赖包缓慢或超时的情况较多时,可预先下载依赖包,或搭建镜像私服;
在Dockerfile中安装本地whl包:
将whl包上传到Dockerfile所在的目录,通过COPY命令将安装包拷贝到镜像中,再通过RUN执行安装命令即可;
官网地址:https://pypi.org/
依赖包较大,请酌情单独下载,回复后获取【PaddleSpeechPywhl】

3.生成镜像

操作启动后台进程,执行生成命令,可以查看日志文件观察进度
#nohup docker build -t speech_server:v1.2 . >nohup-docker-build.out 2>&1 &
#tail -f nohup-docker-build.out

4.依赖包下载

超时修改本地镜像源,例如改为国内的豆瓣源
4.1、创建配置文件,windows命名pip.ini,linux、mac命名pip.conf
[global]
timeout = 60
index-url = https://pypi.doubanio.com/simple

4.2、配置文件放置到指定位置
windows为:
%APPDATA%\pip\pip.ini 或 %HOME%\pip\pip.ini
linux为:
HOME/.config/pip/pip.conf 或HOME/.pip/pip.conf
mac为 :
HOME/Library/Application Support/pip/pip.conf 或HOME/.pip/pip.conf
其中$HOME指的是用户主目;

三、调试容器及镜像迁移

1、docker常用命令创建容器:

docker run --name speech_server -p 8010:8010 speech_server:v1.2

创建容器命令:docker run
-i:表示运行容器
-t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
–name :为创建的容器命名。
-v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
-d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。
-p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射

启动、停止、重启、删除已创建容器
docker start 容器ID
docker stop 容器ID
docker restart 容器ID
docker rmi 容器ID
docker rm 镜像ID

通过docker logs -f container_id 查看日志:
docker logs -f speech_server
进入容器后,可查看程序打印的日志:
docke rexec -it 容器ID /bin/bash或者docker attach
容器ID查看宿主机端口是否和容器内端口映射成功,在容器外执行:
netstat -an |grep 宿主机的映射端口

2、使用docker-compose创建并调试容器(推荐)

2.1 创建文件:docker-compose-speech-server.yml

2.1 内容如下:(请按照yml格式化)
version: ‘3’
services:
speech_server:
image: speech_server:v1.2
container_name: speech_server1_2
ports:
-8010:8010
volumes:
-./nltk_data:/root/nltk_data

2.3 创建并启动命令:
docker-compose -f docker-compose-speech-server.yml up

2.4 后台进程启动:
docker-compose -f docker-compose-speech-server.yml up -d

图片
飞桨PaddleSpeech:智能语音-Python项目制作Docker镜像_第1张图片
Web端修对应服务IP,启动并访问:NICE!!!
http://localhost:3000/

飞桨PaddleSpeech:智能语音-Python项目制作Docker镜像_第2张图片

3、容器、镜像迁移
3.1 容器:
将容器导出到容器的镜像文件:docker export 容器ID > demo.tar
用容器的镜像文件创建一个新镜像:docker import - 镜像名 < demo.tar
创建完成之后,生成并启动镜像的容器:docker run -it 镜像名

3.2 镜像:
镜像保存为镜像文件:(demo是一个已经存在的镜像)
docker save -o demo1.tar demo
从镜像文件加载生成新镜像:docker load < demo1.tar

四、遇到的问题

1、AVX问题

运行 import tensorflow 的时候,出现下面的问题:illegal instruction (core dumped)关于问题的讨论在Github上有开issue #17441。stackoverflow也有相关问题回答。总结相关回答:新版本(version >= 1.6.0)的Tensorflow binary release是在avx指令环境下编译的。如果你的CPU不支持该类型指令,就不能使用新版本。
解决方案:首先要确定的是:如果你使用的是虚拟机,要确定是否支持avx指令集!
cat /proc/cpuinfo #下图中没有avx,则不支持。
cat /proc/cpuinfo | grep avx
飞桨PaddleSpeech:智能语音-Python项目制作Docker镜像_第3张图片

五、感谢关注小程序

飞桨PaddleSpeech:智能语音-Python项目制作Docker镜像_第4张图片

你可能感兴趣的:(docker,paddlepaddle,python)