将项目封装进docker进行迁移或使用
首先要理解docker的基本使用,本文不做过多阐述,博主也对docker没有了解透彻。
这里列一下docker的基本命令:
docker info # 查看docker信息
docker -v # 查看docker版本
docker images # 查看docker所有的镜像
docker ps -a # 查看docker所有的容器
docker rm ${容器id} # 删除容器
docker rmi ${镜像id} # 删除镜像 -f:强制删除;
docker cp ${本地文件的路径} ${容器id}:${容器内文件路径} # 传输文件,宿主机->容器
docker cp ${容器id}:${容器内文件路径} ${本地文件的路径} # 传输文件,容器->宿主机
docker start ${容器名} # 启动容器
docker attach ${容器名} #进入容器
docker stop ${container id} # 根据容器id终止运行的容器
Ctrl+d # 退出容器
Ctrl+p+q # 退出容器而不关闭
docker rename ${旧的容器名} ${新容器名} # 修改容器名字
docker tag ${旧的容器id\旧的镜像名} ${新的镜像名}
docker commit -m ${备注信息} ${容器id/容器名} ${新的镜像名}:${新的镜像tag} # 修改完容器中内容,保存为新的镜像docker save -o ${目标文件} ${镜像名}:${镜像tag} # 镜像导出
docker save -o nginx.tar nginx:latest # 样例,其中-o和>表示输出到文件,nginx.tar为目标文件,nginx:latest是源镜像名(name:tag)
docker load -i ${目标文件} # 镜像导入
docker load -i nginx.tar # 样例, 其中-i和<表示从文件输入。会成功导入镜像及相关元数据,包括tag信息docker run --name=${容器名} --ipc=host -it --gpus all -p ${主机端口}:${容器端口} --cpu-shares 1024 -v ${主机文件夹}:${容器文件夹} ${REPOSITORY}:${TAG} /bin/bashdocker run --name=mmdet --ipc=host -it --gpus all -p 7777:8888 --cpu-shares 1024 -v /home/gy77:/workspace/ pytorch/pytorch:1.12.0-cuda11.3-cudnn8-devel /bin/bash
# --name: 容器名
# --ipc=host: 容器间共享宿主机的内存
# -i: 交互式操作。
# -t: 终端。
# --gpus all :启动所有的gpu
# detrex:v1: 这是指用 ubuntu 15.10 版本镜像为基础来启动容器。
# --cpu-shares 1024 : 设置容器按比例共享CPU资源(容器A是1024,容器B是2048,则是按照1:2)
# /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。# docker增加非管理员的权限
cho $USER
sudo gpasswd -a $USER docker
newgrp docker
docker 添加国内镜像源
ubuntu:
vim /etc/docker/daemon.json
内容如下:
{"registry-mirrors": ["http://hub-mirror.c.163.com","https://docker.mirrors.ustc.edu.cn","https://registry.docker-cn.com"]
}
service docker restart # 重启docker
docker info # 验证是否成功
封装项目
本文以detrex项目为例,讲解如何把一个项目封装进docker以便更好的转移。
1️⃣ 拉取pytorch镜像
ptorch镜像网址:https://hub.docker.com/r/pytorch/pytorch/tags
去找一个适合自己的pytorch版本镜像,拉取到本地。这里博主拉取 pytorch:1.12.0-cuda11.3-cudnn8-devel 。可以看到是对应的cuda11.3版本,在宿主机(也就是服务器)中安装的cuda版本最好一致。
⚠️ 值得注意的是,我们要拉取结尾为devel
的镜像。
docker pull pytorch/pytorch:1.12.0-cuda11.3-cudnn8-devel
2️⃣ 创建容器
拉取完毕后,我们可以用docker images 命令查看一下,创建容器
gy77@ECS-yd24:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
pytorch/pytorch 1.12.0-cuda11.3-cudnn8-devel 43a3ceca55fd 8 months ago 14.1GB
根据自己的需求创建容器:
docker run --name=${容器名} --ipc=host -it --gpus all -p ${主机端口}:${容器端口} --cpu-shares 1024 -v ${主机文件夹}:${容器文件夹} ${REPOSITORY}:${TAG} /bin/bash# 例子:
docker run --name=detrex --ipc=host -it --gpus all -p 7777:8888 --cpu-shares 1024 -v /home/gy77:/workspace/ pytorch/pytorch:1.12.0-cuda11.3-cudnn8-devel /bin/bash
# --name: 容器名
# --ipc=host: 容器间共享宿主机的内存
# -i: 交互式操作。
# -t: 终端。
# --gpus all :启动所有的gpu
# detrex:v1: 这是指用 ubuntu 15.10 版本镜像为基础来启动容器。
# --cpu-shares 1024 : 设置容器按比例共享CPU资源(容器A是1024,容器B是2048,则是按照1:2)
# /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。
3️⃣ 连接容器
创建容器后,我们就可以在另一个终端中利用 dockers ps -a 命令看到已启动的容器。
如果想让一个新的终端窗口进入容器,使用docker attach命令(容器启动的情况下),容器未启动的情况下,先启动容器。
docker start ${容器名} # 启动容器
docker attach ${容器名} # 连接容器
4️⃣ 在容器中搭建我们项目的环境。
⭐️ 每个人的项目不一致,这里就需要自己在容器中搭建自己的项目环境了。
# 基础的ubuntu软件包先更新一下:
apt update# 搭建项目环境(detrex为例):
cd /workspace
git clone https://github.com/IDEA-Research/detrex.git
cd detrex
git submodule init
git submodule update
python -m pip install -e detectron2
pip install -e .# 测试推理你的项目
cd detrex# download pretrained DINO model
wget https://github.com/IDEA-Research/detrex-storage/releases/download/v0.2.1/dino_r50_4scale_12ep.pth# download the demo image
wget https://github.com/IDEA-Research/detrex-storage/releases/download/v0.2.1/idea.jpg# 验证gpu
python demo/demo.py --config-file projects/dino/configs/dino_r50_4scale_12ep.py \--input "./idea.jpg" \--output "./demo_output.jpg" \--opts train.init_checkpoint="./dino_r50_4scale_12ep.pth"
5️⃣ 将容器打包为镜像。
docker commit -m ${备注信息} ${容器id/容器名} ${新的镜像名}:${新的镜像tag} # 修改完容器中内容,保存为新的镜像
6️⃣ 镜像导出和导入
docker save -o ${目标文件} ${镜像名}:${镜像tag} # 镜像导出
docker save -o detrex_img.tar detrex:latest # 样例,其中-o和>表示输出到文件,nginx.tar为目标文件,nginx:latest是源镜像名(name:tag)
docker load -i ${目标文件} # 镜像导入
docker load -i detrex_img.tar # 样例, 其中-i和<表示从文件输入。会成功导入镜像及相关元数据,包括tag信息
相关文章:
将项目封装进docker进行迁移或使用
首先要理解docker的基本使用,本文不做过多阐述,博主也对docker没有了解透彻。 这里列一下docker的基本命令: docker info # 查看docker信息 docker -v # 查看docker版本 docker images # 查看docker所有的镜…...

matlab - 特殊矩阵、矩阵求值、稀疏矩阵
学习视频1.特殊矩阵1.1 通用特殊矩阵format % 零矩阵(全0) 幺矩阵(全1) 单位矩阵 % zeros ones eye rand(生成0~1的随机元素) randn(生成均值为1,方差为0的符合正太分布的随机阵)zeros(3) % 3x3的全0方阵 zeros(3, 4) % 3x4的全0矩阵 exA ones(3, 5) % 3x5的…...

Flume使用入门
目录 一. Flume简单介绍 1. Agent 2. Source 3. Sink 4. Channel 5. Event 二. 环境安装 1. 创建日志目录 2. 修改日志配置文件 3.修改运行堆内存 4. 确定日志打印的位置 5. 修改flume使用内存 内存调大 三. 校验flume 1. 安装netcat工具和net-tools工具 2. 判…...

【Servlet篇2】Servlet的工作过程,Servlet的api——HttpServletRequest
一、Servlet的工作过程 二、Tomcat的初始化 步骤1:寻找到当前目录下面所有需要加载的Servlet(也就是类) 步骤2:根据类加载的结果创建实例(通过反射),并且放入集合当中 步骤3:实例创建好之后,调用Servlet的init()方…...

【JAVASE】注解
文章目录1.概述2.JDK内置注解2.1override注解2.2 Deprecated注解3.元注解4.注解中定义属性4.1 属性value4.2 属性是一个数组5. 反射注解6.注解在开发中的作用1.概述 注解,也叫注释,是一种引用数据类型。编译后也同样生成class字节码文件。 语法 [修饰…...

【408之计算机组成原理】计算机系统概述
目录前言一、计算机的发展历程1. 计算机发展的四代变化2. 计算机元件的更新换代3. 计算机软件的发展二、计算机系统层次结构1. 计算机系统的组成2. 冯诺依曼体系结构3. 计算机的功能部件1. 输入设备2. 输出设备3. 存储器4. 运算器5. 控制器三、 分析计算机各个部件在执行代码中…...

1.Spring Cloud (Hoxton.SR10) 学习笔记—基础知识
本文目录如下:一、Spring Cloud基础知识什么是微服务架构?服务拆分 有哪些注意事项?什么是分布式集群?分布式的 CAP 原则?组件 - Spring Cloud 哪几个组件比较重要?组件 - 为什么要使用这些组件?组件 - Na…...

嵌入式开发工具箱【持续更新中】【VMware、Ubuntutftp、nfs、SecureCRT、XShell、Source Insight 4.0】
一、概述 本文主要介绍嵌入式开发过程中需要用到的工具及简单的使用方法。避免在搭建嵌入式开发环境时,需要四处寻找文档,收藏此文章,一文搞定。 大多数嵌入式开发环境是使用Linux作为目标开发系统,所以开发主机一般都是Linux系统…...

深究Java Hibernate框架下的Deserialization
写在前面 Hibernate是一个开源免费的、基于 ORM 技术的 Java 持久化框架。通俗地说,Hibernate 是一个用来连接和操作数据库的 Java 框架,它最大的优点是使用了 ORM 技术。 Hibernate 支持几乎所有主流的关系型数据库,只要在配置文件中设置好…...

微服务一 实用篇 - Docker安装
《微服务一 实用篇 - Docker安装》 提示: 本材料只做个人学习参考,不作为系统的学习流程,请注意识别!!! 《微服务一 实用篇 - Docker安装》《微服务一 实用篇 - Docker安装》0.安装Docker1.CentOS安装Docker1.1.卸载(可选)1.2.安装docker1.3.启动docker…...

JavaSE22-集合2-map
文章目录一、集合概念二、map集合1、Map集合的特点2、HashMap2.1 HashMap特点2.2 创建对象2.3 常用方法2.4 遍历2.4.1 使用entrySet遍历2.4.2 使用keySet遍历3、HashMap的key去重原理一、集合概念 集合就是用于存储多个数据的容器。相对于具有相同功能的数组来说,集…...

【项目精选】病历管理系统设计与实现(源码+视频)
点击下载源码 企业财务管理系统主要用于电子病历来提高医院各项工作的效率和质量,促进医学科研、教学;减轻各类事务性工作的劳动强度,使他们腾出更多的精力和时间来服务于病人。本系统结构如下: 电子病例系统: 病人登…...

如何用Python把篮球和鸡联系起来
文章目录画个球让球转起来画个球 不管篮球和不和鸡联系起来,都首先得有个球,或者说要有一个球面,用参数方程可以表示为 xrcosϕcosθyrcosϕsinθzrsinϕ\begin{aligned} x & r\cos\phi\cos\theta\\ y & r\cos\phi\sin\th…...

【RocketMQ】消息的刷盘机制
刷盘策略 CommitLog的asyncPutMessage方法中可以看到在写入消息之后,调用了submitFlushRequest方法执行刷盘策略: public class CommitLog {public CompletableFuture<PutMessageResult> asyncPutMessage(final MessageExtBrokerInner msg) {// …...

AMBA-AXI(一)burst 传输-INCR/WRAP/Fixed
💡Note:本文是根据AXI协议IHI0022F_b_amba_axi_protocol_spec.pdf(issue F)整理的。主要是分享AXI3.0和4.0部分。如果内容有问题请大家在评论区中指出,有补充或者疑问也可以发在评论区,互相学习ὤ…...

Java知识复习(八)Spring基础
1、什么是Spring框架? Spring :是一款开源的轻量级 Java 开发框架,旨在提高开发人员的开发效率以及系统的可维护性 2、Spring、SpringMVC和SpringBoot的区别 Spring主要指Spring Framework,就是指如上图所示的各项功能模块Spr…...
WuThreat身份安全云-TVD每日漏洞情报-2023-02-27
漏洞名称:OTFCC 缓冲区错误漏洞 漏洞级别:中危 漏洞编号:CVE-2022-35060,CNVD-2023-11996,CNNVD-202209-1527 相关涉及:OTFCC OTFCC 漏洞状态:EXP 参考链接:https://tvd.wuthreat.com/#/listDetail?TVD_IDTVD-2022-23648 漏洞名称:MuYucms 存在任意代码执行漏洞 漏洞级别:高危…...

上海交大陈海波教授、夏虞斌教授领衔巨作上市:《操作系统:原理与实现》
❤️作者主页:小虚竹 ❤️作者简介:大家好,我是小虚竹。2022年度博客之星评选TOP 10🏆,Java领域优质创作者🏆,CSDN博客专家🏆,华为云享专家🏆,掘金年度人气作…...
dpi数据接入shell脚
原文:dpi数据接入shell脚本_weixin_34416754的博客-CSDN博客 ##############从ftp服务器拿数据文件 #!/bin/bash #获取感知优良率DPI数据 #DCN服务器信息 uSichuan pS988188# ip137.192.5.53 #获取日期,根据日期抓取文件 Tdate -d "3 days ago&…...

Easyrecovery数据恢复软件工作原理及使用介绍教程
Easyrecovery是一款强大的数据恢复软件,它专门解决磁盘数据恢复问题。在计算机世界里,数据丢失经常是一件令人头疼的事情,但是有了Easyrecovery,您可以放心大胆地享受数据备份和恢复的乐趣。EasyRecovery使用Ontrack公司复杂的模式…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...

【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...

(一)单例模式
一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...
WebRTC从入门到实践 - 零基础教程
WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC? WebRTC(Web Real-Time Communication)是一个支持网页浏览器进行实时语音…...
2.2.2 ASPICE的需求分析
ASPICE的需求分析是汽车软件开发过程中至关重要的一环,它涉及到对需求进行详细分析、验证和确认,以确保软件产品能够满足客户和用户的需求。在ASPICE中,需求分析的关键步骤包括: 需求细化:将从需求收集阶段获得的高层需…...