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.mzph.cn/web/787.shtml

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

相关文章

缓存的使用及常见问题的解决方案

用户通过浏览器向我们发送请求&#xff0c;这个时候浏览器就会建立一个缓存&#xff0c;主要缓存一些静态资源&#xff08;js、css、图片&#xff09;&#xff0c;这样做可以降低之后访问的网络延迟。然后我们可以在Tomcat里面添加一些应用缓存&#xff0c;将一些从数据库查询到…

Flask:URL与视图的映射

默认端口号80、443 blog_id 限制数据类型的话&#xff08;int&#xff09; 除此之外别的数据类型也可以&#xff0c;或者多个&#xff08;用any&#xff09; /book/list?page6

【笔记】ASP.NET Core Web API之Token验证

在实际开发中经常需要对外提供接口以便客户获取数据&#xff0c;由于数据属于私密信息&#xff0c;并不能随意供其他人访问&#xff0c;所以就需要验证客户身份。那么如何才能验证客户的身份呢&#xff1f;一个简单的小例子&#xff0c;简述ASP.NET Core Web API开发过程中&…

Git学习笔记(三)Git分支

Git分支是Git中非常重要的一个概念&#xff0c;无论是个人开发还是多人协作中&#xff0c;分支都起着至关重要的作用。几乎所有的版本控制系统都以某种形式支持分支。 使用分支意味着你可以把你的工作从开发主线上分离 开来进行重大的Bug修改、开发新的功能&#xff0c;以免影响…

Linux驱动开发笔记(零)驱动基础知识及准备

文章目录 前言一、Liunx、MCU和FPGA编程的区别二、Linux内核模块1. 什么是内核模块2. 内核模块的代码架构3. 头文件4. 模块参数5. makefile说明 三、 驱动程序设计思路1. 基本步骤2. 设备号3. 数据结构3.1 file_operations3.2 file3.3 inode3.4 哈希表3.5 cdev结构体3.6 kobj_m…

[Linux][进程信号][一][信号基础][如何产生信号]详细解读

目录 0.前言预备1.系统定义的信号列表2.核心转储 -- Core Dump 1.信号基础1.信号概念2.信号处理方式概览3.理解信号如何被保存4.信号发送的本质 2.如何产生信号&#xff1f;1.终端按键产生信号2.系统调用接口1.kill()2.raise()3.abort()4.如何理解&#xff1f; 3.由软件条件产生…

C# 图像旋转一定角度后,对应坐标怎么计算?

原理分析 要计算图像内坐标在旋转一定角度后的新坐标&#xff0c;可以使用二维空间中的点旋转公式。假设图像的中心点&#xff08;即旋转中心&#xff09;为 (Cx, Cy)&#xff0c;通常对于正方形图像而言&#xff0c;中心点坐标为 (Width / 2, Height / 2)。给定原坐标点 (X, …

开发与产品的战争之自动播放视频

开发与产品的战争之自动播放视频 起因 产品提了个需求&#xff0c;对于网站上的宣传视频&#xff0c;进入页面就自动播放。但是基于我对chromium内核的一些浅薄了解&#xff0c;我当时就给拒绝了: “浏览器不允许”。&#xff08;后续我们浏览器默认都是chromium内核的&#…

【深度学习】Vision Transformer

一、Vision Transformer Vision Transformer (ViT)将Transformer应用在了CV领域。在学习它之前&#xff0c;需要了解ResNet、LayerNorm、Multi-Head Self-Attention。 ViT的结构图如下&#xff1a; 如图所示&#xff0c;ViT主要包括Embedding、Encoder、Head三大部分。Class …

OpenHarmony鸿蒙南向开发案例:【智能燃气检测设备】

样例简介 本文档介绍了安全厨房案例中的相关智能燃气检测设备&#xff0c;本安全厨房案例利用轻量级软总线能力&#xff0c;将两块欧智通V200Z-R/BES2600开发板模拟的智能燃气检测设备和燃气告警设备组合成。当燃气数值告警时&#xff0c;无需其它操作&#xff0c;直接通知软总…

VOS3000加装登陆服务器安全防护系统有用吗

VOS3000是一款专业的软交换系统&#xff0c;它主要用于中小规模的VoIP运营业务&#xff0c;包括运营费率设定、套餐管理&#xff0c;账户管理、业终端管理、网关管理、数据查询、卡类管理、号码管理、系统管理等功能1。而关于加装登陆服务器安全防护系统是否有用&#xff0c;这…

2.4 Web容器配置:Tomcat

2.4 Web容器配置 2.4.1Tomcat配置1.常规配置2. HTTPS配置 *********** 2.4.1Tomcat配置 1.常规配置 在SpringBoot项目中&#xff0c;可以内置Tomcat、Jetly、Undertow、Netty等容器。 当开发者添加了spring-boot-starter-web依赖之后&#xff0c;默认会使用Tomcat作为Web容器…

基于Springboot+Vue的Java项目-网上点餐系统开发实战(附演示视频+源码+LW)

大家好&#xff01;我是程序员一帆&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &am…

【EdgeBox-8120AI-TX2】Ubuntu18.04 + ROS_ Melodic + 星秒PAVO2单线激光 雷达评测

大家好&#xff0c;我是虎哥&#xff0c;好久不见&#xff0c;最近这断时间出现了一点变故&#xff0c;开始自己创业&#xff0c;很多事需要忙&#xff0c;所以停更了大约大半年&#xff0c;最近一切已经理顺&#xff0c;所以我还是抽空继续我之前的FLAG&#xff0c;CSDN突破十…

牛客NC314 体育课测验(一)【中等 图,BFS,拓扑排序 Java,Go、PHP】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/1a16c1b2d2674e1fb62ce8439e867f33 核心 图&#xff0c;BFS,拓扑排序&#xff0c;队列参考答案Java import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修…

数据库——实验9 存储过程的使用

1. 存储过程的定义 存储过程是一系列预先编辑好的、能实现特定数据操作功能的SQL 代码集&#xff0c;它与特定的数据库相关联&#xff0c;存储在SQL Server服务器上。用户可以像使用自定义的函数一样重复调用这些存储过程&#xff0c;实现它所定义的操作。 2. 存储过程的类型…

后台管理系统加水印(react)

效果 代码图片 代码 window.waterMark function (config) {var defaultConfig {content: 我是水印,fontSize: 16px,opacity: 0.3,rotate: -15,color: #ADADAD,modalId: J_waterMarkModalByXHMAndDHL,};config Object.assign({}, defaultConfig, config);var existMarkModal…

镜舟科技荣获金科创新社 2024 年度金融数据智能解决方案奖

近日&#xff0c; 镜舟科技凭借领先的金融实时数仓构建智能经营解决方案&#xff0c;在“金科创新社第六届金融数据智能优秀解决方案评选”活动中&#xff0c;成功入选“数据治理与数据平台创新优秀解决方案”榜单。 金科创新社主办的“鑫智奖”评选活动&#xff0c;旨在展示…

【解决】Caused by: javax.net.ssl.SSLHandshakeException: PKIX path building failed

问题原因&#xff1a; 在Java8及高版本以上的版本在源应用程序不信任目标应用程序的证书&#xff0c;因为在源应用程序的JVM信任库中找不到该证书或证书链。也就是目标站点启用了HTTPS 而缺少安全证书时出现的异常 解决方案&#xff1a; 我使用的是忽略证书验证 public clas…

【配电网故障定位】基于二进制矮猫鼬优化算法的配电网故障定位 33节点配电系统故障定位【Matlab代码#82】

文章目录 【获取资源请见文章第6节&#xff1a;资源获取】1. 配电网故障定位2. 二进制矮猫鼬优化算法3. 算例展示4. 部分代码展示5. 仿真结果展示6. 资源获取 【获取资源请见文章第6节&#xff1a;资源获取】 1. 配电网故障定位 配电系统故障定位&#xff0c;即在配电网络发生…