Docker容器化安装Python、第三方包、制作镜像、内网部署

在项目中经常需要在linux服务器上搭建Python环境,但是由于linux系统的版本等原因,导致内网环境中安装Python及第三方库的过程出现各种问题,因此采用Docker的方式部署Python。大致流程分为以下步骤:1、Docker hub拉取Python镜像 2、创建容器并在容器内增加项目所需第三方库 3、将步骤二的容器制作为镜像 4、将镜像用于内网环境。(Docker的安装此处不再描述)

1、Docker hub拉取官方镜像

首先,查看系统已有的镜像,输入如下命令:docker imges

从上图中可以看出,系统已有镜像并不包含Python(此处依据项目需求安装Python3.6)

输入如下命令从官网拉取,输入如下命令:docker pull python:3.6

依据网速的不同,会在此页面等待5-10分钟进行下载,下载完成后会出现如下结果:

输入如下命令再次查看镜像:docker images

可以看到,镜像已成功下载至本地。

2、创建容器并在容器内增加项目所需第三方库

启动该容器查看Python能否正常运行,执行如下命令:docker run -it python:3.6 /bin/bash

  • -i:交互操作
  • -t:终端
  • python:3.6 对应的即为 REPOSITORY:TAG
  • /bin/bash:这里我们希望有个交互式 Shell,因此用的是 /bin/bash

此时已经入容器中,绿色标注的字符串即为容器的ID,我们输入python做测试:

此时Python已经可以使用,但是需要依据项目需求安装第三方包,比如我们导入pandas试试。

可以看出,并没有安装pandas,因此我们需要依据项目需求安装相关第三方包,此处假设需要安装pandas与pymysql。

输入quit()退出Python终端,并使用pip命令安装pandas与pymysql。(注:pandas会需要其他依赖包,因此在pip安装过程中会安装所需依赖)

为了使安装过程更快,我们使用国内镜像安装pandas与pymysql。(pip install pymysql -i https://pypi.tuna.tsinghua.edu.cn/simple)

此时我们再次调用python,看看能否成功导入pandas与pymysql

成功。此时我们需要将这个容器进行保存,制作成镜像,方便我们导入内网环境使用。(注意:此处打开的shell窗口不要关闭,重新打开一个shell窗口来进行镜像制作。不要关闭此处shell窗口)

3、将步骤二的容器制作为镜像

步骤2的shell不要关闭,重新打开一个shell窗口进行镜像制作。

输入如下命令查看容器ID,依据容器ID进行镜像制作:docker ps -a

然后执行如下命令:docker commit 29ee0479770b python_diy:3.6

commit后面跟的即为刚才安装pandas与pymysql容器对应的ID,python_diy与3.6分别对应REPOSITORY与TAG,可随意命名。

制作镜像成功。输入docker images查看是否已经存在:

可以看到,我们自己制作的python_diy,tag(标签)为3.6的镜像已经制作完成。此时即可将上文提示不可关闭的shell窗口关闭。

我们依据python_diy这个镜像启动容器测试能否正常使用Python以及安装的pandas与pymysql。启动命令为docker run -it python_diy:3.6 /bin/bash

可以看出,可以正常使用。为了此镜像能够在内网环境及离线环境使用,将此镜像打包为文件(需要打包为以.tar后缀或者以.tar.gz结尾的文件),移植到具体项目环境中即可使用。

镜像打包命令格式为: docker  save REPOSITORY:TAG |gzip >  镜像名,此处即为 docker save python_diy:3.6 |gzip > python_images.tar.gz

可以看到,在当前路径下生成了python_images.tar.gz,文件大小为370M,到此处镜像文件制作完成,我们仅需要把python_images.tar.gz应用于离线环境或内网环境当中。

4、将镜像用于内网环境

通过xshell或ftp等方式,将python_images.tar.gz上传至目标服务器。(此处为了演示效果。将原有python相关镜像删除)

删除原有Python镜像后,查看镜像:docker images

现在依据制作的python_imges.tar.gz镜像文件导入镜像。命令格式为:docker  load  <  tar 包所在路径,此处即为docker load < /root/gf/python_images.tar.gz

执行效果如下:

可以看到,镜像已经成功导入,并且REPOSITORY与TAG原来的保持一致,此处我们用该镜像来启动容器,测试Python及pandas、pymysql第三方包。

执行启动命令:docker run -it python_diy:3.6 /bin/bash

测试成功。