把Python程序打包成Docker镜像

前提:

  1. 母机上已安装anaconda
  2. 了解基本的Docker概念、最基本的命令

本文中涉及到的主要命令:

  • docker pull :从docker hub拉取某个镜像
  • docker image ls:查看当前系统中的所有镜像
  • docker build:根据Dockerfile创建一个镜像
  • docker run:启动某个镜像,运行一个容器
  • docker ps:查看当前系统中所有运行中的容器
  • docker ps -a:查看所有容器,不管是否运行

1. 母机上创建python虚拟环境

创建:
conda create -n your_project_name python=3.6
这样会创建一个只有pyhton3.6的环境。

进入虚拟环境:
conda activate your_project_name

example

2. 在虚拟环境中,部署自己的程序和相关文件

安装python依赖,记得记录下来安装了那些包

上传自己的代码、文件,确保在当前环境下可以正常运行(记住一定要在自己的虚拟环境中)

3.编写dockerfile

先安装一个基础的镜像,如python3.6环境
docker pull silverlogic/python3.6

直接pull可能会比较慢,可以通过阿里云镜像加速:
https://cr.console.aliyun.com/#/accelerator


直接在命令行复制图中的命令即可。

pull一个python3.6的镜像

然后就开始编写Dockerfile了!
首先我以我的项目为例,来明确几个概念:
项目根目录: \trp_service\
在根目录下,我的文件有这些:


其中,start.sh是我的启动文件,通过sh start.sh即可运行我的服务trp_service.py
这个python程序启动后,会生成一个api,提供词向量计算服务。内部的api端口是9000.

接下来我们编写Dockerfile文件:
在项目的根目录 \trp_service\里,我创建了一个文件,名为Dockerfile注意只能是这个名字。然后我们进入Dockerfile文件,按照如下内容编写:

FROM silverlogic/python3.6
MAINTAINER gby

ENV BUILD_HOME /trp_service

RUN pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple/;\
        ... ...
    pip install bert4keras==0.8.4 -i https://pypi.tuna.tsinghua.edu.cn/simple/

COPY . $BUILD_HOME
RUN chmod 777 $BUILD_HOME/start.sh

WORKDIR $BUILD_HOME

CMD $BUILD_HOME/start.sh
注释

4. 开始创建我的Docker镜像

在当前的项目目录中,执行如下命令:
docker build -t trp:v1 .

  • -t参数后,输入名字:版本
  • 注意命令最后有一个 . ,这是指在当前的目录下去寻找Dockerfile文件。
    build成功

创建之后,可以通过docker image ls查看系统镜像,发现trp已经创建好了:

5.启动镜像,生成容器,调用容器内的服务

通过命令:
docker run -itd -p 9000:9000 trp:v1
即可启动服务。
此时通过docker ps查看当前运行的容器:


能看到,就说明容器已经启动成功。

在命令中,我通过-p来设置宿主机和容器内的端口映射。故现在我在宿主机,也可以通过9000端口来访问我容器内的服务了:


你可能感兴趣的:(把Python程序打包成Docker镜像)