使用docker部署python
需求说明
从Hbase中读取到音频文件,再使用python的librosa模块进行语音的有效时长解析。
使用docker的原因
因为要部署的机器是离线环境,在离线环境下安装python环境的步骤如下:
进入外网python虚拟环境
导入虚拟环境中已安装包的信息到requirements.txt 文件中
pip freeze --all >requirements.txt
创建一个临时目录,将安装包下载到该目录下
mkdir whls
cd whls
pip download -r ../requirements.txt -d .
将创建好的虚拟环境打包,拷贝到新的环境中
解压,激活该虚拟环境
将whls 目录拷贝解压到新环境的目录下
执行安装命令安装
pip install --no-index --find-links=whls -r requirements.txt
使用离线安装步骤麻烦,且不能很好的复用,而且在实际部署到服务器上时容易出错,因此使用docker进行部署。
docker部署步骤
下载docker
本人使用的是mac系统,从docker官网:(https://www.docker.com/) 下载到本地,然后进行安装。安装完成之后,双金进入docker。
下载python包
使用以下命令拉取python包:
docker pull python:3.10.6
python版本号对应自己的python版本
下载完成后使用一下命令查看images:
docker images
可以看到一下结果:
REPOSITORY TAG IMAGE ID CREATED SIZE
docker/welcome-to-docker latest 73c4dee5ca43 4 weeks ago 13.1MB
python 3.10.6 d25a66380b10 8 months ago 921MB
docker/welcome-to-docker 是docker自带的测试镜像。python是刚才下载的image
生成requirements.txt文件
在自己的python项目中使用命令pip freeze --all >requirements.txt生成requirements.txt文件文件。
编写dockerfile
使用docker 生成镜像需要编写dockerfile文件来指定生成镜像的路径等。以下是一个示例:
FROM python:3.10.6
RUN mkdir /opt/mycode
COPY ./python_file_name /opt/mycode/python_file_name
RUN pip install -r /opt/mycode/python_file_name/requirements.txt -i https://mirrors.aliyun.com/pypi/simple/
WORKDIR /opt/mycode
CMD python main.py
注意事项:
- FROM python:3.10.6 是指把python:3.10.6当成base包。
- RUN mkdir /opt/mycode 是在docker的独立linux系统中生成/opt/mycode 目录。
- 把本地的python项目文件拷贝到刚创建的镜像目录中。
- 使用pip install安装此项目需要的依赖包 -i 把pip源修改为阿里云,提高下载速度。
- WORKDIR /opt/mycode 把此目录设置问工作目录。
- 执行main.py
生成镜像
使用以下命令生成镜像:
docker build -t testimages:1.0.1-dev .
testimages:1.0.1-dev为生成的images名称,.表示在当前目录,docker会自动在当前目录寻找文件名为dockerfile的文件,然后根据文件内容生成镜像。
把镜像保存为tar包
使用以下命令把镜像打包:
docker save testimages:1.0.1-dev > testimages.tar
interphonetest:1.0.1-dev为镜像名称,interphonetest.tar为打包的包名
注意事项
在使用FROM python:3.10.6 生成镜像后,如果要进行代码调试,每次都要重新生成镜像,需要每次都使用pip install去下载依赖就很需要时间,可以编写以下dockerfile-tmp文件
FROM testimages:1.0.1-dev
COPY ./python_file_name /opt/mycode/python_file_name
然后使用docker build -f dockerfile-tmp -t testimages:1.0.1-dev
然后用docker save 重新保存
使用docker镜像
将保存好的tar包上传到服务器,使用以下命令:
docker load -i testimages.tar
然后查看images:
docker images
复制新上传的images的IMAGE ID,使用以下命令:
docker run -it IMAGE ID bash
执行后将会进入bash命令,可以使用python 来执行py文件