Docker从认识到实践再到底层原理(五)|Docker镜像

news2024/9/25 19:17:29

在这里插入图片描述

前言

那么这里博主先安利一些干货满满的专栏了!

首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助。

  • 高质量博客汇总

然后就是博主最近最花时间的一个专栏《Docker从认识到实践再到底层原理》希望大家多多关注!

  • Docker从认识到实践再到底层原理

第五章-镜像

Docker镜像是什么

  • Docker image本质上是一个read-only只读文件,这个文件包含了文件系统源码、库文件、依赖、工具等一些运行行application 所必须的文件。

  • 我们可以把 Docker image 理解成一个模板,可以通过这个模板实例化出来很多容器。

  • image 里面是一层层文件系统Union FS。联合文件系统,可以将几层目录挂载到一起,形成一个虚拟文件系统。

每一层文件系统我们叫做一层 layer,联合文件系统可以对每一层文件系统设置三 种权限,只读(readonly)、读写(readwrite)和写出(whiteout-able),但是 docker 镜像中每一层文件系统都是只读的。

构建镜像的时候,从一个最基本的操作系统开始,每个构建的操作都相当于做一层 的修改,增加了一层文件系统。一层层往上叠加,上层的修改会覆盖底层该位置的可见性,这也很容易理解,就像上层把底层遮住了一样。当你使用的时候,你只会看到 一个完全的整体,你不知道里面有几层,也不清楚每一层所做的修改是什么。

镜像命令详解

命令清单

命令别名功能
docker imagesdocker image ls / docker image list列出本地镜像
docker tagdocker image tag给镜像打标签, 可用于推送镜像仓库
docker pulldocker image pull从镜像仓库拉取镜像
docker pushdocker image push推送镜像到仓库
docker rmidocker image rm / docker image remove删除本地镜像
docker builddocker image build通过 dockerfile制作镜像
docker savedocker image save将制定镜像保存成tar归档文件
docker loaddocker image load导入使用 docker save 导出的镜像
docker image inspect查看镜像的详细信息
docker historydocker image history查看镜像历史
docker importdocker image import从归档文件 docker export 中创建镜像
docker image prune删除不使用的镜 像

在这一章,我们只详细介绍上面的部分命令,有一些我们会到特定的章节详细讲解。

docker rmi

删除本地某个镜像。

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

关键参数。

-f : 强制删除
-no-prune : 不移除该镜像的过程镜像,默认移除

docker save 和 docker load

docker save [OPTIONS] IMAGE [IMAGE...] # -o :输出到的文件
docker save -o mybusybox.tar busybox:1.36.0 # 保存这个镜像文件

在这里插入图片描述
现在可以把这个镜像加载回来。

docker load [OPTIONS]

关键参数

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

在这里插入图片描述

docker history

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

在这里插入图片描述

其他参数大家都可以尝试。

docker image prune

删除不使用的镜像。

-a, --all : 删除全部不使用的镜像;
--filter filter : 指定过滤条件;
-f, --force : 不提示是否删除;
[root@ALiCentos7:/home/yufc/Src/Bit-Courses/DockerSrc/test]$ docker images
REPOSITORY                    TAG             IMAGE ID       CREATED         SIZE
nginx                         1.24.0          bf09be6b0005   2 weeks ago     142MB
nginx                         1.25.2          eea7b3dcba7e   2 weeks ago     187MB
yufcbagpack/my-bit-nginx      1.25.2          eea7b3dcba7e   2 weeks ago     187MB
busybox                       1.36.0          af2c3e96bcf1   3 months ago    4.86MB
yufcbagpack/busybox-by-yufc   v1.0            af2c3e96bcf1   3 months ago    4.86MB
centos                        7               eeb6ee3f44bd   23 months ago   204MB
nginx                         1.18.0-alpine   684dbf9f01f3   2 years ago     21.9MB
[root@ALiCentos7:/home/yufc/Src/Bit-Courses/DockerSrc/test]$ docker image prune -a
WARNING! This will remove all images without at least one container associated to them.
Are you sure you want to continue? [y/N] y
Deleted Images:
untagged: busybox:1.36.0
untagged: busybox@sha256:9e2bbca079387d7965c3a9cee6d0c53f4f4e63ff7637877a83c4c05f2a666112
untagged: yufcbagpack/busybox-by-yufc:v1.0
untagged: yufcbagpack/busybox-by-yufc@sha256:086417a48026173aaadca4ce43a1e4b385e8e62cc738ba79fc6637049674cac0
deleted: sha256:af2c3e96bcf1a80da1d9b57ec0adc29f73f773a4a115344b7e06aec982157a33
deleted: sha256:1f1d08b81bbe3cb8d730d2e163d6737b4352192712b1f1548720dc224f6cac06
untagged: nginx:1.18.0-alpine
untagged: nginx@sha256:93baf2ec1bfefd04d29eb070900dd5d79b0f79863653453397e55a5b663a6cb1
deleted: sha256:684dbf9f01f3250437d595669c7437c202573798ab34247d50338ff630e58b6a
deleted: sha256:c2de14d9781a9624082602f51baa465d1904cf681e8209bec5e0a40054897f49
deleted: sha256:6774274a318ea7dfe5fb9dd3fe1f625e463352ba889f6f9fb2222e4783bcd209
deleted: sha256:485b3a00a3b7092170c9612a95637ee7e1ff6b6bdc915c5131eb07983d02171d
deleted: sha256:c5ddcad13e93c4e6d6cf10c03bf14f0a8fc8a2a5435b87e300394fbc9977a02c
deleted: sha256:9a5d14f9f5503e55088666beef7e85a8d9625d4fa7418e2fe269e9c54bcb853c
untagged: nginx:1.25.2
untagged: nginx@sha256:104c7c5c54f2685f0f46f3be607ce60da7085da3eaa5ad22d3d9f01594295e9c
untagged: yufcbagpack/my-bit-nginx:1.25.2
untagged: yufcbagpack/my-bit-nginx@sha256:48a84a0728cab8ac558f48796f901f6d31d287101bc8b317683678125e0d2d35
deleted: sha256:eea7b3dcba7ee47c0d16a60cc85d2b977d166be3960541991f3e6294d795ed24
deleted: sha256:589bcc284f24d6548cd3cef06ace5f6ebc4f23a48a5763f2f9d3d30b0f9dadf5
deleted: sha256:b3addc7069fafd183d88d1a40bb3dfe51227d45e4fe8e59b81a2fda7614ebbc1
deleted: sha256:5bf28af6a2188fa2d657e451213761b03e115e4c24ee72c41da34a241fe81ca1
deleted: sha256:2496134da21702d935bee1334ae42baf26d0197af91275e5c1a11eee31299121
deleted: sha256:c7e60968a54882c23483c3acb0ff1f415ce0f98184dfbed3fb9080447d79b313
deleted: sha256:49bfd4a4ea578aefcacdfd87efdc4999d6a4e4b7f00322484cac67ff7671389e
deleted: sha256:511780f88f80081112aea1bfdca6c800e1983e401b338e20b2c6e97f384e4299
untagged: centos:7
untagged: centos@sha256:be65f488b7764ad3638f236b7b515b3678369a5124c47b8d32916d6487418ea4
deleted: sha256:eeb6ee3f44bd0b5103bb561b4c16bcb82328cfe5809ab675bb17ab3a16c517c9
deleted: sha256:174f5685490326fc0a1c0f5570b8663732189b327007e47ff13d2ca59673db02
untagged: nginx:1.24.0
untagged: nginx@sha256:a195f9fb6503531660b25f9aeefef1f48bbaf56f46da04bffe1568abb3d3aff6
deleted: sha256:bf09be6b0005cc81d4cc3c3cf836c84450e92a7c4dcb2e2e31d84843ff3d6c62
deleted: sha256:ff7c49c7e5d3258f6e702b5259ac2bdc8986bb04b24b2b7117925b4d26844596
deleted: sha256:7c0b5de76892cd4ea9baac2b125bfafa689f059f1a160993549208d348789473
deleted: sha256:06409bd4a1a7f2e234292dfeba96fb76d9cff1256e41e5df13d38a6f47488aa3
deleted: sha256:401de303ad1d4c865aab0018974df56eb349a04fdfb88a8e4c5c91fa1036a03f
deleted: sha256:5d87999cc8379e200e5702df879ba59805993578ac8cc20c4376d84274ab79f5
deleted: sha256:63290f9c9e5201f0507ee1b5701aa06c7f48bef7cce287fc77db92bec634d737

Total reclaimed space: 559.5MB
[root@ALiCentos7:/home/yufc/Src/Bit-Courses/DockerSrc/test]$ docker images
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE
[root@ALiCentos7:/home/yufc/Src/Bit-Courses/DockerSrc/test]$ 

镜像操作案例

实战流程如下所示。

查找镜像
下载镜像
查看镜像及列表存储位置
查看镜像详情
查看镜像详情
查看镜像分层
打标签
推送镜像
运行容器
镜像删除

查找镜像

docker search busybox

在这里插入图片描述

下载镜像

docker pull busybox:1.36.0

下载成功。

[root@ALiCentos7:/home/yufc/Src/Bit-Courses/DockerSrc/test]$ docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
busybox      1.36.0    af2c3e96bcf1   3 months ago   4.86MB
[root@ALiCentos7:/home/yufc/Src/Bit-Courses/DockerSrc/test]$

查看镜像及列表存储位置

东西存在这。

cd /data/var/lib/docker # 我们改过的,要记得哦
[root@ALiCentos7:/data/var/lib/docker]$ ll
total 44
drwx--x--x 4 root root 4096 Sep  1 20:57 buildkit
drwx--x--- 2 root root 4096 Sep  5 22:18 containers
-rw------- 1 root root   36 Sep  1 20:57 engine-id
drwx------ 3 root root 4096 Sep  1 20:57 image
drwxr-x--- 3 root root 4096 Sep  1 20:57 network
drwx--x--- 4 root root 4096 Sep  5 22:45 overlay2
drwx------ 4 root root 4096 Sep  1 20:57 plugins
drwx------ 2 root root 4096 Sep  1 20:57 runtimes
drwx------ 2 root root 4096 Sep  1 20:57 swarm
drwx------ 2 root root 4096 Sep  5 22:45 tmp
drwx-----x 2 root root 4096 Sep  1 20:57 volumes
[root@ALiCentos7:/data/var/lib/docker]$ cd image/
[root@ALiCentos7:/data/var/lib/docker/image]$ ls
overlay2
[root@ALiCentos7:/data/var/lib/docker/image]$ cd overlay2/
[root@ALiCentos7:/data/var/lib/docker/image/overlay2]$ ls
distribution  imagedb  layerdb  repositories.json
[root@ALiCentos7:/data/var/lib/docker/image/overlay2]$ cat repositories.json 
{"Repositories":{"busybox":{"busybox:1.36.0":"sha256:af2c3e96bcf1a80da1d9b57ec0adc29f73f773a4a115344b7e06aec982157a33","busybox@sha256:9e2bbca079387d7965c3a9cee6d0c53f4f4e63ff7637877a83c4c05f2a666112":"sha256:af2c3e96bcf1a80da1d9b57ec0adc29f73f773a4a115344b7e06aec982157a33"}}}[root@ALiCentos7:/data/var/lib/docker/image/overlay2]$ 

关注这里面的一个一个文件夹,/data/var/lib/docker/image/overlay2/这里面存的是docker的存储驱动。

我们可以看下repositories.json 这里面的内容。

{
	"Repositories": {
		"busybox": {
			"busybox:1.36.0": "sha256:af2c3e96bcf1a80da1d9b57ec0adc29f73f773a4a115344b7e06aec982157a33",
			"busybox@sha256:9e2bbca079387d7965c3a9cee6d0c53f4f4e63ff7637877a83c4c05f2a666112": "sha256:af2c3e96bcf1a80da1d9b57ec0adc29f73f773a4a115344b7e06aec982157a33"
		}
	}
}

可以看到我们是有一个busybox镜像的。

所以东西是存在这里的,列表是在这里面的。

也可以通过这个命令查看镜像的详情。

docker image inspect busybox:1.36.0

当然dockerhub上也可以看这些信息。

查看镜像分层

docker history busybox:1.36.0
[root@ALiCentos7:/data/var/lib/docker/image/overlay2]$ docker history busybox:1.36.0 
IMAGE          CREATED        CREATED BY                                      SIZE      COMMENT
af2c3e96bcf1   3 months ago   /bin/sh -c #(nop)  CMD ["sh"]                   0B        
<missing>      3 months ago   /bin/sh -c #(nop) ADD file:c22c6617fa9a85e0d…   4.86MB    
[root@ALiCentos7:/data/var/lib/docker/image/overlay2]$ 

打标签

docker tag busybox:1.36.0 yufcbagpack/busybox-by-yufc:v2.0

推送镜像

docker push yufcbagpack/busybox-by-yufc:v2.0

在这里插入图片描述

运行容器

先查看现在有的镜像。

[root@ALiCentos7:/data/var/lib/docker/image/overlay2]$ docker images
REPOSITORY                    TAG       IMAGE ID       CREATED        SIZE
busybox                       1.36.0    af2c3e96bcf1   3 months ago   4.86MB
yufcbagpack/busybox-by-yufc   v2.0      af2c3e96bcf1   3 months ago   4.86MB
[root@ALiCentos7:/data/var/lib/docker/image/overlay2]$ 

运行容器。

[root@ALiCentos7:/data/var/lib/docker/image/overlay2]$ docker run -it yufcbagpack/busybox-by-yufc:v2.0 sh
/ # 

在这里插入图片描述

现在就启动这个镜像了。

删除这个镜像

docker rmi yufcbagpack/busybox-by-yufc:v2.0

在这里插入图片描述

我们可以发现,其实不是删除了这个镜像,而是只是去除了标签而已。

docker rm 进一步删除

在这里插入图片描述

镜像仓库实战

实战一:离线迁移镜像

现有的镜像如下。

在这里插入图片描述

在这里插入图片描述

保存下来。

把这个tar包发到另一台服务器后(可以使用scp命令)

然后在另一台服务器使用docker load -i载入这个镜像即可。

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

先拉一个镜像下来。

docker pull nginx:1.21.4
[root@ALiCentos7:/home/yufc/Src/Bit-Courses/DockerSrc/test]$ docker pull nginx:1.21.4
1.21.4: Pulling from library/nginx
a2abf6c4d29d: Pull complete 
f3409a9a9e73: Pull complete 
9919a6cbae9c: Pull complete 
fc1ce43285d7: Pull complete 
1f01ab499216: Pull complete 
13cfaf79ff6d: Pull complete 
Digest: sha256:366e9f1ddebdb844044c2fafd13b75271a9f620819370f8971220c2b330a9254
Status: Downloaded newer image for nginx:1.21.4
docker.io/library/nginx:1.21.4
[root@ALiCentos7:/home/yufc/Src/Bit-Courses/DockerSrc/test]$

在这里插入图片描述

我们发现拉到本地是141MB

我们看看hub上的大小。

在这里插入图片描述

所以,在hub上肯定是进行了一定的压缩的。

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

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

相关文章

OpenCV(四十四):亚像素级别角点位置优化

1.角点位置亚像素位置优化原理介绍 亚像素优化的原理在于通过对初始角点位置的微小调整&#xff0c;利用更精确的灰度信息&#xff0c;来获取更准确的角点位置。传统的角点检测算法基于像素级别的灰度变化来定位角点&#xff0c;而亚像素优化则进一步利用图像灰度的局部变化进行…

DataInputStream数据读取 Vs ByteBuffer数据读取的巨大性能差距

背景&#xff1a; 今天在查找一个序列化和反序列化相关的问题时&#xff0c;意外发现使用DataInputStream读取和ByteBuffer读取之间性能相差巨大&#xff0c;本文就来记录下这两者在读取整数类型时的性能差异&#xff0c;以便在平时使用的过程中引起注意 DataInputStream数据…

#循循渐进学5单片机#中断与数码管动态显示#not.5

1、掌握C语言数组的概念、定义和应用。 1&#xff09;数组是一组变量&#xff0c;这组变量需要满足三个条件&#xff1a; 具有相同的数组类型 具有相同的名字 在存储器中是连续的 2&#xff09;声明和初始化 数组类型 数组名【数组长度】 数组类型 数组名【数组长度】 …

批量多字段唯一性校验

批量多字段唯一性校验 思路&#xff1a; 查询列表本身是否含有重复数据新增修改分开考虑&#xff0c;新增只考虑数据库中是否有相同数据&#xff0c;修改不仅要考虑数据库中是否有相同数据&#xff0c;还要排除自身。由于是批量校验&#xff0c;排除自身只需考虑所有修改操作…

LeetCode【3. 无重复字符的最长子串】

工欲善其事必先利其器 题目&#xff1a;给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。 public int lengthOfLongestSubstring(String s) {int n s.length();int[] charIndex new int[128]; // 用于存储字符的索引&#xff0c;ASCII字符集共有…

docker 操作redis

1查看容器 2进入容器 exec表示在运行的容器中执行命令it表示以终端交互的方式执行命令/bin/bash表示需要指定的命令 3进入容器后可通过redis-cli命令连接容器内的redis服务器&#xff0c;可通过set创建变量&#xff0c;get获取变量的值 4key * 查看所有key 通过ping 查看redi…

使用node实现websocket

使用node实现websocket 什么是websocket websocket代表了Web应用程序通信方式的根本转变。不同于传统的HTTP请求响应周期&#xff0c;即客户端从服务器请求数据并等待响应&#xff0c;websocket在客户端和服务器之间建立一个持久的全双工连接。这意味着一旦建立了websocket&a…

电力系统IEEE14节点系统同步模型(Simulink)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

深度解析shell脚本的命令的原理之mv

mv 是 Unix 或 Linux 中的一个基本命令&#xff0c;用于移动或重命名文件和目录。以下是对这个命令的深度解析&#xff1a; 基本操作&#xff1a;mv 命令的基本操作是将一个或多个源文件或目录移动到一个目标文件或目录&#xff0c;或者重命名源文件或目录。这是通过改变文件系…

【算法训练-队列 一】【结构特性】用两个栈实现队列

废话不多说&#xff0c;喊一句号子鼓励自己&#xff1a;程序员永不失业&#xff0c;程序员走向架构&#xff01;本篇Blog的主题是【队列的结构特性】&#xff0c;使用【队列】这个基本的数据结构来实现&#xff0c;这个高频题的站点是&#xff1a;CodeTop&#xff0c;筛选条件为…

腾讯mini项目-【指标监控服务重构】2023-08-04

今日已办 关于 span-references 的调研 https://github.com/DataDog/dd-trace-js/issues/1761 https://github.com/open-telemetry/opentelemetry-specification/blob/874a451e7f6ac7fc54423ee3f03e5394197be35b/specification/compatibility/opentracing.md#span-references h…

前端面试的话术集锦第 17 篇博文——高频考点(TCP知识点)

这是记录前端面试的话术集锦第十七篇博文——高频考点(TCP知识点),我会不断更新该博文。❗❗❗ 首先还是先来解答这个常考面试题关于TCP部分的内容,然后再详细去学习这个协议。 1. UDP 与 TCP 的区别是什么? TCP基本是和UDP反着来,建立连接断开连接都需要先需要进行握手…

VR虚拟仿真在旅游课堂教学演示

首先&#xff0c;VR虚拟仿真能够为学生提供逼真的旅游体验。传统的旅游课堂教学主要以图片、文字和视频为主要教学工具&#xff0c;这无法给学生带来身临其境的感觉。而VR技术能够通过360度全景视角、立体声音和触觉反馈等功能&#xff0c;将学生置身于虚拟的旅游场景中。无论是…

软件测试/测试开发丨Web自动化—capability参数配置 学习笔记

点此获取更多相关资料 本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接&#xff1a;https://ceshiren.com/t/topic/27336 一、capability概述 capability是webdriver支持的标准命令之外的扩展命令&#xff08;配置信息&#xff09;配置web驱动属性&#xff0c;如浏览器名…

基于element-ui的年份范围选择器

基于element-ui的年份范围选择器 element-ui官方只有日期范围和月份范围选择器&#xff0c;根据需求场景需要&#xff0c;支持年份选择器&#xff0c;原本使用两个分开的年份选择器实现的&#xff0c;但是往往有些是不能接受的。在网上找了很多都没有合适的&#xff0c;所以打…

数据结构与算法--排序算法复习

目录 1.三种常见的简单排序&#xff1a; 1.1冒泡排序 1.2 选择排序 1.3 插⼊排序 2 常见高级排序算法 2.1 希尔排序 2.2 快速排序 2.3 归并排序 2.4计数排序 先上结论&#xff1a; 1.三种常见的简单排序&#xff1a; 1.1冒泡排序 1.⾸先在未排序数组的⾸位开始&#…

Spring boot 实践(16)Nacos server 2.2.3 下载安装

1、Nacos server下载 登录网址Releases alibaba/nacos GitHub&#xff0c;进入下载页面&#xff0c;显示如下&#xff1a; 选择“nacos-server-2.2.3.zip”版本 解压缩&#xff0c;目录文件如下图所示&#xff1a; 配置文件位于“conf”目录下&#xff0c;名称为“applicat…

写作萝卜:基于人工智能的AI智能写作工具平台

【产品介绍】​ 名称​ 写作萝卜​ 具体描述​ 写作萝卜是一款一站式AI智能写作平台&#xff0c;它可以帮助用户快速完成各种类型的写作任务&#xff0c;如文章 改写、降重、生成、校对、转换等。​ 写作萝卜的核心功能是AI智能改…

arcgis js 缓冲区分析(GP服务)

arcgis文档中的有提供缓冲区的接口 geometryService&#xff0c;但要4.19后版本才提供 案例中使用的版本为4.16&#xff0c;因此这里的缓冲区分析借助gp工具 新建服务 1、打开arcmap 选择工具将要存放的文件夹&#xff0c;右键> new > Toolbox 对新建好的工具的mode…

网站排名下降的原因和解决方法(SEO优化失误可能导致网站排名下降)

SEO优化是网站推广的重要环节&#xff0c;它可以提升网站的访问量和排名。但是&#xff0c;SEO优化不当也可能会导致网站排名下降。本文将分析SEO优化失误可能导致网站排名下降的原因&#xff0c;并提供相应的解决方法。 一&#xff1a;标题——SEO优化过度 SEO优化的目的是为…