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的,不是从本地推上去的


 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

02_W5500网络初始化

如何与W5500通信? 我们在W5500介绍中可以看到W5500支持SPI通信协议,如果对SPI通信协议还不太了解,请转 SPI数据帧: W5500 的 SPI 数据帧包括了 16 位地址段的偏移地址, 8 位控制段和 N 字节数据段。 如图所示…

10分钟带你学会python模块和包的使用

如果你用过 Python,那么你一定用过 import 关键字加载过各式各样的模块。但你是否熟悉 Python 中的模块与包的概念呢?或者,以下几个问题,你是否有明确的答案? 什么是模块?什么又是包?from matp…

Educational Codeforces Round 159 (Rated for Div. 2)(A~E)

A - Binary Imbalance 题意:给定一个01串,你能够在相邻相同字符中插入‘1’,在相邻不同字符中插入‘0’,求最终能否使得0的数量严格大于1的数量。 思路:可以发现,当出现了‘01’或者‘10’子序列时,能够无…

分享74个节日PPT,总有一款适合您

分享74个节日PPT,总有一款适合您 74个节日PPT下载链接:https://pan.baidu.com/s/18YHKkyJsplx-Gjj7ofpFrg?pwd6666 提取码:6666 Python采集代码下载链接:采集代码.zip - 蓝奏云 学习知识费力气,收集整理更不易…

机器学习---环境准备

一、pySpark环境准备 1、window配置python环境变量 window安装python,配置python环境变量。安装python后,在环境变量path中加入安装的路径,cmd中输入python,检验python是否安装成功。 注意:如果使用的是anaconda安装的python环境…

【滑动窗口】长度最小的数组

长度最小的数组 长度最小的数组 文章目录 长度最小的数组题目描述解法暴力解法滑动窗口Java示例代码c示例代码 题目描述 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl1, ..., numsr-1, num…

若依微服务项目整合rocketMq

原文链接:ttps://mp.weixin.qq.com/s/IYdo_suKvvReqCiEKjCeHw 第一步下载若依项目 第二步安装rocketMq(推荐在linux使用docker部署比较快) 第二步新建一个生产者模块儿,再建一个消费者模块 第四步在getway模块中配置接口映射规…

【高效开发工具系列】gson入门使用

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

HT4822 无输出隔直电容 立体声耳机放大器 中文资料

HT4822是一款无需输出隔直电容的立体声耳机放大器。HT4822支持差分和单端的模拟信号输入。 HT4822在3.6V供电下,THDN 1%,32ohm负载时能提供80mW的输出。其具有低至0.007%的THDN。HT4822能在2.5V-6.0V电源条件下工作,具有过热保护和欠压保护等…

微信公众号端在线客服系统源码 聊天记录云端实时保存 附带完整的搭建教程

随着社交媒体的普及,越来越多的用户通过微信公众号与企业进行沟通。因此,开发一款基于微信公众号的在线客服系统,可以帮助企业更好地服务用户,提高客户满意度。同时,为了解决聊天记录的存储和管理问题,我们…

python自学之《艾伯特用Python做科学计算》(1)——(待完善)

好吧,刚开始就打了一波而广告 啄木鸟社区的Python图书概览: http://wiki.woodpecker.org.cn/moin/PyBooks (22/388)

python之pyqt专栏11-事件(QEvent)

QApplication.exec() 在main.py中,实例化app对象,然后在 sys.exit(app.exec())中调用app.exec(), if __name__ __main__:# 实例化应用app QApplication(sys.argv)# 实例化MyMainFormmyw MyMainForm()myw.show()# 启动应用程序的事件循环并…

Android 手机的高级终端 Termux 安装使用、busybox、安卓 手机 web

From:https://www.sqlsec.com/2018/05/termux.html Termux 高级终端安装使用配置教程 :https://www.cnblogs.com/cutesnow/p/11430833.html 神器Termux 的使用记录:https://cloud.tencent.com/developer/article/1609398 ​adb shell 下使用 …

运维02:Linux

Linux安装 VMWare安装:夸克网盘分享(提取码:refg) CentOS安装:Index of /centos/7.9.2009/isos/x86_64/ Xshell安装:百度网盘 请输入提取码(提取码:juau) 环境准备 1、…

构建满足流批数据质量监控用火山引擎DataLeap

更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 面对今日头条、抖音等不同产品线的复杂数据质量场景,火山引擎 DataLeap 数据质量平台如何满足多样的需求?本文将介绍我们在弥合大数据场景下…

IDA常用操作、快捷键总结以及使用技巧

先贴一张官方的图,然后我再总结一下,用的频率比较高的会做一些简单标注 快捷键 F系列【主要是调试状态的处理】 F2 添加/删除断点F4 运行到光标所在位置F5 反汇编F7 单步步入F8 单步跳过F9 持续运行直到输入/断点/结束 shift系列【主要是调出对应的页…

完美解决:wget命令下载时遇到“错误 308:Permanent Redirect。”

目录 1 问题 2 解决方法 1 问题 使用wget命令下载时候遇到: --2023-12-02 20:36:08-- http://mirrors.jenkins.io/war-stable/latest/jenkins.war 正在解析主机 mirrors.jenkins.io (mirrors.jenkins.io)... 20.7.178.24, 2603:1030:408:5::15a 正在连接 mirror…

西南科技大学模拟电子技术实验七(集成运算放大器的非线性应用)预习报告

一、计算/设计过程 说明:本实验是验证性实验,计算预测验证结果。是设计性实验一定要从系统指标计算出元件参数过程,越详细越好。用公式输入法完成相关公式内容,不得贴手写图片。(注意:从抽象公式直接得出结果,不得分,页数可根据内容调整) 预习计算内容根据运放的非线…

酵母双杂交服务专题(四)

关于酵母双杂交服务的常见问题 问题1:酵母双杂交的筛选流程? 研究者将特定基因作为钓饵,在一个精心挑选的cDNA文库中进行筛选,目的是找到与该钓饵蛋白发生相互作用的蛋白质。通过这种筛选,可以从阳性反应的酵母菌株中…

Matlab 生成license

参考下面两个帖子 https://ww2.mathworks.cn/matlabcentral/answers/389888-matlab https://www.mathworks.com/matlabcentral/answers/131749-id-id-id-id 登陆 https://ww2.mathworks.cn/licensecenter 针对R2020b版本,点击下面红框生成 ip addr | grep ether看第一行 根据…