当前位置: 首页 > news >正文

docter的使用、vscode(cursor)和docker的连接,详细分析说明

目录

一、基本命令

二、用案例来学习使用方法

🚀 Pull Python 3.11 镜像并创建命名容器

📋 其他有用命令

在容器中安装依赖

三、直接在镜像中安装依赖(创建自己定制的镜像)

四、在 cursor 中选用容器作为编译器

五、对于整个开发项目,可以同改镜像的 .json 配置文件,更好地管理项目。


一、基本命令

参考视频:40分钟的Docker实战攻略,一期视频精通Docker_哔哩哔哩_bilibili


安装桌面端部分可参考视频:官网安装

先打开docker的桌面版本,一直开着。

打开命令行窗口,

查看版本命令:docker --version


加速配置;

"registry-mirrors": ["https://docker.m.daocloud.io","https://docker.1panel.live","https://hub.rat.dev"]

复制到:docker桌面端.设置->Docker Engine:

粘贴上,粘贴结果如下:


列出所有镜像

docker images

删除镜像

docker rmi 镜像ID

拉取特定cpu架构的镜像:

拉取镜像:

docker pull python:3.11


使用镜像创建并运行容器:(用模具做糕点)

docker run 镜像名字/镜像ID
docker run -d 镜像名字/镜像ID


查看正在运行的容器:

docker ps

宿主机与容器端口映射:(端口绑定)

docker run -p 80:80 镜像名字/镜像ID

挂载卷 ( 目录绑定)联系宿主机与容器的目录

docker run -v 80:80 镜像名字/镜像ID

删除容器:

docker rm 容器ID

下载镜像命令:docker pull

docker pull python:3.11




二、用案例来学习使用方法

在cursor中使用docker

🚀 Pull Python 3.11 镜像并创建命名容器

1. 拉取Python 3.11镜像:

docker pull python:3.11

2. 创建并运行名为camel_env的容器:

docker run -it --name camel_env -v ${PWD}:/app -w /app python:3.11 bash

其中的 -v ${PWD}:/app 表示将当前目录和容器中的 app 目录进行捆绑。

3. 或者一步完成(推荐):

docker run -it --name camel_env -v ${PWD}:/app -w /app python:3.11 bash

📋 其他有用命令

停止正在运行的容器:

exit

启动已存在的camel_env容器:

docker start -i camel_env

这种方式启动的容器,使用exit后容器就直接停止运行了

进入运行中的camel_env容器:

docker exec -it camel_env bash

(这个地方我测试了一下,在docker桌面端run容器后,在命令行窗口可以使用这个命令进入容器,其实上面那个命令就包含了运行容器并进入,但如果使用桌面端启动容器,再使用此命令进入容器的话,使用exit退出容器的时候容器不会停止运行)

在camel_env中运行Python脚本:(这个命令是没进入容器时使用的)

docker exec camel_env python /app/test.py

进入容器后可直接用如下命令来运行脚本:

python /app/test.py

删除容器(如需重新创建):

docker rm camel_env

查看容器状态:

docker ps -a

这样您就有了一个基于Python 3.11的Docker环境,命名为camel_env!

在容器中安装依赖

进入容器后(就相当于linux的命令行窗口了),安装依赖:

pip install -r requirements.txt

这里的依赖是安装到了容器中,原镜像环境并没有依赖。

三、直接在镜像中安装依赖(创建自己定制的镜像)

首先创建文件 Dockerfile,下面是一个示例:

# 使用Python 3.11作为基础镜像
FROM python:3.11# 设置工作目录
WORKDIR /app# 复制requirements.txt并安装依赖
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt# 复制项目文件到镜像
COPY . .# 设置环境变量
ENV PYTHONPATH=/app
ENV PYTHONUNBUFFERED=1# 默认运行test.py(可以在运行时覆盖)
CMD ["python", "test.py"]

基于上述文件创建镜像命令:

docker build -t camel_env_custom .

此时这个镜像名叫 camel_env_custom ,用它创建出来的容器,都已经包含依赖了。

使用上面创建的镜像可创建有依赖的容器:

# 基于这个镜像创建的每个容器都有依赖
docker run -it --name container1 camel_env_custom bash
docker run -it --name container2 camel_env_custom bash
docker run -it --name container3 camel_env_custom bash

将自己的镜像push到官网:参考 这里

在命令行窗口登录docker hub:

docker login

将镜像先打成 tag :

docker tag camel_env_mirror tianhaoyan/docker_camel_env_mirror:camel_env_mirror

然后将 tag pull 到 hub

拉取指定镜像

docker pull <用户名>/<镜像名>:<标签>
# 例如 docker pull username/myapp:latest   

四、在 cursor 中选用容器作为编译器

使用上述方法先创建一个包含依赖的镜像,然后创建容器,将当前项目挂在到容器中的/app文件夹

docker run -v .:app -it --name container2 camel_env_custom bash

法一:

        随后在已安装的扩展(containers)界面,选中刚才创建的镜像,右击,选择 Attach cursor,这会新开一个窗口,在新开的窗口中点击 open folder(注意是左侧 connected to remote中的 open floder,选择容器中的/app文件夹,不要再打开本地文件夹),打开后,这里的工作目录是容器中,这个工作目录和原目录(另一个cursor窗口中的)是挂载着的,同删同改,注意原cursor窗口不要停止容器,否则第二个cursor窗口将断开。

要想第一个窗口exit到本地环境后,第二个窗口仍能正常连接容器,就得让容器不停止,可用使用在docker桌面端run容器的方法(这里如果载桌面端docker中打开的容器的话,在第一个cursor窗口的shell中 exit 退出容器的话,容器仍然不会停止,这样的话第二个cursor窗口就不会断开)

法二:

        或在扩展 dev containers 界面,右击将要使用的容器,选择 Attach in current windows ,同样地打开容器中的 /app 文件夹,这个可用在当前窗口就连接到容器,不会有第二个窗口

注:一个新的容器需要新安装python扩展和debugger扩展(我也不知道为什么,为什么扩展会和环境有绑定呢?)

五、对于整个开发项目,可以同改镜像的 .json 配置文件,更好地管理整个项目的环境。

主要是下面的四个文件:

\Dockerfile

.devcontainer\devcontainer.json

.devcontainer\docker-compose.yml

\start-dev-container.ps1

待深入探索~

windows系统,默认docker是安装在C盘的,

拉取的镜像保存在:C:\Users\Administrator\AppData\Local\Docker\wsl\disk ,非常占用空间,可通过下面方法将镜像放在其他盘:

在桌面端,设置-->Resources-->Disk image location,更改即可。

http://www.dtcms.com/a/326257.html

相关文章:

  • (一)vscode搭建espidf环境
  • react路由跳转与路由懒加载等(对照vue来说一说不同之处)
  • 前端开发:React(3)—— 组件运作和事件处理
  • 【论文阅读】BEVFormer论文解析及Temporal Self-Attention、Spatial Cross-Attention注意力机制详解及代码示例
  • 如何平衡短期与长期需求
  • PCIE 设备百科
  • 【运维进阶】LAMPLNMP 最佳实践
  • MPXxx6115A Series的概述以及 MPXxx6115A series 用OSS-ECAL的提供情况
  • Pytest 全流程解析:执行机制与报告生成实战指南
  • html转成markdown(1.0.0)
  • Eino中的两种应用模式:“单独使用”和“在编排中使用”
  • ZKmall开源商城多商户架构:平衡管理与运营的技术方案
  • 【lucene】livedocs描述
  • 如何开始创业?
  • OpenBMC中phosphor-ipmi-host深度解析:架构、原理与应用实践
  • 机器学习TF-IDF算法详解
  • scikit-learn/sklearn学习|岭回归解读
  • AI 视频卫士:AI 无人机巡检,适配多元河道场景的治理利器
  • 网络基础与套接字的学习
  • canvas实现图片标注之Fabric.js从入门学习到实现labelImg矩形多边形标注工具【下】
  • 河北邢台数控滑台与机器人行走轨道的内在联系
  • 煤矿工地运煤卡车的4G远程视频监控解决方案
  • QT通过qputenv设置环境变量与使用(AI生成)
  • vue2中this.$createElement()在vue3中应该如何改造
  • 开闭原则代码示例
  • Spring Framework源码解析——BeanPostProcessor
  • 进程的理解
  • 无人机航拍数据集|第12期 无人机停车场车辆计数目标检测YOLO数据集1568张yolov11/yolov8/yolov5可训练
  • 数字图像处理4
  • Spring Framework源码解析——InitializingBean