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

将项目封装进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的基本使用&#xff0c;本文不做过多阐述&#xff0c;博主也对docker没有了解透彻。 这里列一下docker的基本命令&#xff1a; docker info # 查看docker信息 docker -v # 查看docker版本 docker images # 查看docker所有的镜…...

matlab - 特殊矩阵、矩阵求值、稀疏矩阵

学习视频1.特殊矩阵1.1 通用特殊矩阵format % 零矩阵(全0) 幺矩阵(全1) 单位矩阵 % zeros ones eye rand(生成0~1的随机元素) randn(生成均值为1&#xff0c;方差为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&#xff1a;寻找到当前目录下面所有需要加载的Servlet(也就是类) 步骤2&#xff1a;根据类加载的结果创建实例(通过反射)&#xff0c;并且放入集合当中 步骤3&#xff1a;实例创建好之后&#xff0c;调用Servlet的init()方…...

【JAVASE】注解

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

【408之计算机组成原理】计算机系统概述

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

1.Spring Cloud (Hoxton.SR10) 学习笔记—基础知识

本文目录如下&#xff1a;一、Spring Cloud基础知识什么是微服务架构&#xff1f;服务拆分 有哪些注意事项&#xff1f;什么是分布式集群?分布式的 CAP 原则&#xff1f;组件 - Spring Cloud 哪几个组件比较重要&#xff1f;组件 - 为什么要使用这些组件&#xff1f;组件 - Na…...

嵌入式开发工具箱【持续更新中】【VMware、Ubuntutftp、nfs、SecureCRT、XShell、Source Insight 4.0】

一、概述 本文主要介绍嵌入式开发过程中需要用到的工具及简单的使用方法。避免在搭建嵌入式开发环境时&#xff0c;需要四处寻找文档&#xff0c;收藏此文章&#xff0c;一文搞定。 大多数嵌入式开发环境是使用Linux作为目标开发系统&#xff0c;所以开发主机一般都是Linux系统…...

深究Java Hibernate框架下的Deserialization

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

微服务一 实用篇 - Docker安装

《微服务一 实用篇 - Docker安装》 提示: 本材料只做个人学习参考,不作为系统的学习流程,请注意识别!!! 《微服务一 实用篇 - Docker安装》《微服务一 实用篇 - Docker安装》0.安装Docker1.CentOS安装Docker1.1.卸载&#xff08;可选&#xff09;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去重原理一、集合概念 集合就是用于存储多个数据的容器。相对于具有相同功能的数组来说&#xff0c;集…...

【项目精选】病历管理系统设计与实现(源码+视频)

点击下载源码 企业财务管理系统主要用于电子病历来提高医院各项工作的效率和质量&#xff0c;促进医学科研、教学&#xff1b;减轻各类事务性工作的劳动强度&#xff0c;使他们腾出更多的精力和时间来服务于病人。本系统结构如下&#xff1a; 电子病例系统&#xff1a; 病人登…...

如何用Python把篮球和鸡联系起来

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

【RocketMQ】消息的刷盘机制

刷盘策略 CommitLog的asyncPutMessage方法中可以看到在写入消息之后&#xff0c;调用了submitFlushRequest方法执行刷盘策略&#xff1a; public class CommitLog {public CompletableFuture<PutMessageResult> asyncPutMessage(final MessageExtBrokerInner msg) {// …...

AMBA-AXI(一)burst 传输-INCR/WRAP/Fixed

&#x1f4a1;Note&#xff1a;本文是根据AXI协议IHI0022F_b_amba_axi_protocol_spec.pdf&#xff08;issue F&#xff09;整理的。主要是分享AXI3.0和4.0部分。如果内容有问题请大家在评论区中指出&#xff0c;有补充或者疑问也可以发在评论区&#xff0c;互相学习&#x1f64…...

Java知识复习(八)Spring基础

1、什么是Spring框架&#xff1f; Spring &#xff1a;是一款开源的轻量级 Java 开发框架&#xff0c;旨在提高开发人员的开发效率以及系统的可维护性 2、Spring、SpringMVC和SpringBoot的区别 Spring主要指Spring Framework&#xff0c;就是指如上图所示的各项功能模块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 存在任意代码执行漏洞 漏洞级别:高危…...

上海交大陈海波教授、夏虞斌教授领衔巨作上市:《操作系统:原理与实现》

❤️作者主页&#xff1a;小虚竹 ❤️作者简介&#xff1a;大家好,我是小虚竹。2022年度博客之星评选TOP 10&#x1f3c6;&#xff0c;Java领域优质创作者&#x1f3c6;&#xff0c;CSDN博客专家&#x1f3c6;&#xff0c;华为云享专家&#x1f3c6;&#xff0c;掘金年度人气作…...

dpi数据接入shell脚

原文&#xff1a;dpi数据接入shell脚本_weixin_34416754的博客-CSDN博客 ##############从ftp服务器拿数据文件 #!/bin/bash #获取感知优良率DPI数据 #DCN服务器信息 uSichuan pS988188# ip137.192.5.53 #获取日期&#xff0c;根据日期抓取文件 Tdate -d "3 days ago&…...

Easyrecovery数据恢复软件工作原理及使用介绍教程

Easyrecovery是一款强大的数据恢复软件&#xff0c;它专门解决磁盘数据恢复问题。在计算机世界里&#xff0c;数据丢失经常是一件令人头疼的事情&#xff0c;但是有了Easyrecovery&#xff0c;您可以放心大胆地享受数据备份和恢复的乐趣。EasyRecovery使用Ontrack公司复杂的模式…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢&#xff0c;博主的学习进度也是步入了Java Mybatis 框架&#xff0c;目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学&#xff0c;希望能对大家有所帮助&#xff0c;也特别欢迎大家指点不足之处&#xff0c;小生很乐意接受正确的建议&…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

三体问题详解

从物理学角度&#xff0c;三体问题之所以不稳定&#xff0c;是因为三个天体在万有引力作用下相互作用&#xff0c;形成一个非线性耦合系统。我们可以从牛顿经典力学出发&#xff0c;列出具体的运动方程&#xff0c;并说明为何这个系统本质上是混沌的&#xff0c;无法得到一般解…...

html-<abbr> 缩写或首字母缩略词

定义与作用 <abbr> 标签用于表示缩写或首字母缩略词&#xff0c;它可以帮助用户更好地理解缩写的含义&#xff0c;尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时&#xff0c;会显示一个提示框。 示例&#x…...

Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信

文章目录 Linux C语言网络编程详细入门教程&#xff1a;如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket&#xff08;服务端和客户端都要&#xff09;2. 绑定本地地址和端口&#x…...