目录

一、基本命令

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

🚀 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.pswp.cn/diannao/95308.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/95308.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/95308.shtml

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

相关文章

如何使用AI大语言模型解决生活中的实际小事情?

我们总以为AI是遥不可及的未来科技&#xff0c;却忽视了它早已成为生活中最实用的“隐形助手”。在信息爆炸的今天&#xff0c;我们每天被无数生活琐事包围&#xff1a;一封专业邮件反复修改措辞、孩子突如其来的数学难题、冰箱里仅剩的食材如何搭配、旅行行程的繁琐规划……这…

关于微信小程序的笔记

1.需要获取demo素材图片方法&#xff08;2,3&#xff09;2.使用逆向工具进行解包没有安装node的需要安装一下安装npm i -g wedecode0.8.0-beta.3获取小程序文件存放路径/Users/lin/Library/Containers/com.tencent.xinWeChat/Data/.wxapplet/packages/wx060ecb4f74eac0da根据具…

课堂笔记:吴恩达的AI课(AI FOR EVERYONE)-W2 AI项目工作流程

课堂笔记&#xff1a;吴恩达的AI课&#xff08;AI FOR EVERYONE&#xff09;-W2 AI项目工作流程 一、如何开始一个AI项目&#xff1f; 1、建设项目工作流程 2、选择合适的AI项目 3、为这个项目收集数据和组织团队二、AI项目的工作流程 &#xff08;1&#xff09;机器学习项目的…

逐际动力开源运控 tron1-rl-isaacgym 解读与改进

文章目录概览基础框架解读线速度估计观测结构仿真实验点足式步态设计步态相位与接触状态建模步态接触奖励动作延迟我的改进Point-goal Locomotion观测修改奖励修改预训练地形编码器Sliced Wasserstein AutoEncoder模型训练与结果参考材料概览 这篇博客记录了我参加逐际动力创学…

人工智能-python-机器学习-线性回归与梯度下降:理论与实践

文章目录线性回归与梯度下降&#xff1a;理论与实践1. 引言2. 回归分析2.1 什么是回归&#xff1f;2.2 线性回归2.3 损失函数2.4 多参数回归3. 参数求解&#xff1a;最小二乘法3.1 最小二乘法 MSE3.2 最小二乘法的优缺点优点&#xff1a;缺点&#xff1a;4. 梯度下降4.1 梯度下…

前端,elment-plus组件:表格,分页,对话框,表单

Element Plus 核心特性组件体系&#xff1a;表单、表格、弹窗、导航等高频组件设计理念主题定制&#xff1a;Sass 变量覆盖与暗黑模式无缝切换国际化支持&#xff1a;多语言动态切换的实现机制TypeScript 支持&#xff1a;完整的类型定义与开发友好性快速上手指南安装与基础配置…

【LeetCode】6. Z 字形变换

文章目录6. Z 字形变换题目描述示例 1&#xff1a;示例 2&#xff1a;示例 3&#xff1a;提示&#xff1a;解题思路算法分析问题本质分析Z字形排列过程详解Z字形排列可视化方向控制策略数学规律法详解各种解法对比算法流程图边界情况处理时间复杂度分析空间复杂度分析关键优化点…

spring文件下载的方式

spring文件下载的方式方式一:通过ResponseEntity<Resource> 方式来下载方式二:通过ResponseEntity<StreamingResponseBody> 方式来下载方式三:通过Servlet原生下载方式四:通过ResponseEntity<byte[]> 方式来下载四种下载方式的对比1、核心特性对比2、典型场景…

写一个redis客户端软件,参考 Another Redis Desktop Manager 的设计风格。

一个基于 Electron 开发的现代化 Redis 桌面客户端&#xff0c;参考 Another Redis Desktop Manager 的设计风格。 github仓库地址 https://github.com/henkuoai/redis-man-pc

Web3: DeFi借贷的安全基石, 了解喂价与清算机制的原理与重要性

今天我们要聊一个DeFi世界里至关重要&#xff0c;但又时常被误解的话题&#xff1a;为什么DeFi协议需要定期更新喂价和执行清算&#xff1f; 如果大家参与过DeFi借贷&#xff0c;大家可能看到过“清算”这个词&#xff0c;甚至会有点谈虎色变。但实际上&#xff0c;清算和为其提…

「iOS」————响应者链与事件传递链

iOS学习响应者链和事件传递链传递链&#xff1a;hitTest:withEvent**pointInside:withEvent**响应链第一响应者和最佳响应者触摸事件&#xff08;UITouch&#xff09;UIGestureRecognizer&#xff08;手势识别器&#xff09;响应者链和事件传递链 iOS事件的主要由&#xff1a;…

修复图像、视频和3D场景的AI工具–Inpaint Anything

TL; DR&#xff1a;用户可以通过单击来选择图像中的任何对象。借助强大的视觉模型&#xff0c;例如SAM、LaMa和稳定扩散 (SD)&#xff0c;Inpaint Anything能够顺利地移除对象&#xff08;即Remove Anything&#xff09;。此外&#xff0c;在用户输入文本的提示下&#xff0c;I…

java -jar xxx.jar 提示xxx.jar中没有主清单属性报错解决方案

xxx.jar 中没有主清单属性 &#xff08;no main manifest attribute&#xff09;解决方案 java -jar xxx.jar 提示xxx.jar中没有主清单属性报错解决方案 这个错通常出现在你用 java -jar xxx.jar 启动&#xff0c;但 JAR 的 META-INF/MANIFEST.MF 里没有 Main-Class 条目&#…

Myqsl建立库表练习

目录 一、windows中选择一种方式安装Mysql8.0 二、新建产品库mydb6_product 1. 新建3张表如下&#xff1a; 1&#xff09;employees表 2&#xff09;orders表 3&#xff09;invoices表 三、新建员工库mydb8_worker&#xff0c;添加自定义表内容并插入数据 1. 新建库表 2. 插…

STM32 输入捕获,串口打印,定时器,中断综合运用

实验目的 使用定时器 2 通道 2 来捕获按键 2 按下时间&#xff0c;并通过串口打印。 计一个数的时间&#xff1a;1us&#xff0c;PSC71&#xff0c;ARR65535 下降沿捕获、输入通道 2 映射在 TI2 上、不分频、不滤波输入捕获原理定时器输入捕获实验配置步骤测量按键按下时长思路…

Nacos-2--Nacos1.x版本的通信原理

在Nacos 1.x版本中&#xff0c;客户端长轮询&#xff08;Long Polling&#xff09;和服务端UDP主动推送是两种不同的机制&#xff0c;分别用于配置管理和服务发现场景。它们的核心目标都是实现动态更新的实时感知&#xff0c;但实现方式、数据内容和适用场景完全不同。 1、长轮…

机器学习——09 聚类算法

1 聚类算法聚类算法&#xff1a; 是一种无监督学习算法&#xff0c;它不需要预先知道数据的类别信息&#xff0c;而是根据样本之间的相似性&#xff0c;将样本划分到不同的类别中&#xff1b;不同的相似度计算方法&#xff0c;会得到不同的聚类结果&#xff0c;常用的相似度计算…

生成式AI应用生态的爆发与专业化演进:从零和博弈到正和共赢

2025年,生成式AI产业规模已突破7000亿元,全球生成式AI市场规模预计在2028年达到2842亿美元(IDC数据)。在这场技术革命中,AI基础模型的分化已证明:差异化竞争而非同质化替代,才是推动产业发展的核心逻辑。如今,这一规律正从基础模型层向应用生成平台层蔓延——Lovable、…

Mysql——Sql的执行过程

目录 一、Sql的执行过程流程图解 二、Sql的执行过程流程 1.2.1、建立连接 1.2.2、服务层(缓存、解析器、预处理器、优化器、执行器) 1.2.2.1、缓存 1.2.2.2、解析器 1.2.2.3、预处理器 1.2.2.4、优化器 1.2.2.5、执行器 1.2.3、引擎层 一、Sql的执行过程流程图解 Sql的执行过…

【Axure高保真原型】地图路线和定位

今天和大家分享地图路线和定位的原型模版&#xff0c;载入后&#xff0c;可以查看汽车行进路线和所在定位 提供了停靠和不停靠站点两个案例&#xff0c;具体效果可以打开下方原型地址体验或者点击下方视频观看 【Axure高保真原型】地图路线和定位【原型预览含下载地址】 https…