云计算百科
云计算领域专业知识百科平台

详解:没有网络的服务器上,部署自己的python项目

没有网络的服务器上,部署自己的python项目

因为本人搞了好长时间,网上也没有详细的教程,因此记录分享一下。

在自己电脑构建docker项目镜像

网络上有很多关于windows下怎么安装docker的教程,这里就不在写了,可以在csdn上直接搜windows下安装docker等关键词。注意可以改一下镜像保存的位置,这个应用的右上角有个设置。 在这里插入图片描述

  • 安装好之后,需要启动这个应用。 在这里插入图片描述
  • 如果网上有你的项目需要的镜像,你可以现将镜像拉取下来接着,在构建自己的项目镜像。
  • docker pull 镜像名称

    拉取下来之后,你的应用中应该会出现对应的镜像文件 3. 之后可以用你自己决定好用的编程软件打开你自己的项目,在项目里面根据自己需要的依赖创建对应的requirements.txt,然后创建一Dockerfile 在这里插入图片描述 4. 编写Dockerfile文件内容,在这里我的项目需要cuda因此直接网上找别人的这个镜像拿来用了,里面包含了cuda和python等依赖。

    # 基础镜像选择Python版本
    FROM pytorch/pytorch:2.7.0cuda12.6cudnn9devel

    # 设置工作目录
    WORKDIR /app

    # 复制依赖文件并安装
    COPY requirements.txt .
    RUN pip install nocachedir r requirements.txt i https://mirrors.aliyun.com/pypi/simple/

    #保证容器可以在启动后不中断
    CMD ["tail", "-f", "/dev/null"]

  • 然后在该项目文件运行,注意这个命令最后有个.
  • docker build -t 你构建的镜像名称 .

  • 构建完成之后,你可以在你的应用里看到你构建完成的docker镜像,之后因为要上传的服务器里,你需要将文件打包为tar文件,可以直接在你的项目里打包,上传到服务器后可以删除。
  • docker save -o 压缩包名字.tar 要打包的镜像名称

    在这里插入图片描述

    在服务器上部署docker项目

  • 因为我使用的是vscode连接服务器(不知道怎么连接服务器的可以去搜教程,网上都有很多详细的教程),因此我都是直接将文件拖到服务器里面,就是直接将你打包好的.tar文件拖到服务器中就行了。
  • # 在服务器上加载镜像
    docker load -i 压缩包名字.tar

    通过下面的命令你可以看到你加载的镜像名称:

    docker images

    完成之后你可以将你之前打包好的.tar删除了。

  • 项目文件先不放在docker容器中,只放依赖,通过挂载将文件挂载上去。你只需要将你的项目文件放到你服务器里面就可以了,假如当前你的项目路径为:/home/test/qwen_qlora_main 在这里插入图片描述

  • 挂载方式(只有在docker run的时候需要挂载,之后docker exec不用再执行挂载的这些命令,这些属性已经在你的docker容器中了,就算停止这个容器还是一直保存有的,除非你把容器删除了):

  • docker run -it –name 容器名称(自己命名) –gpus all –net=host -v /home/test/qwen_qlora_main:/app 你第1步加载的镜像名称 /bin/bash

  • 如果镜像里面存在文件,就将那个文件复制到你要挂载的文件里面。 复制容器内文件到本地,将镜像里面的那个文件删除,这样方便你编写代码。
  • docker cp [容器ID或容器名称]:[容器内文件路径] [本地目标路径]

  • 因为是docker run实现的容器,因此现在你的状态是在容器里面的了,接下来就可以运行你的项目了train_false_data_gen.py这就是你自己要跑的文件,evaluating就是第二部图里项目里的文件夹,这个train_false_data_gen.py文件就在这个文件家里面,下面是使用nohup启动的命令,如果不用nohup可以去掉/usr/bin/nohup和> test.log 2>&1 &
  • CUDA_VISIBLE_DEVICES=1 /usr/bin/nohup python evaluating/train_false_data_gen.py > test.log 2>&1 &

    之后使用exec进入docker容器

  • 在你前面使用run创建运行并进入docker容器后,可以使用ctrl+p,然后ctrl+q从容器中退出而不停止容器。如果通过docekr run进入的使用exit将会停止该容器并且退出。 其中ctrl+p,然后ctrl+q,如果你使用的是vscode连接的服务器,你会发现执行不了,你需要在vscode下面的设置里面搜索:terminal.Integrated.send 具体可以参考下面这篇文章:
  • VS Code 从容器界面退出但保持容器后台运行

  • 当在docker run之后使用exit,你下次想要进入docker容器需要
  • docker start 容器id

    之后

    docker exec -it 容器id /bin/bash

  • 如果是docker run之后使用ctrl+p,然后ctrl+q从容器中退出,你只需要
  • docker exec -it 容器id /bin/bash

    即可进入容器 4. 使用docker exec进入容器,你使用exit将不会停止容器,而且你可以正常退出容器。

    服务器删除docker

  • 首先停止你要删除的容器
  • docker stop 容器id

  • 之后删除该容器
  • docker rm 容器id

  • 最后删除该镜像
  • docker rmi 镜像id

    本地windows删除docker镜像和容器

  • 因为我们本地用docker只是构建的项目镜像,没有牵扯到容器创建,因此我们只需要删除我们创建的镜像即可。 在这里插入图片描述

  • 之后以管理员的身份启动命令提示符,输入diskpart 在这里插入图片描述

  • 找到你docker镜像存储的位置,就在文章开头设置的那一块,按照我文章开头的那个位置,具体这个镜像存储的地方为:E:\\docker\\DockerDesktopWSL\\disk\\docker_data.vhdx。 执行下面的命令

  • select vdisk file="E:\\docker\\DockerDesktopWSL\\disk\\docker_data.vhdx"

    在这里插入图片描述 4. 截止执行压缩命令:

    compact vdisk

  • 最后执行删除命令
  • detach vdisk

    执行完上述命令在去查看你存储该镜像的磁盘,内存应该是释放了的。

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » 详解:没有网络的服务器上,部署自己的python项目
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!