AI容器化部署开发尝试 (一)(Pycharm连接docker,并部署django测试)

注意:从 Docker 19.03 开始,Docker 引入了对 NVIDIA GPU 的原生支持,因此若AI要调用GPU算力的话docker版本也是有要求的,后面博客测试。

当然本篇博客还没设计到GPU的调用,主要Pycharm加Anaconda的方案用习惯了,现在改用docker进行部署,不知道怎么连接Pycharm,毕竟IDE都没有还开发个P的AI(大佬除外)。这里由于我以后要做AI部署到云服务器的项目得要个后端,就以django这个后端框架的部署为例了。

主要是给出一直比较舒服的开发方案,即通过docker将项目文件夹挂载到宿主机中,而编译环境在docker容器中,Pycharm则调用docker容器的编译环境,来看代码,并且通过Pycharm中的Terminal对容器的环境进行管理。
这样既可以享受到Pycharm的操作,又可以获得docker优秀的环境迁移的方便性。
(远程ssh部署调试的话先鸽,因为我还是建议在本地完成后直接通过容器的方式快速部署到其他远端的宿主机上,主要是我还没买云GPU服务器)
在这里插入图片描述

一.简介

Docker 技术与 PyCharm 的整合:加速未来 AI 技术的快速部署

在人工智能 (AI) 的快速发展过程中,技术工具的整合与优化不断推动着开发效率的提升。Docker,作为一种开源的容器化平台,提供了一种高效、轻量级的方法来封装和运行应用,确保了应用在不同环境中的一致性和可移植性。而 PyCharm,作为一款广受欢迎的 Python 开发环境,其对 Docker 的支持使得开发者能够在一个集成的环境中更便捷地开发、测试和部署 AI 应用。

  1. 环境一致性和便捷性:Docker 容器确保了从开发到生产环境的无缝过渡,每个容器都包括用于运行软件的完整和标准化的运行时环境。这解决了常见的“在我机器上可以运行”的问题,大大减少了环境配置导致的延误。

  2. 快速迭代与部署:通过使用 Docker,AI 开发者可以快速地打包他们的应用和所有依赖,简化部署过程。PyCharm 的 Docker 集成允许开发者直接在 IDE 中管理容器,从而提高开发速度和迭代效率。

  3. 可扩展性和资源管理:Docker 容器的轻量级特性使得在不同的硬件和云环境中部署和扩展 AI 应用变得更加简单和成本效率。这对于需要大量计算资源的 AI 模型训练和推理尤为重要。

  4. 多版本和实验管理:AI 开发常常需要测试多个版本的模型和算法。Docker 容器可以轻松管理不同版本的 AI 应用,而 PyCharm 提供的工具可以帮助开发者跟踪不同实验的性能。

  5. 安全性:Docker 提供了隔离的环境,可以有效地分隔不同应用和实例,增强了安全性。这对于处理敏感的 AI 数据尤其重要。

注意本章解释的部署:django的工程文件是处于容器外的不是在容器里面,这样方便工程代码的更新(以及后续的自动化部署),以及没安装docker desktop 安装指南的先安装了再说。

二.编写docker配置

准备好配置好的,docker-compose.yml , Dockerfile , requirements.txt , 以及django的工程文件,(特别注意文件之间的目录关系!)
配置文件0积分下载CSDN偷改积分了叫我。

然后在 docker-compose.yml 目录下输入

docker-compose up -d

若安装有问题要全删除使用命令 bash docker-compose down 还是删除不了则使用 bash docker rm -f 容器ID或名称 成功后你可以看到如下,说明成功的部署上了django的容器

在这里插入图片描述
在这里插入图片描述

注意由于我在Dockerfile中的配置,我是打算连接上pycharm后手动控制开启django服务的,因此容器启动后是无法自动开启django工程的,如果你确定你的django工程代码写好了,并且想让容器开启就运行,你可以按照下面代码这样修改 Dockerfile 的内容

# 使用官方 Python 3.7 运行时作为父镜像
FROM python:3.7

# 设置容器内的工作目录为 /app
WORKDIR /app

# 将当前目录内容复制到位于 /app 中的容器中
COPY . /app

# 安装 requirements.txt 中指定的任何需要的程序包
RUN pip install --no-cache-dir -r requirements.txt

# 使端口 8000 可用于外界访问
EXPOSE 8000

# 定义环境变量
ENV NAME World

# 在容器启动时运行 manage.py, (完成调试后开启!)
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]

然后用以下命令来重新构建服务的镜像并启动容器:

docker-compose up -d --build

以我提供的代码为例,修改后这样启动,那么在镜像开启后,就会自动开启django服务并,这时用浏览器访问 http://localhost:8000/ 就可以看到成功的页面了 在这里插入图片描述

二.pycharm连接本地docker

在 PyCharm 中配置 Docker 容器作为 Python 解释器并不需要设置 Docker 的 SSH 服务。您可以直接通过 PyCharm 的内置 Docker 集成来实现。请确保您已经在您的 Windows 机器上安装了 Docker Desktop,并且 Docker 正在运行。然后,您可以按照以下步骤来配置 Docker 容器作为 Python 解释器:

步骤 1: 配置 Docker 服务

  1. 打开 PyCharm。
  2. 转到 File -> Settings(或使用快捷键 Ctrl+Alt+S)。
  3. 在设置窗口中,选择 Build, Execution, Deployment -> Docker
  4. 点击 + 图标来添加一个新的 Docker 配置。
  5. Docker API URL 中,如果您使用的是 Docker Desktop,默认应该可以使用 unix:///var/run/docker.sock(Linux)或 npipe:./pipe/docker_engine(Windows)。通常 PyCharm 会自动检测并填写。
  6. 点击 Apply 保存设置。

步骤 2: 添加 Docker 容器作为 Python 解释器

  1. 在设置窗口中,转到 Project: [您的项目名称] -> Python Interpreter
  2. 点击右下角的齿轮图标,选择 Add
  3. 在弹出的窗口中,选择左侧的 Docker
  4. Configuration 下拉菜单中选择您刚刚配置的 Docker 服务。
  5. Image name 输入框中,输入您的 Django 应用的 Docker 镜像名称。这个名称应该与您的 Dockerfile 中定义的镜像名称相对应。
  6. PyCharm 会自动尝试获取镜像中的 Python 解释器路径。如果无法自动检测,您可能需要手动指定 Python 执行路径(通常是 /usr/bin/python3 或相似路径)。
  7. 点击 OK 保存配置。
    在这里插入图片描述在这里插入图片描述

若出现连接失败如下

在这里插入图片描述
当您在 PyCharm 中遇到无法连接到 Docker 守护进程的问题时,通常是因为 Docker 没有正确设置来允许通过 TCP 连接,或者 Docker 守护进程根本就没有运行。以下是一些检查和解决步骤:

检查 Docker 是否在运行

  1. 打开命令提示符或 PowerShell:您可以在 Windows 中搜索 “cmd” 或 “PowerShell”,然后打开它。

  2. 运行 Docker 版本检查命令

    docker --version
    

    这将显示 Docker 的版本,如果 Docker 没有运行或没有正确安装,这个命令可能会报错。

  3. 检查 Docker 服务状态

    docker info
    

    如果 Docker 正在运行,这个命令会显示 Docker 的详细信息。如果 Docker 没有运行,您将看到一个错误消息,提示 Docker 守护进程没有运行。

确保 Docker 允许 TCP 连接

默认情况下,Docker 可能不允许通过 TCP 连接。您需要确保 Docker 配置为允许远程 API 访问。对于 Docker Desktop 用户:

  1. 打开 Docker Desktop:点击 Windows 任务栏中的 Docker 图标。

  2. 设置:在 Docker Desktop 的界面上,点击设置图标(通常位于右上角)。

  3. 选择 General(常规):确保勾选了 “Expose daemon on tcp://localhost:2375 without TLS”。这允许无 TLS 的本地 TCP 连接。
    在这里插入图片描述

  4. 应用 & 重启:更改设置后,确保点击应用 & 重启,使设置生效。

重新配置 PyCharm

在确保 Docker 守护进程运行并配置了 TCP 连接后,返回到 PyCharm 进行如下操作:

  1. 重试连接:回到 Settings -> Build, Execution, Deployment -> Docker,重新尝试连接。

  2. 检查防火墙设置:确保没有防火墙规则阻止了从 PyCharm 到 Docker 的连接。

通过以上步骤,您应该能够解决 PyCharm 无法连接到 Docker 守护进程的问题。如果问题依然存在,可能需要进一步检查网络设置或咨询 Docker/PyCharm 的官方支持。

步骤 3: 使用 Docker 容器运行和调试您的应用

  • 现在,可以使用配置的 Docker 解释器来运行和调试您的 Django 应用。在 PyCharm 的运行/调试配置中,选择您刚刚创建的 Docker 解释器。
  • 选择运行或调试按钮来启动您的应用。PyCharm 将在 Docker 容器中执行您的应用,并允许您利用 PyCharm 的调试工具进行调试。

这样,就可以在 PyCharm 中利用 Docker 容器作为 Python 解释器,无需配置 SSH,便于在相同的开发环境中运行和调试您的 Django 应用。
在这里插入图片描述

点击确定后,可观察到docker desktop中出现pycharm连接用的对应的docker 容器的启动
在这里插入图片描述

在这里插入图片描述

Path Mappings是否设置

Path mappings 是用来链接本地开发环境中的文件路径和 Docker 容器内部的文件路径。这在进行源代码调试时尤为重要,因为它确保了 PyCharm 能够正确地对应到源代码位置。

另外是否需要配置 Path Mappings?

  • 如果您的应用在运行和调试时不依赖于具体的文件路径,或者您的 Docker 容器已经通过 Dockerfile 或者 docker-compose.yml 文件正确地映射了所有必要的卷(volumes),那么可能不需要手动设置路径映射。
  • 如果您在调试中遇到问题,例如断点不工作或者文件路径错误,那么您可能需要设置路径映射。

如何配置 Path Mappings?

如果您决定需要配置路径映射,可以按照以下步骤操作:

  1. 打开 PyCharm 的 Settings/Preferences。

  2. 导航到 Project: [您的项目名称] -> Python Interpreter

  3. 在 Python 解释器页面,点击您配置的 Docker 解释器旁边的齿轮图标,选择 Show All...

  4. 在弹出的窗口中,选择您的 Docker 解释器,然后点击 Edit 按钮(铅笔图标)。

  5. Interpreter Path 下方,您会看到 Path mappings 的选项。点击 ... 来添加或编辑映射。

  6. 您需要添加本地路径以及对应的容器内路径。例如:

    • Local path: C:\Users\YourName\PycharmProjects\YourProject
    • Remote path: /app (假设您的 Docker 容器中项目位于 /app)
  7. 确认添加后,点击 OK 保存设置。

通过正确配置路径映射,您将能够更顺畅地在 Docker 容器中使用 PyCharm 进行开发和调试。如果您在配置过程中遇到任何问题,可以重新检查您的 Docker 容器设置或咨询相关文档。

三.设置 Terminal 直接控制 Docker 容器

如果想在 PyCharm 的 Terminal 中直接控制 Docker 容器,需要配置 PyCharm 使其 Terminal 使用 Docker 容器的 shell。以下是如何在 PyCharm 中设置这一功能的步骤:

1. 打开 PyCharm 设置

首先,打开 PyCharm 的设置或首选项:

  • 在 Windows 上,这通常在 “File” 菜单下的 “Settings”。
  • 在 macOS 上,这通常在 “PyCharm” 菜单下的 “Preferences”。

2. 配置 Terminal

  • 在设置界面中,导航到 “Tools” -> “Terminal”。
  • 在此界面中,您可以找到一个叫做 “Shell path” 的设置项,这里可以配置要启动的 shell 命令。

3. 设置 Docker 命令

  • 在 “Shell path” 字段中,输入用于连接到 Docker 容器的命令。这通常看起来像这样:
    docker exec -it <container_name_or_id> /bin/bash
    
    其中 <container_name_or_id> 替换为您的 Django 容器的名称或 ID。如果您的容器使用的是不同的 shell(比如 /bin/sh),请相应调整。
    例如我这里是 docker exec -it f_cloud-django-1 /bin/bash
    不过有时因为环境变量的原因会失败,因此如果不行的话还是用带有docker.exe路径的更全都命令如下
"C:\Program Files\Docker\Docker\resources\bin\docker.exe" exec -it f_cloud-django-1 /bin/bash

在这里插入图片描述

4. 应用并关闭设置

  • 完成设置后,点击 “OK” 或 “Apply” 保存并关闭设置窗口。

5. 测试 Terminal

  • 打开 PyCharm 的 Terminal 面板(通常在 IDE 底部的标签页中)。它应该会启动一个新的 session,连接到您的 Docker 容器中。
  • 在 Terminal 中,您现在应该能够运行与 Docker 容器内部环境相关的命令。

如下可看到在pycharm中的Terminal与直接进入docker后的效果相同

6.设置teminal失败

看起来您遇到了在 PyCharm 中设置 Terminal 连接 Docker 容器时的问题。出现这种情况可能有几个原因:

1. Docker 容器未运行

首先,请确保 Docker 容器 f_cloud-django-1 正在运行。您可以使用以下命令来检查容器的状态:

docker ps

这会列出所有正在运行的容器。如果您的容器没有在运行,您需要先启动它。

2. Docker 命令路径

如果您在 Windows 系统上运行 PyCharm,并且 Docker 命令没有在系统的 PATH 环境变量中,PyCharm 可能无法直接调用 docker 命令。您可以尝试在命令前指定 Docker 的完整路径。例如:

"C:\Program Files\Docker\Docker\resources\bin\docker.exe" exec -it f_cloud-django-1 /bin/bash

这里的路径 "C:\Program Files\Docker\Docker\resources\bin\docker.exe" 是假设的,根据您的实际安装路径调整。

3. Shell 路径格式问题

在 Windows 上,有时候直接在 PyCharm 的 Terminal 设置中使用 docker exec 命令会遇到问题,因为 Windows 和 Unix/Linux 系统的命令行环境有所不同。您可以尝试使用以下方法之一来解决这个问题:

  • 使用 Windows Subsystem for Linux (WSL):
    如果您已经在 Windows 上安装了 WSL,可以尝试通过 WSL 来运行 Docker 命令:

    wsl docker exec -it f_cloud-django-1 /bin/bash
    
  • 使用 PowerShell 脚本:
    您可以创建一个 PowerShell 脚本来启动 Docker 容器的 shell,然后在 PyCharm 中设置该脚本为 Terminal 的启动命令。

4. 检查日志文件

PyCharm 提示查看 idea.log 文件以获取详细信息。您可以按照提示操作,通过 “Help | Show Log in Explorer” 查看日志文件,里面可能包含更具体的错误信息帮助诊断问题。

如果上述步骤仍然不能解决问题,您可能需要检查更多的配置细节或者考虑联系技术支持。同时,确保 PyCharm 和 Docker 均更新到最新版本,以避免可能的兼容性问题。

注意
  • 确保 Docker 容器在执行这些步骤之前已经在运行状态。
  • 如果您频繁需要连接到不同的 Docker 容器,可能需要根据当前工作需求调整 Terminal 设置。

四.完成环境部署开始调试验证

完成所有部署后,以后开发的是否就像下面的流程
1.打开docker desktop 确保django容器启动
2.打开pycharm进行编辑代码(还是IDE香,用vim什么的就算了,难度太大…)
3.使用Terminal进行django的启动,以及各类包的管理

(这样,通过安装例如numpy,opencv等的包到镜像中,以后就可以很方便的直接通过拷贝镜像的方法迁移环境了,比使用anaconda要更加的方便, 当然有些AI程序由于是GPU调用的原因需要宿主机安装,这个以后讨论)

如下图就是在Terminal中运行 Django 开发服务器命令的效果:

python manage.py runserver 0.0.0.0:8000

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/558408.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于Springboot的社区待就业人员信息管理系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的社区待就业人员信息管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三…

pdf加水印怎么加?自己原创的PDF资料分享到网络上需要采取一些版权保护的措施,添加水印就是个不错的选择

一&#xff0c;水印的基本概念 水印通常是一种用于标识文件来源、版权信息或防止非法复制的标记。它可以是文字、图形或图像等形式&#xff0c;以半透明或半淡化的方式嵌入到文件中&#xff0c;既不影响文件的正常阅读&#xff0c;又能起到标识和保护的作用。 二&#xff0c;…

mars3d实现禁止地图移动,禁止地图左右平移,但是鼠标可以移动的效果。

new mars3d.layer.GeoJsonLayer({渲染后实现鼠标左键按住不释放拖动时&#xff0c;地图不跟着拖动效果 当前问题&#xff1a; 1.在map初始化&#xff0c;或者是加载效果的时候&#xff0c;整个地球的场景都是一样的。 如果鼠标左键按住不释放&#xff0c;在屏幕上拖动的时候…

设计模式代码实战-责任链模式

1、问题描述 小明所在的公司请假需要在OA系统上发布申请&#xff0c;整个请求流程包括多个处理者&#xff0c;每个处理者负责处理不同范围的请假天数&#xff0c;如果一个处理者不能处理请求&#xff0c;就会将请求传递给下一个处理者&#xff0c;请你实现责任链模式&#xff…

C++:map和set的使用

一、关联式容器介绍 在学习map和set之前&#xff0c;我们接触到的容器有&#xff1a;vector、list、stack、queue、priority_queue、array&#xff0c;这些容器统称为序列式容器&#xff0c;因为其底层为线性序列的数据结构&#xff0c;里面存储的是元素本身。 关联式容器也是用…

Appian发布最新版本:通过AI流程自动化推动业务发展

Appian公司于2024年4月16日在弗吉尼亚州麦克莱恩宣布推出Appian平台的最新版本。此版本引入了Process HQ&#xff0c;这是一个集流程挖掘和企业AI于一体的系统&#xff0c;结合了Appian的数据平台。Process HQ为企业运营提供前所未有的可见性&#xff0c;支持数据驱动的决策和流…

微信小程序四(全局配置和页面配置页面跳转)

全局配置&#xff1a; 小程序根目录下的 app.json 文件用来对微信小程序进行全局配置&#xff0c;决定页面文件的路径、窗口表现、设置网络超时时间、设置多 tab 等 tabBar设置&#xff1a;最少两个最多5个 "tabBar": {"list":[{"pagePath": &qu…

【若依】代码生成详细教程(单表、主从表、树形表增删改查)

若依代码生成开发接口 修改代码生成配置一、单表实现增删改查1. 新建数据库表结构2. 新建模块&#xff0c;解决项目依赖3. 启动项目&#xff0c;新建菜单4. 导入数据表&#xff0c;自动生成代码5. 将生成代码粘贴到对应的模块&#xff0c;执行生成的sql&#xff08;用于生成菜单…

OpenHarmony网络协议通信—nanopb

简介 nanopb是一种小代码量的协议缓冲区实现&#xff0c;适用于任何内存受限的系统。 下载安装 直接在OpenHarmony-SIG仓中搜索nanopb并下载。 使用说明 以OpenHarmony 3.1 Beta的rk3568版本为例 将下载的Nanopb库代码存在以下路径&#xff1a;./third_party/nanopb 修改添…

一键设置个性手机壁纸:苹果手机怎么设置动态壁纸?

在苹果手机上设置动态壁纸是一种让你的手机屏幕更生动、更有趣的方式。无论是流动的水滴、绚丽的光影还是动态的星空&#xff0c;动态壁纸可以为你的手机带来全新的视觉体验。苹果手机怎么设置动态壁纸&#xff1f;在本文中&#xff0c;我们将介绍苹果手机上如何设置动态壁纸的…

李沐-16 PyTorch 神经网络基础【动手学深度学习v2】

注&#xff1a;1. 沐神对应章节视频出处 2.代码使用Jupyter Notebook运行更方便 3.文章笔记出处 一、层和块 层&#xff1a;层&#xff08;1&#xff09;接受一组输入&#xff0c; &#xff08;2&#xff09;生成相应的输出&#xff0c; &#xff08;3&#xff09;由一组可调整…

priority queue优先队列(三)

一、优先队列 优先队列不再遵循先进先出的原则&#xff0c;而是分为两种情况: 最大优先队列&#xff0c;无论入队顺序如何&#xff0c;都是当前最大的元素优先出队。 最小优先队列&#xff0c;无论入队顺序如何&#xff0c;都是当前最小的元素优先出队。 在操作系统中&#xf…

k8s 部署 kube-prometheus监控

一、Prometheus监控部署 1、下载部署文件 # 使用此链接下载后解压即可 wget https://github.com/prometheus-operator/kube-prometheus/archive/refs/heads/release-0.13.zip2、根据k8s集群版本获取不同的kube-prometheus版本部署 https://github.com/prometheus-operator/k…

达梦数据库一体机树立金融解决方案标杆

达梦数据库一体机自问世以来&#xff0c;获得众多行业用户的高度关注&#xff0c;并率先在金融行业吹响冲锋号角&#xff0c;实现多个重大项目的落地应用。近日&#xff0c;珠海华润银行股份有限公司基于达梦数据库一体机 I 系列的《数据库一体机银行多业务系统集中部署解决方案…

STM32之串口中断接收丢失数据

五六年没搞STM32了&#xff0c;这个项目一切都挺顺利&#xff0c;万万没想到被串口接收中断恶心到了。遇到的问题很奇怪 HAL_UART_Receive_IT(&huart1, &rx_buffer[rx_index], LCD_UART_LEN); 这个代码中 LCD_UART_LEN1的时候&#xff0c;接收过来的数据&#xff0c;数…

VR全景展览——开启全新视界的虚拟展览体验

随着VR技术的不断发展和成熟&#xff0c;VR全景展览已经成为现代展览行业的一大亮点。通过模拟现实世界的场景&#xff0c;VR全景展览为用户提供了一个沉浸式的观展体验&#xff0c;使参观者能够跨越地理和时间限制&#xff0c;探索不同领域的展览。 一、VR全景展览的功能优势 …

用RPA自动给抖音涨粉(内附使用教程)

前言 小北准备新开一个教程系列&#xff0c;关于如何用RPA自动化给抖音涨粉。 因为我最近在摸索抖音相关的玩法&#xff0c; 发现抖音很多功能都需要一定的粉丝基础才能开通&#xff0c;比如达人&#xff0c;星图&#xff0c;带货等等。 所以有没有什么办法可以自动涨粉&am…

AI时代,我要如何学习,才能跟上步伐

在21世纪这个被数据驱动的时代&#xff0c;人工智能&#xff08;AI&#xff09;已经渗透到我们生活的方方面面。无论是智能手机中的语音助手、在线客服的聊天机器人&#xff0c;还是自动驾驶汽车&#xff0c;AI的应用都在告诉我们一个信息&#xff1a;未来已来。因此&#xff0…

Java的Hash算法及相应的Hmac算法

【相关知识】 加密算法知识相关博文&#xff1a;浅述.Net中的Hash算法&#xff08;顺带对称、非对称算法&#xff09;-CSDN博客 【出处与参考】 MessageDigest 类介绍、分多次调用update方法与一次性调用一致的说明引自&#xff1a; https://blog.csdn.net/cherry_chenr…

【系统分析师】系统配置与性能评价

文章目录 1、性能指标2、阿姆达尔解决方案3、性能评价方法 1、性能指标 例题 2、阿姆达尔解决方案 大概了解 例题 3、性能评价方法
最新文章