• python程序,放入docker容器中, 生成镜像


    注: 本文为自己将一个python程序,放入docker容器中,并在docker容器中使用pyinstaller将此python程序打包成可执行文件。

    确保当前宿主机上的磁盘空间足够使用。(本文Demo光一个容器就耗费了7.8G)
    一、 给本机安装docker

    1.安装依赖
    sudo apt-get update
     sudo apt-get install \
        ca-certificates \
        curl \
        gnupg \
        lsb-release
    
    2.移除旧版本
    sudo apt-get remove docker docker-engine docker.io containerd runc
    
    3.添加dockerGPG证书
     curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
    
    
    4.添加存储库
     echo \
      "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
      $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    
    5.安装docker
    //-- 更新apt包索引
    sudo apt-get update
     sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
     
    6.查看docker版本  docker --version
    root@ubuntu:/home/lxk/Desktop# docker --version
    Docker version 20.10.16, build aa7e414
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    二、拉取基础镜像并创建容器(我选择的是Ubuntu)
    1> df -lh 命令查看当前Ubuntu虚拟机下的磁盘空间
    2> 搜索镜像 docker search ubuntu
    在这里插入图片描述
    ODFFICAL 指是否官方
    START 好像和好评的意思吧

    3> 拉取镜像 docker pull ubuntu

    4> 查看镜像 docker images 会看到刚才镜像信息

    5> 运行并创建容器 docker run -itd --name=anaconda_test ubuntu

    6> 查看运行中的容器 docker ps

    7> 进入容器 docker exec -it anaconda_test /bin/bash

    三、在容器中配置 vim 和源
    1> 查看容器是基于linux的哪一个发行 cat /etc/issue
    在容器里lsb_release -a 这个命令是无效的,gedit和sudo这个命令是无效的(容器是一个非常精简的操作系统,所以需要自己去安装需要的工具)

    2> apt-get update 更新apt (这个时间比较长)

    3> apt-get remove vim-common和apt-get install vim 更新vim可以使vi可用(这个时间比较长)

    4> 想要在容器里复制文本 vi打开/etc/apt/sources.list文件后, :set mouse=v 将一些源复制进去。(确保源正确,我是没有删除以前的,是追加的)

    5> 再次更新 apt-get update

    四、在容器中装anaconda和vsCode和从宿主机拷贝代码到容器
    1> docker cp Anaconda3-2021.11-Linux-x86_64.sh anaconda_test:/root
    从宿主机拷贝anaconda的安装文件(自行官网下载Linux对应版本),到容器的 root根目录下。

    2> 安装anaconda ,在 /root下执行
    ./Anaconda3-2021.11-Linux-x86_64.sh
    安装完毕,关终端,从新开终端进入容器,输入conda -V
    以及conda list 以及python -V

    3> 复制 fits2bmp.py 到容器的根目录下
    docker cp fits2bmp.py anaconda_test:/root

    4> 创建一个虚拟环境
    conda create -n MyFirstEnv python=3.7
    进入环境 conda activate MyFirstEnv
    注意:如果想进入容器之后就进入到这个环境下,要在 vi ~/.bashrc 文件下写上 conda activate MyFirstEnv

    5> 现在我要在容器中装vsCode了,别操作,先看下文
    首先我安装了一个工具(因为,安装VSCode需要curl这个工具)
    apt-get install curl -y
    (容器是一个非常精简的操作系统,所以需要自己去安装需要的工具)

    命令行装VSCode
    curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
    sudo mv microsoft.gpg /etc/apt/trusted.gpg.d/microsoft.gpg
    sudo sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/vscode stable main" > /etc/apt/sources.list.d/vscode.list'
    sudo apt update
    sudo apt install code
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    注意: 我没装上去!!!谁会装的话,麻烦指教下。我还尝试过装spyder, 然而spyder打不开,也应该是没装成功。我放弃了!
    最后如 ↑ 所示我用命令行在宿主机上安装了vscode。

    6> 配置vsCode能够连接到容器
    在vsCode中 安装了docker 和 远程连接的Remote-SSH 和 Remote-Container; 安装方法自行百度。
    安装完毕后即看到 容器以及容器下的各文件。
    打开容器下root文件夹下的 文件fits2bmp.py运行
    python fit2bmp.py
    逐个安装缺失的库,直到运行通过,保证程序正确执行后,准备使用pyinstaller 打包python文件。

    7 > conda install pyinstaller 安装打包工具
    pyinstaller -F -w fits2bmp.py 执行打包命令,生成可执行文件
    注意: 有可能源码运行ok,但是打包打不出来,或者打包打出来运行可执行文件错误,根据自己的程序的复杂程度 自行判断哪里出现了错误。
    基本就是库不全,或者库不匹配的问题。
    pip check 命令可以帮助查找 缺失的库,或者库的不匹配。但使用pip check 并不能够让我们一定把错误解决。
    运行可执行程序,确保生成的可执行文件ok。

    五、 运行成功后尝试将容器打包成镜像
    1 > 运行成功后尝试将容器打包成镜像
    docker commit -a “作者” -m “msg” 被修改的容器名 新镜像的名字
    即:
    docker commit -a “dashuaige” -m “hahaha” anaconda_test image_anaconda

    2 > 生成新镜像后,可将新镜像打包成tar包
    docker save -o image_anaconda.tar image_anaconda
    打包完毕后可以使用命令查看docker使用了多少空间
    docker system df

    六、 使用这个tar包
    1> 我是为了保证 运行环境的清洁, 重新创建了一个虚拟机。(做不做自便)
    设置密码 sudo password root
    apt-get update
    apt-get upgrade
    装vim
    配置源 /etc/apt/sources.list
    装vm tools
    配置共享文件路径
    装docker

    2> docker load -i image_anaconda 读取tar包

    3 > docker images 查看镜像

    4> 由这个镜像产生容器,并且挂载文件,并且可执行容器命令,并且执行脚本命令
    注意:挂载的容器目录不能有文件,否则容器内原有文件会被删除!

    sudo vmhgfs-fuse .host:/ /mnt/hgfs -o nonempty
    
    
    //-- 加载镜像
    docker load -i image_anaconda.tar
    
    创建容器,并执行python脚本可执行程序:
    //-- 可以运行时执行
    root@lxk-virtual-machine:/home/lxk#    docker run -itd --name=ttt  -v /home/lxk/Code:/home image_anaconda /bin/bash -c "cd /root/dist/ &&  ./fits2bmp /home/COI1/file-list.txt /home/COI2/"
    //-- 还可以分段执行
    root@lxk-virtual-machine:/home/lxk#    docker run -itd --name=ttt  -v /home/lxk/Code:/home image_anaconda 
    root@lxk-virtual-machine:/home/lxk#    docker exec -it ttt /bin/bash -c "cd /root/dist/ &&  ./fits2bmp /home/COI1/file-list.txt /home/COI2/"
    
    /home/lxk/Code                        是宿主机包含COI的文件夹目录
    /root                                 是容器内的挂载路径
    /home/COI1/file-list.txt              参数1
    /home/COI2/                           参数2
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
  • 相关阅读:
    基于WEB的网上购物系统的设计与实现
    国产+开源:可视化流程引擎助力企业建立流程管理体系
    pytorch的axis的理解
    2022年12月3日(星期六):骑行张家坝(赏银杏)
    【K8S】Kubernetes集群搭建流程详解
    slice切片底层原理
    helm tekonci 技术总结待续
    C++中的智能指针
    从0开始用C写贪吃蛇(基于链表)
    DL之GRU(Tensorflow框架):基于茅台股票数据集利用GRU算法实现回归预测(保存模型.ckpt.index、.ckpt.data文件)
  • 原文地址:https://blog.csdn.net/baidu_19552787/article/details/125619255