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

项目场景及问题描述

本文做一个简单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.hqwc.cn/news/1936.html

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

相关文章

关于Nuxt3.6兼容低版本游览器的实战以及可能存在的问题

当我们网站打包上线后&#xff0c;有些问题我们肯定也要考虑在内&#xff0c;兼容性也是其中一个重要的一种&#xff0c;可能会有人说&#xff0c;都2023年了&#xff0c;还在乎那些废弃的游览器干啥&#xff0c;我只能说&#xff0c;错&#xff01;大错特错&#xff01; 我们不…

【AIGC】Chatglm2-lora微调

ChatGLM2介绍 ChatGLM2-6B源码地址&#xff1a;https://github.com/THUDM/ChatGLM2-6B ChatGLM2-6B 是开源中英双语对话模型 ChatGLM-6B 的第二代版本&#xff0c;在保留了初代模型对话流畅、部署门槛较低等众多优秀特性的基础之上&#xff0c;ChatGLM2-6B 引入了如下新特性&…

文本分析-使用jieba库实现TF-IDF算法提取关键词

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

accountId、uid、roleId 游戏中的3种id

1)accountId&#xff1a; // 是一个字符串 这个是字符串&#xff0c;玩家可以输入名字(比如:输入zfoo) 或者 通过微信生成(openid是不变的)。 2)uid&#xff1a;// long 这个是一个很长的,玩家通过http登录授权后&#xff0c;通过web层&#xff0c;由雪花算法根据accountId生成…

Spring Bean的生命周期解读

目录 1. Spring IOC容器 1.1 Spring IOC 容器的设计 1.1.1 BeanFactory 1.1.2 ApplicationContext 1.2 Spring Bean的生命周期 1.2.1 BeanDefinition 1.2.2 InstantiationAwareBeanPostProcessor和BeanPostProcessor 1.2.3 测试生命周期 1. Spring IOC容器 1.1 Spring …

计算机网络那些事之 MTU 篇 pt.2

哈喽大家好&#xff0c;我是咸鱼 在《计算机网络那些事之 MTU 篇 》中&#xff0c;咸鱼跟大家介绍了 MTU 是指数据链路层能够传输的最大数据帧的大小 如果发送的数据大于 MTU&#xff0c;则就会进行分片操作&#xff08;Fragment&#xff09;&#xff1b;如果小于 MTU&#x…

SpringBoot整合Redis缓存管理

1. 添加 Spring Data Redis 依赖启动器。在 chapter06 项目的 pom.xml 文件中添加 Spring Data Redis 依赖 启动器。 <!-- 引入整合 Redis 缓存的依赖启动器 --> <dependency> <groupId> org.springframework.boot </groupId> <artifactId>…

Java安全——应用安全

Java安全 Java 应用安全 JCE&#xff08;Java Cryptography Extension&#xff09;java加密扩展包 Java Cryptography Extension&#xff08;JCE&#xff09;是一个可选的Java标准扩展&#xff0c;提供了一组用于加密、密钥生成和密钥协商等功能的类和接口。JCE包含了导入、生…

android checkBox的使用

一、前言&#xff1a;之前工作中遇到的checkbox的使用是左边一个复选框&#xff0c;右边一个text。系统学完之后发现那样做的话有点别扭&#xff0c;还是中规中矩的舒坦。记录一下学习经过。 二、代码展示&#xff1a; 1.使用系统自带的checkbox插件。 创建一个CheckBoxActiv…

Solr框架 01 Solr框架简介,安装,配置(Analysis,Dataimport)

Solr简介&#xff1a; Solr是一个高性能&#xff0c;基于Lucene的全文搜索服务器。同时对其进行了扩展&#xff0c;提供了比Lucene更为丰富的查询语言&#xff0c;同时实现了可配置、可扩展&#xff0c;并对查询性能进行了优化&#xff0c;并且提供了一个完善的功能管理界面&am…

CentOs中文件权限命令

文件权限&#xff1a; ls -l命令查看文件详情&#xff0c;前十位就是文件的类型和权限 第一位&#xff1a;类型&#xff1a; - 普通文件 d 目录 l 链接文件&#xff08;快捷方式&#xff09;link 2~4位&#xff1a;所有者的权限 5~7位&#xff1a;所有者所在组其它用户的权限 …

2021 年高教社杯全国大学生数学建模竞赛 E 题 中药材的鉴别 第一题

目录 1.数据预处理 1.1 数据基本信息探索 1.2 数据可视化 1.3 异常值处理 2. 数据特征值提取 2.1 数据标准化 2.2 PCA提取特征值 3. 数据聚类鉴别药材种类 3.1 肘部图确定K值 3.2 轮廓系数图确定K值 3.3 数据聚类 3.4 聚类结果可视化 4. 研究不同种类药材…