Ubuntu下使用Docker部署python的流程(亲测可用)
采用Docker的方式部署python的流程:1、Docker hub拉取python镜像。2、创建容器并在容器内增加项目所需第三方库3、将步骤二的容器制作为镜像4、将镜像用于内网环境。
采用Docker的方式部署python的流程:
- 1、Docker hub拉取python镜像。
- 2、创建容器并在容器内增加项目所需第三方库
- 3、将步骤2的容器制作为镜像
- 4、将镜像用于内网环境。
1. Docker hub拉取python镜像
xiaoyuanzi@xiaoyuanzi-virtual-machine:~$ docker pull python:3.6
使用docker images查看镜像仓库中是否已经有了我们刚刚拉取的镜像。
xiaoyuanzi@xiaoyuanzi-virtual-machine:~$ docker images
2. 创建容器并在容器内增加项目所需第三方库
xiaoyuanzi@xiaoyuanzi-virtual-machine:~$ docker run -it python:3.6 /bin/bash
root@e2d28fdbcd53:/# python
Python 3.6.15 (default, Oct 13 2021, 09:43:57)
[GCC 10.2.1 20210110] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
- -i: 交互操作
- -t: 终端
- python:3.6 : REPOSITORY:TAG
- /bin/bash:这里我们希望有个交互式 Shell,因此用的是 /bin/bash
安装相关第三方包:
输入quit()退出Python终端,为了使安装过程更快,我们使用国内镜像安装pandas与opencv-python。
pip install pandas -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
注:
opencv-python的安装
pip install opencv-python -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
出现问题:
ImportError: libGL.so.1: cannot open shared object file: No such file or directory
两种解决方案:
方案一:
root@e2d28fdbcd53:/# apt-get update
root@e2d28fdbcd53:/# apt-get install sudo //前两步操作是当容器内没有sudo才需要进行的操作
root@e2d28fdbcd53:/# sudo apt update
root@e2d28fdbcd53:/# sudo apt install libgl1-mesa-glx
方案二:
1.|root@8d349368d9cf:/# pip uninstall opencv-python
2.|root@8d349368d9cf:/# pip install opencv-python-headless -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
由于方案一测试失败,我使用的是第二种方案:
测试:
root@8d349368d9cf:/# python
Python 3.6.15 (default, Oct 13 2021, 09:43:57)
[GCC 10.2.1 20210110] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
其他第三方库下载,如pytorch等。链接
3. 将步骤2的容器制作为镜像
此时我们需要将这个容器进行保存,制作成镜像,方便我们导入内网环境使用。
步骤2的shell不要关闭,重新打开一个shell窗口进行镜像制作。
输入如下命令查看容器ID,依据容器ID进行镜像制作:docker ps -a
xiaoyuanzi@xiaoyuanzi-virtual-machine:~$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fa5bc4eaf4de python:3.6 "/bin/bash" 54 seconds ago Up 53 seconds gifted_brown
commit后面跟的即为刚才安装pandas与opencv容器对应的ID,new_python(不能大写)与3.6分别对应REPOSITORY与TAG,可随意命名。
xiaoyuanzi@xiaoyuanzi-virtual-machine:~$ docker commit fa5bc4eaf4de new_python:3.6
sha256:a87c809c1c3a3fcb2fb655ca6d1f0e1b9ceae63c3036608f5e7f971529c53758
制作镜像成功。输入docker images查看是否已经存在:
xiaoyuanzi@xiaoyuanzi-virtual-machine:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
new_python 3.6 a87c809c1c3a 28 seconds ago 1.01GB
python 3.6 1498723101b5 5 days ago 902MB
此时即可将上文提示不可关闭的shell窗口关闭。
我们依据New_python这个镜像启动容器测试能否正常使用Python以及安装的pandas与opencv。
xiaoyuanzi@xiaoyuanzi-virtual-machine:~$ docker run -it new_python:3.6 /bin/bash
root@be029dd048d2:/#
为了此镜像能够在内网环境及离线环境使用,将此镜像打包为文件(需要打包为以.tar后缀或者以.tar.gz结尾的文件),移植到具体项目环境中即可使用。
镜像打包命令格式为: docker save REPOSITORY:TAG |gzip > 镜像名
xiaoyuanzi@xiaoyuanzi-virtual-machine:~$ docker save new_python: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
xiaoyuanzi@xiaoyuanzi-virtual-machine:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
现在依据制作的python_imges.tar.gz镜像文件导入镜像。命令格式为:docker load < tar 包所在路径,此处即为docker load < /home/xiaoyuanzi/python_images.tar.gz
xiaoyuanzi@xiaoyuanzi-virtual-machine:~$ docker load < /home/xiaoyuanzi/python_images.tar.gz
xiaoyuanzi@xiaoyuanzi-virtual-machine:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
new_python 3.6 a87c809c1c3a 14 minutes ago 1.01GB
可以看到,镜像已经成功导入,并且REPOSITORY与TAG原来的保持一致,此处我们用该镜像来启动容器,测试Python及pandas第三方包。
测试:
xiaoyuanzi@xiaoyuanzi-virtual-machine:~$ docker run -it new_python:3.6 /bin/bash
root@d10f5d34c765:/# python
Python 3.6.15 (default, Oct 13 2021, 09:43:57)
[GCC 10.2.1 20210110] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pandas
>>>
测试成功!
5. 问题总结
问题1:docker 无法删除镜像
Error response from daemon: conflict: unable to remove repository reference "training/webapp" (must force) - container 2588f7bc4a2b is using its referenced image 6fae60ef3446
解决1:
问题2: 容器内libGL.so.1问题
ImportError: libGL.so.1: cannot open shared object file: No such file or directory
解决2.1:
root@e2d28fdbcd53:/# apt-get update
root@e2d28fdbcd53:/# apt-get install sudo //前两步操作是当容器内没有sudo才需要进行的操作
root@e2d28fdbcd53:/# sudo apt update
root@e2d28fdbcd53:/# sudo apt install libgl1-mesa-glx
解决2.2:
1.|root@8d349368d9cf:/# pip uninstall opencv-python
2.|root@8d349368d9cf:/# pip install opencv-python-headless -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
参考:
1. https://blog.csdn.net/gf19960103/article/details/109489632
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)