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

目标:使用容器化技术快速部署AI应用进行开发。

注意:从 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.rhkb.cn/news/313803.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微服务两种方式登录

目录 1.restTemplate方式 1.1页面 1.2消费者 1.3生产者 1.4效果 2.Feign方式 2.1Service 2.2生产者 三个生产者 一个消费者&#xff0c;三个生产者需要用mysqlmybatis 三个不同的数据库。 页面输入用户名和密码&#xff0c;提交到后端消费者&#xff0c;消费者传到生产…

vLLM-prefix浅析(System Prompt,大模型推理加速)

原文&#xff1a;vLLM-prefix浅析&#xff08;System Prompt&#xff0c;大模型推理加速&#xff09; 简介 本文浅析了在大模型推理加速方面一个非常优秀的项目 vLLM 的一个新特性 Prefix。在 Prompt 中有相同前缀时可以提高吞吐量降低延迟&#xff0c;换句话说可以省去这部分…

【C++】:构造函数和析构函数

目录 前言一&#xff0c;构造函数1.1 什么是构造函数1.2 构造函数的特性1.3 总结 二&#xff0c;析构函数2.1 什么是析构函数2.2 析构函数的特性2.3 总结 前言 如果一个类中什么成员都没有&#xff0c;简称为空类。 空类中真的什么都没有吗&#xff1f;并不是&#xff0c;任何…

JVM学习笔记(五)内存模型

目录 1、原子性 1.1 问题分析 1.2 解决方法 2、可见性 2.1 退不出的循环 2.2 解决办法 3、有序性 3.1 诡异的结果 3.2 解决办法 3.3 有序性理解 3.4 happens-before 4、CAS与原子类 4.1 CAS 4.2 乐观锁与悲观锁 4.3 原子操作类 5、synchronized 优化 5.1 轻量…

华为认证云计算前景如何

互联网/移动互联网经历了高速发展的二十年&#xff0c;我们有幸一起见证了华为、阿里、腾讯、百度、字节跳动、京东、滴滴、拼多多等互联网公司的崛起&#xff0c;让普通技术人实现逆袭拿到高薪&#xff0c;也让小镇做题家们有了阶层跨越的机会。 但机会都是留给有准备的人&…

记录一个hive中因没启yarn导致的spark引擎跑insert语句的报错

【背景说明】 刚在hive中配置了Spark引擎&#xff0c;在进行Hive on Spark测试时报错&#xff0c; 报错截图如下&#xff1a; [atguiguhadoop102 conf]$ hive which: no hbase in (/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/opt/module/jdk1.8.0_212/bin:/opt/mod…

分享三个转换速度快、准确率高的视频转文字工具

想要直接将视频转换成文字&#xff0c;转换工具很重要&#xff01;给大家分享三个转换速度快、准确率高的视频转文字工具&#xff0c;轻松完成转换。 1.网易见外 https://sight.youdao.com/ 网易家的智能转写翻译服务工作站&#xff0c;网页端就可以直接使用&#xff0c;支持视…

【threejs教程7】threejs聚光灯、摄影机灯和汽车运动效果

【图片完整效果代码位于文章末】 在上一篇文章中我们实现了汽车模型的加载&#xff0c;这篇文章主要讲如何让汽车看起来像在运动。同时列出聚光灯和摄像机灯光的加载方法。 查看上一篇&#x1f449;【threejs教程6】threejs加载glb模型文件&#xff08;小米su7&#xff09;&…

Web3钱包开发获取测试币-Base Sepolia(二)

Web3钱包开发获取测试币-Base Sepolia(二) 基于上篇 Web3钱包开发获取测试币-Polygon Mumbai(一) &#xff1a;https://suwu150.blog.csdn.net/article/details/137949473 我们今天来说说Base Sepolia网络的添加。 一、添加Base Sepolia到钱包 什么是Base Sepolia&#xff1f…

如何在PostgreSQL中使用索引覆盖扫描提高查询性能?

文章目录 解决方案1. 创建合适的索引2. 确保查询能够使用索引覆盖扫描3. 调整查询以利用索引覆盖扫描4. 监控和调优 示例代码1. 创建索引2. 编写查询3. 检查是否使用索引覆盖扫描4. 调整索引 总结 在PostgreSQL中&#xff0c;索引是提高查询性能的关键工具之一。索引允许数据库…

【Hello算法】 > 第 3 关 >栈与队列

数据结构 之 数组与链表 1 栈 / 栈的常见操作、实现、应用2 队列 /队列的常见操作、实现、应用3 双向队列4 Tips ———————————————————————————————————————————————————————————- ————————————————…

LeetCode in Python 48. Rotate Image/Matrix (旋转图像/矩阵)

旋转图像/矩阵的重点是寻找旋转前后对应位置的坐标关系。 示例&#xff1a; 图1 旋转图像/矩阵的输入输出示意图 代码&#xff1a; class Solution:def rotate(self, matrix):n len(matrix)for i in range(n // 2):for j in range(i, n - 1 - i):topleft matrix[i][j]ma…

Navicat连接SQLSever报错:[08001] MicrosoftTCP Provider 远程主机强迫关闭了一个现有的连接

Navicat连接SQLSever报错&#xff1a;[08001] [Microsoft][SQL Server Native Client 10.0]TCP Provider: 远程主机强迫关闭了一个现有的连接 问题分析 旧版的MSSQL 如果不是最新版的&#xff0c;可以去这安装以下即可。 最新版的MSSQL 如果是安装最新版的MSSQL连接不上很正…

鸿蒙OpenHarmony【轻量系统 环境搭建】 (基于Hi3861开发板)

安装Hi3861开发板特有环境 除上述[安装库和工具集]和[安装编译工具]外&#xff0c;针对Hi3861开发板还需要安装特定的编译工具。 工具要求 表1 Hi3861 WLAN模组需要安装的编译工具 开发工具用途SCons3.0.4编译构建工具python模块&#xff1a;setuptools、kconfiglib、pycry…

Macs Fan Control Pro for Mac:全面优化Mac风扇控制软件

Macs Fan Control Pro for Mac是一款专为苹果电脑用户设计的风扇控制软件&#xff0c;旨在通过精确的风扇速度调节&#xff0c;全面优化Mac的散热性能&#xff0c;确保系统始终运行在最佳状态。 Macs Fan Control Pro for Mac中文版下载 该软件具备实时监控功能&#xff0c;能够…

java 词法分析练习

import parser.Parser;import java.util.ArrayList; import java.util.Arrays; import java.util.List;public class Main {public static void main(String[] args) {// 关键词List<String> keyList new ArrayList<>(Arrays.asList("int","String…

利用STM32 HAL库实现USART串口通信,并通过printf重定向输出“Hello World“

一、开发环境 硬件&#xff1a;正点原子探索者 V3 STM32F407 开发板 单片机&#xff1a;STM32F407ZGT6 Keil版本&#xff1a;5.32 STM32CubeMX版本&#xff1a;6.9.2 STM32Cube MCU Packges版本&#xff1a;STM32F4 V1.27.1 上一篇使用STM32F407的HAL库只需1行代码实现US…

AI大模型探索之路-训练篇1:大语言模型微调基础认知

文章目录 前言一、微调技术概述二、微调的必要性三、大模型的微调方法四、微调过程中的技术细节五、微调后的模型评估与应用总结 前言 在人工智能的广阔研究领域内&#xff0c;大型预训练语言模型&#xff08;Large Language Models, LLMs&#xff09;已经成为推动技术革新的关…

龙芯中标麒麟系统打包生成rpm包步骤

1、检查系统是否安装 rpmbuild 和 rpmdevtools 直至rpmdev-setuptree命令执行成功&#xff0c;执行成功后&#xff0c;此时会在用户根目录下创建文件rpmbuild打包文件夹。 rpmbuild为打包工作目录&#xff0c;结构如下&#xff1a; 解释目录结构&#xff1a; BUILD&#xff1…

Windows安装ElasticSearch

Windows安装ElasticSearch 安装完之后 ElasticSearch服务的段括号是9200&#xff0c;可以直接通过localhost:9200在浏览器里面访问 如下图&#xff1a; 而Kibana&#xff0c;也就是ElasticSearch的客户端的端口号是5601&#xff0c;我们可以直接通过localhost:5601访问 如下…