将项目封装进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公司复杂的模式…...
手机平板能效生态设计指令EU 2023/1670标准解读
手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读,综合法规核心要求、最新修正及企业合规要点: 一、法规背景与目标 生效与强制时间 发布于2023年8月31日(OJ公报&…...
路由基础-路由表
本篇将会向读者介绍路由的基本概念。 前言 在一个典型的数据通信网络中,往往存在多个不同的IP网段,数据在不同的IP网段之间交互是需要借助三层设备的,这些设备具备路由能力,能够实现数据的跨网段转发。 路由是数据通信网络中最基…...
LUA+Reids实现库存秒杀预扣减 记录流水 以及自己的思考
目录 lua脚本 记录流水 记录流水的作用 流水什么时候删除 我们在做库存扣减的时候,显示基于Lua脚本和Redis实现的预扣减 这样可以在秒杀扣减的时候保证操作的原子性和高效性 lua脚本 // ... 已有代码 ...Overridepublic InventoryResponse decrease(Inventor…...
ABAP设计模式之---“Tell, Don’t Ask原则”
“Tell, Don’t Ask”是一种重要的面向对象编程设计原则,它强调的是对象之间如何有效地交流和协作。 1. 什么是 Tell, Don’t Ask 原则? 这个原则的核心思想是: “告诉一个对象该做什么,而不是询问一个对象的状态再对它作出决策。…...
uni-app学习笔记二十七--设置底部菜单TabBar的样式
官方文档地址:uni.setTabBarItem(OBJECT) | uni-app官网 uni.setTabBarItem(OBJECT) 动态设置 tabBar 某一项的内容,通常写在项目的App.vue的onLaunch方法中,用于项目启动时立即执行 重要参数: indexnumber是tabBar 的哪一项&…...
Python基于蒙特卡罗方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融投资中,风险管理是确保资产安全和实现稳健收益的关键环节。随着市场波动性的增加,传统…...
Vue:Form正则校验
目录 1. 只能输入正整数或正小数(保留三位小数) 1. 只能输入正整数或正小数(保留三位小数) cc: [{required: true, message: "钻杆长度不能为空", trigger: "blur" },{pattern: /^\d(\.\d{1,3})?$/, message: 只能输入正整数或正小数(保留三位小数), tri…...
用 n8n 提取静态网页内容:从 HTTP Request 到 HTML 节点全解析
n8n 的 HTTP Request HTML 节点组合是个实用又高效的工具。这篇文章就带你一步步搞懂如何用它们提取静态网页内容,重点解析 HTML 节点参数和 CSS 选择器,让你轻松上手 。 一、整体流程概览 我们的目标是从静态网页中提取特定内容,流程分两…...
JavaWeb:前端工程化-Vue
Vue工程化 介绍 什么是Vue? 小白眼里前端开发 前端工程化 环境准备 D:\Program Files\nodejs Vue项目-快速入门 步骤 D:\front\vue 安装依赖 目录结构 code . vscode打开 启动 VScode侧边栏左下角,没有NPM脚本,如何打开?&…...
AI赋能的浏览器自动化:Playwright MCP安装配置与实操案例
以下是对Playwright MCP的简单介绍: Playwright MCP 是一个基于 Playwright 的 MCP 工具,提供浏览器自动化功能不要求视觉模型支持,普通的文本大语言模型就可以通过结构化数据与网页交互支持多种浏览器操作,包括截图、点击、拖动…...
