Ubuntu下使用Docker部署python的流程(亲测可用)

采用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:

https://blog.csdn.net/yyj108317/article/details/105875836?

问题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

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
要在Ubuntu使用Docker容器运行Python文件,您需要按照以下步骤进行操作: 1. 首先,确保您的系统已经安装了Docker。您可以通过运行以下命令来检查Docker的安装情况:[1] ``` docker-ce: Installed: (none) Candidate: 18.03.1~ce~3-0~ubuntu Version table: 18.03.1~ce~3-0~ubuntu 500 500 https://download.docker.com/linux/ubuntu bionic/stable amd64 Packages ``` 如果没有安装Docker,请按照以下步骤进行安装: - 将Docker存储库添加到APT源:[2] ``` sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable" ``` - 添加官方Docker存储库的GPG秘钥到您的系统:[3] ``` curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - ``` - 更新APT软件包索引并安装Docker: ``` sudo apt update sudo apt install docker-ce ``` 2. 安装完成后,您可以使用Docker运行Python容器。首先,创建一个包含您的Python文件的目录,并将该文件放入其中。 3. 在终端中,使用以下命令进入到包含Python文件的目录: ``` cd /path/to/your/directory ``` 4. 接下来,使用以下命令运行Python容器: ``` docker run -it --rm -v $(pwd):/app python:latest python /app/your_python_file.py ``` 其中,`your_python_file.py`是您要运行的Python文件的名称。 这个命令将会在Docker容器中运行Python,并将当前目录挂载到容器中的`/app`目录。然后,它将运行您的Python文件。 请注意,您需要将`python:latest`替换为您所需的Python版本。如果您需要使用特定的Python库,您可以在Dockerfile中定义所需的依赖项,并构建自定义的Docker镜像。 希望这个回答对您有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

只搬烫手的砖

你的鼓励将是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值