简单指令实现Docker构建镜像启动运行保存导出后再导入新环境完整全流程

news2024/11/20 14:31:18

项目场景及问题描述

本文做一个简单Docker使用指令指南,可快速实现Docker构建镜像、启动、运行、保存、导出后再导入新环境完整全流程。具体每一个指令又有很多参数和学问,大家可自行查询更详细的解释,本文可用于小白快速构建镜像并使用。


使用Dockerfile自动构建镜像

首先,准备一个Dockerfile,包含你要使用的基础镜像信息。以下面的Dockerfile为例,基础镜像是基于ubuntu20.04操作系统,安装cuda版本为11.2.0,nvidia驱动版本是450.80.02,并安装wget、git、vim、python3、python3-pip、ffmpeg等常用工具,并创建一个工作目录/app。更多参考见本文最后的参考链接,通常GitHub的一些工程也会提供作者使用环境的Dockerfile。

Dockerfile

FROM nvidia/cuda:11.2.0-devel-ubuntu20.04
RUN export DEBIAN_FRONTEND=noninteractive;apt-get update && \
apt-get install -y --no-install-recommends wget git vim python3 python3-pip ffmpeg 
WORKDIR /app

Dockerfile准备好之后,在Dockerfile所在目录执行以下指令构建镜像。

docker build -t MyUbuntu .

(不要漏掉最后的 “.”哦~)
其中参数 -t 后跟的是镜像的标签名(tag)。docker默认会从build context中查找到 Dockerfile文件,也可通过 -f 参数指定Dockerfile的位置。

镜像创建成功后,可以用 docker images 指令查看创建好的镜像,有REPOSITORY, TAG, IMAGE ID等信息。
dockerimages
以上图为例,最新构建的镜像 REPOSITORY 是 ebxxx06,TAG 是 latest,IMAGE ID 是 4baxxxe34(xxx为马赛克)。


docker run 启动镜像

简单启动指令:

docker run -it <镜像的REPOSITORY:TAG>

如:

docker run -it MyUbuntu:latest

复杂一些的启动指令:

docker run -it -v /home/app/VeraCode:/app/VeraCode/ -p 8060:8060 --entrypoint="/bin/bash" --gpus all --name MyUbuntu2023 MyUbuntu:latest

其中,
参数 -v 后跟的是本地目录:docker内的目录,两个目录共享
参数 -p 后是端口映射
参数 --gpus all 是启用GPU
参数 --name 后面跟的是容器名称,自取
最后 MyUbuntu:latest 是你要启动的镜像的REPOSITORY:TAG

容器启动后会直接进入容器,指令 exit 可退出容器。


docker exec 运行容器

启动过的容器再次进入运行指令比较简单,不过需要确认容器是否在运行。
指令 docker ps 可查看正在运行的容器
指令 docker ps -a 可查看历史所有容器

dockerps

通常第一次用 run 指令启动容器退出后,容器的状态会是 Exited
通过指令 docker ps -a 查看要启动的容器的 CONTAINER ID,通常只需要用到前三位,首先,确保容器的状态 STATUS 为 Up,如果不是,可通过指令 docker start <CONTAINER ID> 或 <CONTAINER ID的前三位> 来使容器处于运行状态,再用如下指令运行容器:

docker exec -it <CONTAINER ID><CONTAINER ID的前三位> /bin/bash

以上图为例,指令就是:

docker exec -it 074 /bin/bash

docker commit 保存容器

将容器打包成镜像可以用 docker commit 指令,这样你运行容器时已经装好的环境,比如pip安装的Python库等等,都可以保留下来,不过这样导出的镜像大小会比最初始基础镜像大很多。指令如下:

docker commit <CONTAINER ID> <镜像的REPOSITORY:TAG>

如:

docker commit 074 MyUbuntu:latest

docker save 镜像导出

本地镜像导出可用以下两种指令:

docker save -o MyUbuntu.tar <IMAGE ID>

docker save <IMAGE ID> > MyUbuntu.tar

如:

docker save -o MyUbuntu.tar 4baxxxe34
或
docker save 4baxxxe34 > MyUbuntu.tar

以上 IMAGE_ID 也可以用 <镜像的REPOSITORY:TAG>替换
如:

docker save -o MyUbuntu.tar MyUbuntu:latest
或
docker save MyUbuntu:latest > MyUbuntu.tar

docker load 镜像导入

可以将导出的镜像 MyUbuntu.tar 包传到需要使用该镜像包的docker主机上,导入镜像可用以下两种指令:

docker load -i MyUbuntu.tar

docker load < MyUbuntu.tar

导入后通过 docker images 指令查看导入新环境的镜像。启动、运行用上面介绍过的指令即可。


说明:
1、docker save 和 docker export区别:
docker save 保存镜像所有的信息-包含历史信息,配合docker load 使用
docker export 只导出当前的信息,配合 docker import 使用
2、如果导出镜像时用的IMAGE ID,再导入新环境时,镜像的 REPOSITORY 和TAG 可能为 none,重命名镜像可用如下指令:

docker tag <IMAGE ID> <新镜像名称>:<新镜像标签>

参考引用、补充资料

Docker Dockerfile
创建Docker镜像有几种方式
docker镜像构建,Docker 镜像和容器的导入导出

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/699222.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【doxygen】doxygen 支持 markdown 公式

文章目录 配置 doxygenmarkdown 文件中插入公式在段落中插入公式公式居中显示公式分行显示效果展示 参考链接 配置 doxygen 在 Doxygen 配置文件&#xff08;通常是 Doxyfile &#xff09;中&#xff0c;确保以下选项已启用或设置&#xff1a; MARKDOWN_SUPPORT &#xff1a;设…

100种思维模型之心流理论思维模型-86

亚里士多德说&#xff0c; 人类的终极目标是获得幸福 &#xff01; 那么到底什么是幸福&#xff1f;如何才能获得幸福&#xff1f; 米哈里契克森米哈赖&#xff0c; 积极心理学奠基人之一&#xff0c; “心流” 理论的提出者&#xff0c;他在其著作《心流》一书中这样写道…

操作系统4——存储器管理

本系列博客重点在深圳大学操作系统课程的核心内容梳理&#xff0c;参考书目《计算机操作系统》&#xff08;有问题欢迎在评论区讨论指出&#xff0c;或直接私信联系我&#xff09;。 梗概 本篇博客主要介绍操作系统第四章存储器管理与第五章虚拟存储器的相关知识。 目录 一、…

辛苦写的文章在自媒体上难以盈利的原因分析!

自媒体是指个人或组织通过互联网自主开设自己的媒体平台&#xff0c;并在其平台上发布原创内容&#xff0c;获取流量并从中获得收益的一种模式。自媒体的发展可以让更多的人有机会成为内容创作者&#xff0c;并能够通过自己的努力获得收益&#xff0c;但实际情况是&#xff0c;…

Linux ps命令常见实战用法

文章目录 一、基本介绍1.1 基本介绍1.2 常用参数1.3 字段含义 二、常见用法2.1 查看所有进程2.2 查看特定进程信息 参考资料 Linux中的ps命令是Process Status的缩写。当程序运行在系统上时&#xff0c;我们称之为进程。想监测这些进程&#xff0c;需要熟悉ps命令的用法。ps能输…

2023一造土建安装案例《十年真题▪九套模拟》

造价工程师&#xff0c;是指通过全国统一考试取得中华人民共和国造价工程师执业资格证书&#xff0c;并经注册后从事建设工程造价工作的专业人员。国家对造价工程师实行准入类职业资格制度&#xff0c;纳入国家职业资格目录。凡从事工程建设活动的建设、设计、施工、造价咨询等…

合合信息智能文字识别产品通过中国信通院“可信AI—OCR智能化服务”评估

近年来&#xff0c;我国对数据的重视程度不断加强。2022年1月&#xff0c;国务院印发的《“十四五”数字经济发展规划》进一步提出&#xff0c;到2025年要初步建立数据要素市场体系&#xff0c;并对充分发挥数据要素价值作出重要部署。然而&#xff0c;现阶段有大量的数据信息以…

Java ~ Executor ~ AbstractExecutorService【总结】

前言 文章 相关系列&#xff1a;《Java ~ Executor【目录】》&#xff08;持续更新&#xff09;相关系列&#xff1a;《Java ~ Executor ~ AbstractExecutorService【源码】》&#xff08;学习过程/多有漏误/仅作参考/不再更新&#xff09;相关系列&#xff1a;《Java ~ Execu…

《痞子衡嵌入式半月刊》 第 78 期

痞子衡嵌入式半月刊&#xff1a; 第 78 期 这里分享嵌入式领域有用有趣的项目/工具以及一些热点新闻&#xff0c;农历年分二十四节气&#xff0c;希望在每个交节之日准时发布一期。 本期刊是开源项目(GitHub: JayHeng/pzh-mcu-bi-weekly)&#xff0c;欢迎提交 issue&#xff0c…

2023双态IT北京用户大会回顾(三) | 银行分布式核心智能运维体系思考

​文末附有本场专题演讲视频 2023第五届双态IT北京用户大会&#xff0c;擎创科技专场演讲回顾之三&#xff1a;《银行分布式核心智能运维体系思考》&#xff0c;演讲嘉宾&#xff1a;擎创科技生态合作部总经理 冯陈湧 一、前言&#xff1a;分布式云原生快速发展催生更高的业务要…

解密Docker容器网络

一个Linux容器能看见的“网络栈”&#xff0c;被隔离在它自己的Network Namespace中。 1 “网络栈”的内容 网卡&#xff08;Network Interface&#xff09;回环设备&#xff08;Loopback Device&#xff09;路由表&#xff08;Routing Table&#xff09;iptables规则 对于一…

【PCB专题】Allegro如何设置电源电压属性,将飞线隐藏?

在PCB设计过程中,布局完成之后的布线的顺序一般是先走信号线,然后进行电源的处理、分割。因为电源往往在整个板子上是都有的,所以电源的飞线是非常多,在布线时特别影响其他信号线的布线,界面看着比较杂乱。 如下所示GND和1.8V都存在各种飞线,比较杂乱。 Allegro中有设置…

随想012:断言

C 标准库提供了名为 assert 的断言宏&#xff1b; C# 语言提供了名为 Debug.Assert 的断言方法&#xff1b; Java 语言提供名为 assert 的断言关键字。 主流编程语言不约而同的在语言层面上提供了 断言 机制。 David R. Jamson&#xff0c;编译器 Icc 的开发者之一&#xf…

掌握IO流这一篇就够了

IO流&#xff08;几种常见的流&#xff09; IO流概述IO的分类顶级父类 字节流、字符流字节输出流OutputStream字节输入流InputStreamFileOutputStream类FileOutputStream**写出字节数据** FileInputStream类FileInputStream读取字节数据复制图片 字符流字符输入流Reader字符输出…

主动式和被动式电容笔哪个好用?苹果平板平替笔排行

被动式电容笔与主动式电容笔最大的不同在于主动式电容笔具有更广泛的应用领域&#xff0c;可以与不同种类的电容屏幕进行匹配。随着人们对其了解的不断深入&#xff0c;其应用也日益广泛。除此之外&#xff0c;平替电容笔的技术&#xff0c;也在不断的改进和提高&#xff0c;逐…

ResizeKit.NET 自动更改所有控件和字体大小 -Crack Version

ResizeKit2.NET ---Added support for Microsoft .NET 7.0. 使您的应用程序大小和分辨率独立。 ResizeKit.NET 自动更改所有控件和字体的大小&#xff0c;以便它们可以显示在任何大小的表单上。提供完全控制来自定义调整大小过程。即使用户在运行应用程序时切换表单的大小&…

ReentrantLock源码

介绍 ReentrantLock是Java中的一种可重入锁&#xff0c;也称为重入锁。是一种递归无阻塞的同步机制。它可以等同于 synchronized 的使用&#xff0c;但是 ReentrantLock 提供了比 synchronized 更强大、灵活的锁机制&#xff0c;可以减少死锁发生的概率。 ReentrantLock实现了…

Spring学习笔记---下篇

文章目录 Spring下篇1、代理模式1.1、静态代理1.2、加深理解1.3、动态代理 2、AOP2.1、什么是AOP2.2 、Aop在Spring中的作用2.3、在Spring中使用Aop 3、整合MyBatis3.1、[mybatis-spring介绍](https://mybatis.org/spring/zh/getting-started.html)3.2、整合步骤 4、事务4.1、事…

Linux基础工具|文本编辑器Vim的使用

0.前言 您好这里是limou3434的个人博客&#xff0c;感兴趣可以看看我的其他内容。 本次我给您带来的是Linux下Vim文本编辑器的使用&#xff0c;关于vim&#xff0c;您只需要知道一些常用的指令和操作即可&#xff0c;快速上手的秘诀是实践&#xff0c;并且是多次实践。 1.Vi…

12 MFC常用控件(一)

文章目录 button 按钮设置默认按钮按下回车后会响应禁用开启禁用设置隐藏设置显示设置图片设置Icon设置光标 Cbutton 类创建按钮创建消息单选按钮多选按钮 编辑框组合框下拉框操作 CListBox插入数据获取当前选中 CListCtrl插入数据设置表头修改删除 button 按钮 设置默认按钮按…