在项目中经常需要在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
测试成功。