Docker Image(镜像)——5

目录:

  1. Docker 镜像是什么
  2. 镜像生活案例
  3. 镜像分层生活案例
  4. 为什么需要镜像
  5. 镜像命令详解
    1. 镜像命令清单
    2. docker images
    3. docker tag
    4. docker pull
    5. docker push
    6. docker rmi
    7. docker save
    8. docker load
    9. docker history
    10. docker import
    11. docker image prune
    12. docker build
  6. 镜像操作案例
    1. 查找镜像
    2. 下载镜像
    3. 查看镜像及列表存储位置
    4. 打标签
    5. 推送镜像
    6. 运行容器
    7. 镜像删除
  7. 镜像综合实战
    1. 实战一、离线迁移镜像
    2. 实战二、镜像存储的压缩与共享

1. Docker 镜像是什么

  • Docker image 本质上是一个 read-only 只读文件, 这个文件包含了文件系统、源码、库文件、依赖、工具等一些运行 application 所必须的文件。
  • 我们可以把 Docker image 理解成一个模板, 可以通过这个模板实例化出来很多容器。
  • image 里面是一层层文件系统 Union FS。联合文件系统,可以将几层目录挂载到一起,形成一个虚拟文件系统。
  • 每一层文件系统我们叫做一层 layer,联合文件系统可以对每一层文件系统设置三种权限,只读(readonly)、读写(readwrite)和写出(whiteout-able),但是 docker镜像中每一层文件系统都是只读的。
  • 构建镜像的时候,从一个最基本的操作系统开始,每个构建的操作都相当于做一层的修改,增加了一层文件系统。一层层往上叠加,上层的修改会覆盖底层该位置的可见性,这也很容易理解,就像上层把底层遮住了一样。当你使用的时候,你只会看到一个完全的整体,你不知道里面有几层,也不清楚每一层所做的修改是什么。

2.镜像生活案例

镜像相当于我们 java 或者 C++中的类,相当于一个模板,可以很方便的构建出来不同的对象。

 

3.镜像分层生活案例

我们以日常的地板为例,开发商的房子提供给用户的时候一般是做好了地暖,而这些地暖其实是一层一层添加的,最底层的钢筋水泥层,然后添加保温层,采暖管,再铺设水泥层,到最后交付的时候家家户户都是水泥面,这一层一般是不可修改的,最上层用户一般会再铺设商木地板或者地板砖每家每户的选择不一样,相当于我们镜像的容器层。

 

4.为什么需要镜像

  • 在部署应用时,通过手工或写一些脚本的方式进行部署。这样部署面临问题就是云端和本地环境一致问题。用户为每个应用打包过程比较繁琐,需要配置和给中修改等操作,非常费劲。
  • 然而, Docker 镜像就是为了解决这个小小的打包功能,突然一夜之间成名。那么,你可能说 Docker 镜像就是个压缩包,是的,你猜对了,它就像一个压缩包文件。它是如何解决 Paas 时代所面临的云端和本地一致性问题?很简单,它是把一个镜像制作成一个完整的操作系统所有文件和对应的目录结构,这样的压缩包是跟你本地和测试环境用的操作系统一摸一样。
  • docker 最大的贡献就是定义了容器镜像的分层的存储格式, docker 镜像技术的基础是联合文件系统(UnionFS),其文件系统是分层的。这样既可以充分利用共享层,又可以减少存储空间占用。
  • docker 镜像提供了一种打包应用程序和预配置服务器环境的便捷方式,可以很方便的将其用于个人用途或与其他 Docker 用户公开共享。
     

5.镜像命令详解

镜像命令清单

docker images 

功能

列出本地镜像

语法

docker images [OPTIONS] [REPOSITORY[:TAG]]

别名

docker image ls, docker image list

关键参数

  • -a :列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层);
  • --digests :显示镜像的摘要信息;
  • -f :显示满足条件的镜像;
  • --format :指定返回值的模板文件;
  • --no-trunc :显示完整的镜像信息;
  • -q :只显示镜像 ID。

样例

#列出本地全部镜像
docker images
#列出本地镜像中 REPOSITORY 为 ubuntu 的镜像列表。
docker images ubuntu
docker tag

功能

标记本地镜像,将其归入某一仓库。

语法

docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]

别名

docker image tag

样例

docker tag ubuntu:22.04 myregistry.com/myubuntu:22.04
docker pull

参考镜像仓库命令

docker push

参考镜像仓库命令

docker rmi

功能

删除镜像

语法

docker rmi [OPTIONS] IMAGE [IMAGE...]

别名

docker image rm, docker image remove

关键参数

-f :强制删除;

--no-prune :不移除该镜像的过程镜像,默认移除;

样例

root@139-159-150-152:/data/var/lib/docker/overlay2# docker rmi
maxhou/mybusybox:v0.1
Untagged: maxhou/mybusybox:v0.1
Untagged:
maxhou/mybusybox@sha256:2c8ed5408179ff4f53242a4bdd2706110ce000be23
9fe37a61be9c52f704c437
docker save

功能

将指定镜像保存成 tar 归档文件。

语法

docker save [OPTIONS] IMAGE [IMAGE...]

别名

docker image save

关键参数

-o :输出到的文件

样例

root@139-159-150-152:/data/myworkdir# docker save -o
mynginx_1.22.1.tar nginx:1.22.1
root@139-159-150-152:/data/myworkdir# ll
total 142756
drwxr-xr-x 2 root root 4096 Mar 13 15:05 ./
drwx--x--x 5 root root 4096 Mar 13 15:03 ../
-rw------- 1 root root 146172416 Mar 13 15:05 mynginx_1.22.1.tar
docker load

功能

导入使用 docker save 命令导出的镜像

语法

docker load [OPTIONS]

别名

docker image load

关键参数

--input , -i : 指定导入的文件,代替 STDIN。
--quiet , -q : 精简输出信息。

样例

root@139-159-150-152:/data/myworkdir# docker load -i
mynginx_1.22.1.tar
Loaded image: nginx:1.22.1

docker image inspect

功能

查看镜像详细信息

语法

docker image inspect [OPTIONS] IMAGE [IMAGE...]

注意事项:

docker inspect 会自动检查是镜像还是容器然后显示相信信息

样例

#查看镜像详细信息
docker images inspect nginx:1.23.3
docker history

功能

显示镜像历史

语法

docker history [OPTIONS] IMAGE

别名

docker image history

关键参数

-H , --human :大小和日期采用人容易读的格式展现
--no-trunc :显示全部信息,不要隔断;
-q, --quiet: 只显示镜像 id 信息;

样例

docker import

功能

从归档文件中创建镜像

语法

docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]

别名

docker image import

关键参数

-c :应用 docker 指令创建镜像;
-m :提交时的说明文字;

样例

docker import my_ubuntu_v3.tar maxhou/ubuntu:v4
docker image prune

功能

删除不使用的镜像

语法

docker image prune [OPTIONS]

关键参数

-a , --all : 删除全部不使用的镜像;
--filter filter:指定过滤条件;
-f, --force :不提示是否删除;

样例

docker image prune
docker build

功能

docker build 命令用于使用 Dockerfile 创建镜像

语法

docker build [OPTIONS] PATH | URL | -

关键参数

  •  --build-arg=[] :设置镜像创建时的变量;
  • -f :指定要使用的 Dockerfile 路径;
  • --label=[] :设置镜像使用的元数据;
  • --no-cache :创建镜像的过程不使用缓存;
  • --pull :尝试去更新镜像的新版本;
  • --quiet, -q :安静模式,成功后只输出镜像 ID;
  • --rm :设置镜像成功后删除中间容器;
  • --tag, -t: 镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。
  • --network: 默认 default。在构建期间设置 RUN 指令的网络模式

样例

docker build -t mynginx:v1 .

6.镜像操作案例

查找镜像


下载镜像

查看镜像及列表存储位置

遍历查看镜像


 

查看镜像仓库在本地的存储信息

进入/data/var/lib/docker/image/目录,注意存储位置老师的是修改后的/data


 

查看 overlay2/repositories.json 文件,该文件记录已拉取镜像文件的信息

 

查看本地镜像, 发现和 repositories.json 文件记录的信息相同

镜像过滤

根据仓库名列出镜像

docker image ls ubuntu

列出特定的某个镜像,也就是说指定仓库名和标签

docker image ls ubuntu:18.04

docker image ls 还支持强大的过滤器参数 --filter,或者简写 -f。之前我们已经看到了使用过滤器来列出虚悬镜像的用法,它还有更多的用法。查看某个位置之前的镜像 before,查看某个位置之后的镜像 since


 

查看镜像详情

 

查看镜像分层

Docker history 可以查看分层

docker image inspect 可以查看详细的分层

一些镜像下载的时候也可以看到是一层一层下载的

 

 打标签

推送镜像

运行容器

 
镜像删除 

镜像的删除:可以根据 id 和名字删除,对于使用的镜像需要先清理容器再删除镜像

 

7.镜像综合实战

实战一、离线迁移镜像

1. 服务器 1 上镜像保存为 tar 文件,如操作系统为 ubuntu

2. scp 或者只用使用可视化工具拷贝镜像到第二台服务器上

3. 从 tar 中恢复镜像

4. 执行 docker run 检查镜像是否可以正常运行

 

 实战二、镜像存储的压缩与共享

1. 拉取 nginx 镜像,如果本地没有,镜像是从仓库拉取,如果有会提示镜像已经存在,并且是最新的。

2. Docker images 查看本地镜像,可以看到该镜像为 142Mb

3. 从上面看到 nginx 为 1.21.1 的大小是 140 多 MB,但是我们从 docker hub 上查看可以看到镜像是 50 多 MB,说明发生了压缩,因为仓库到本地需要走网络,所以文件越小越好


 

4. 把一个镜像打多个 tag,然后同时推送仓库,可以看到是说层已经存在,不会重复存储
 

 

5. 添加一个新的镜像到我们的仓库的时候,如果 docker hub 发现已经有了是 mount的,不是从本地推上去的


 

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

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

相关文章

微信小程序 老年人心血管健康知识科普系统

本系统的功能有管理员:个人中心,用户管理,热点信息管理,疾病管理,疾病类型管理,治疗管理,治疗类型管理,护理管理,护理类型管理,科普管理,科普类型…

HTTP 缓存机制

一、强制缓存 只要浏览器判断缓存没有过期,则直接使用浏览器的本地缓存而无需再请求服务器。 强制缓存是利用下面这两个 HTTP 响应头部(Response Header)字段实现的,它们都用来表示资源在客户端缓存的有效期: Cache…

力扣572:另一棵树的子树

力扣572:另一棵树的子树 给你两棵二叉树 root 和 subRoot 。检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树。如果存在,返回 true ;否则,返回 false 。 二叉树 tree 的一棵子树包括 tree 的某个节点和这个节点的所…

nodejs微信小程序+python+PHP就业求职招聘信息平台的设计与实现-计算机毕业设计推荐

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性:…

导入JDBC元数据到Apache Atlas

前言 前期实现了导入MySQL元数据到Apache Atlas, 由于是初步版本,且功能参照Atlas Hive Hook,实现的不够完美 本期对功能进行改进,实现了导入多种关系型数据库元数据到Apache Atlas 数据库schema与catalog 按照SQL标准的解释,…

全文检索[ES系列] - 第495篇

历史文章(文章累计490) 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《国内最全的Spring Boot系列之三》 《国内最全的Spring Boot系列之四》 《国内最全的Spring Boot系列之五》 《国内最全的Spring Boot系列之六》 M…

java设计模式学习之【建造者模式】

文章目录 引言建造者模式简介定义与用途实现方式: 使用场景优势与劣势建造者模式在spring中的应用CD(光盘)的模拟示例UML 订单系统的模拟示例UML 代码地址 引言 建造者模式在创建复杂对象时展现出其强大的能力,特别是当这些对象需…

linux 应用开发笔记---【标准I/O库/文件属性及目录】

一,什么是标准I/O库 标准c库当中用于文件I/O操作相关的一套库函数,实用标准I/O需要包含头文件 二,文件I/O和标准I/O之间的区别 1.标准I/O是库函数,而文件I/O是系统调用 2.标准I/O是对文件I/O的封装 3.标准I/O相对于文件I/O具有更…

为什么 SQL 不适合图数据库

背景 “为什么你们的图形产品不支持 SQL 或类似 SQL 的查询语言?” 过去,我们的一些客户经常问这个问题,但随着时间的推移,这个问题变得越来越少。 尽管一度被忽视,但图数据库拥有无缝设计并适应其底层数据结构的查询…

SpringBoot启动流程

SpringBoot启动流程 文章目录 SpringBoot启动流程SpringBoot启动流程 SpringBoot启动流程 视频链接: https://www.bilibili.com/video/BV15b4y1a7yG/?p174&spm_id_frompageDriver&vd_sourcef6debc5a79e3f424f9dde2f13891b158 看李老师讲的吧,特…

WPF实战项目十九(客户端):修改RestSharp的引用

修改HttpRestClient,更新RestSharp到110.2.0,因为106版本和110版本的代码不一样,所以需要修改下代码 using Newtonsoft.Json; using RestSharp; using System; using System.Threading.Tasks; using WPFProjectShared;namespace WPFProject.S…

【C++】STL简介(了解)【STL的概念,STL的历史缘由,STL六大组件、STL的重要性、以及如何学习STL、STL的缺陷的讲解】

这里写自定义目录标题 一、什么是STL二、STL的版本1. 原始版本2. P. J. 版本3. RW版本★ 4. SGI版本 三、STL的六大组件四、STL的重要性五、如何学习STL六、STL的缺陷 一、什么是STL STL ( standard template libaray - 标准模板库 ):是C标准库 的重要组成部分&…

使用栈解决括号匹配问题(详解)

项目结构 项目头文件的代码或截图 头文件代码 #ifndef LINKSTACK_H #define LINKSTACK_H #include <stdio.h> #include <stdlib.h> // 链式栈的节点 typedef struct LINKNODE {struct LINKNODE* next; }LinkNode; // 链式栈 typedef struct LINKSTACK {LinkNode h…

VUE项目启动报错: ERROR Error: error:0308010C:digital envelope routines::unsupported

1.vue项目启动报错&#xff1a; 是因为新版本node造成的 方法&#xff1a;修改 packge.json文件 修改为下图&#xff1a; 添加了如下代码 SET NODE_OPTIONS--openssl-legacy-provider && 就可以正常启动了

element-ui upload组件中将file文件数据转成二进制流数据格式

方法一 handleBeforeUpload (file)const reader new FileReader()reader.readAsArrayBuffer(file)reader.onload async function (theFile) {const binary new Blob([theFile.target.result]) // 转成二进制流数据 即binary数据格式}}方法二 const aBlob new Blob([file],…

2024 年甘肃省职业院校技能大赛中职组 电子与信息类“网络安全”赛项竞赛样题-C

2024 年甘肃省职业院校技能大赛中职组 电子与信息类“网络安全”赛项竞赛样题-C 目录 2024 年甘肃省职业院校技能大赛中职组 电子与信息类“网络安全”赛项竞赛样题-C 需要环境或者解析可以私信 &#xff08;二&#xff09;A 模块基础设施设置/安全加固&#xff08;200 分&…

使用Java语言判断一个数据类型是奇数还是偶数

判断一个数字类型是奇数&#xff0c;还是偶数&#xff0c;只需要引入Scanner类&#xff0c;然后按照数据类型的定义方式进行定义&#xff0c;比较是按照与2进行整除后的结果&#xff1b;如果余数为零&#xff0c;则代表为偶数&#xff0c;否则为奇数。 import java.util.Scann…

ES6 import

这里 import 的文件是项目内自己 export 的对象&#xff0c;并非 package.json 里引用的包。 后者的打包策略和配置有关。 原理&#xff1a;彻底理解JavaScript ES6中的import和export - 知乎

Ruby和HTTParty库下载代码示例

ruby require httparty require nokogiri # 设置服务器 proxy_host "" proxy_port "" # 定义URL url "" # 创建HTTParty对象&#xff0c;并设置服务器 httparty HTTParty.new( :proxy > "#{proxy_host}:#{proxy_port}" ) …

CrapApi 本地部署 windows+Linux部署( maven+tomcat+idea)

目录 一、本章节所用到的资源共享&#xff0c;嫌麻烦的可以直接下载本地配置好运行使用二、idea maven tomcat启动&#xff0c;我的maven和tomcat的配置三、遇到的问题四、项目运行后效果图转载请标明出处&#xff0c;写作不易如果有用请给个赞~~~~~~~~~~~~~~~~~~~~~~~~~~~~~…