Docker学习——④

文章目录

  • 1、Docker Image(镜像)
  • 2、镜像命令详解
    • 2.1 docker rmi
    • 2.2 docker save
    • 2.3 docker load
    • 2.4 docker image inspect
    • 2.5 docker history
    • 2.6 docker image prune
  • 3、镜像综合实战
    • 3.1 离线镜像迁移
    • 3.2 镜像存储的压缩与共享

1、Docker Image(镜像)

Docker 镜像是什么

  • Docker image 本质上是一个 read-only 只读文件, 这个文件包含了文件系统、源码、库文件、依赖、工具等一些运行 application 所必须的文件
  • 我们可以把 Docker image 理解成一个模板, 可以通过这个模板实例化出来很多容器
  • image 里面是一层层文件系统 Union FS。联合文件系统,可以将几层目录挂载到一起,形成一个虚拟文件系统
    每一层文件系统我们叫做一层 layer,联合文件系统可以对每一层文件系统设置三种权限,只读(readonly)、读写(readwrite)和写出(whiteout-able),但是 docker 镜像中每一层文件系统都是只读的

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

镜像生活案例

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

在这里插入图片描述

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

在这里插入图片描述

为什么需要镜像

在部署应用时,通过手工或写一些脚本的方式进行部署。这样部署面临问题就是云端和本地环境一致问题。用户为每个应用打包过程比较繁琐,需要配置和给中修改等操作,非常费劲

然而,Docker 镜像就是为了解决这个小小的打包功能,突然一夜之间成名。那么,你可能说 Docker 镜像就是个压缩包,是的,你猜对了,它就像一个压缩包文件。它是如何解决 Paas 时代所面临的云端和本地一致性问题?很简单,它是把一个镜像制作成一个完整的操作系统所有文件和对应的目录结构,这样的压缩包是跟你本地和测试环境用的操作系统一摸一样

docker 最大的贡献就是定义了容器镜像的分层的存储格式,docker 镜像技术的基础是联合文件系统(UnionFS),其文件系统是分层的。这样既可以充分利用共享层,又可以减少存储空间占用

docker 镜像提供了一种打包应用程序和预配置服务器环境的便捷方式,可以很方便的将其用于个人用途或与其他 Docker 用户公开共享

2、镜像命令详解

镜像命令清单

命令别名功能
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删除不使用的镜像

2.1 docker rmi

docker rmi
删除本地镜像

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

别名

docker image rm, docker image remove

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

通过 repository:rag 删除
在这里插入图片描述

也可以通过 image id 删除

在这里插入图片描述

如果镜像有对应的容器,此时仅仅使用rmi是无法删除的

在这里插入图片描述

因此需要用到 -f 参数

在这里插入图片描述

2.2 docker save

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

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

别名

docker image save

关键参数
-o :输出到的文件

打包一个镜像到文件
在这里插入图片描述

打包多个镜像到文件

在这里插入图片描述

2.3 docker load

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

docker load [OPTIONS]

别名

docker image load

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

在这里插入图片描述

测试 -q 参数,精简输出信息

在这里插入图片描述

2.4 docker image inspect

docker image inspect
查看镜像详细信息

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

注意事项:
docker inspect 会自动检查是镜像还是容器然后显示相应信息

在这里插入图片描述

2.5 docker history

docker history
显示镜像历史

docker history [OPTIONS] IMAGE

别名

docker image history

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

参看nginx:1.23.4的历史信息

在这里插入图片描述

2.6 docker image prune

docker image prune
删除不使用的镜像
不适用的镜像有两种,只要容器不使用,就认为它是不使用的镜像
第二种叫虚悬镜像或者空悬镜像,它的REPOSITORY和TAG都是null

docker image prune [OPTIONS]

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

docker image prune
在这里插入图片描述

docker image prune -a

在这里插入图片描述

3、镜像综合实战

3.1 离线镜像迁移

从服务器1上拉去一个镜像,我这里的拉的是自己仓库的镜像,是centos7的镜像

在这里插入图片描述

拉取成功后,将这个镜像打包成tar文件

在这里插入图片描述

将这个tar文件从服务器1上拷贝到服务器2上,使用scp命令

scp 【本地文件的路径】【对端服务器用户名】@【对端服务器地址】:【对端服务器上存放文件的路径】

拷贝成功后,在服务器2上对应的目录下查看是否有对应的tar文件

在这里插入图片描述

此时服务器2还需要安装docker(自行安装),不然就无法使用对应的docker 命令,也就无法加载这个tar文件

使用 load -i 命令进行加载
在这里插入图片描述

加载成功,测试一下这个镜像,结果没啥问题

在这里插入图片描述

3.2 镜像存储的压缩与共享

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

在这里插入图片描述

查看nginx:1.21.4的大小

在这里插入图片描述

查看机器的CUP架构,再去docker hub 上找对应CPU架构的nginx:1.21.4的大小
在这里插入图片描述

在这里插入图片描述

docker hub 仓库里面的nginx镜像为54.08MB,将它拉到自己的服务上,结果成为了141MB,为什么呢?

因为镜像在服务端(docker hub)的时候是经过压缩的,拉到本地时就自动进行了解压

这么做的主要原因是镜像在服务端压缩,存储占用空间少,并且其他人在拉取镜像时,传输的数据包更小,就节省了带宽

将这个nginx镜像打一个标签,再推送到自己的仓库去

在这里插入图片描述

推送完成后,再去自己的仓库看一下, 发现镜像又被压缩了
在这里插入图片描述

镜像存储之共享

拉取nginx:1.21.3

在这里插入图片描述

给nginx:1.21.3多次打标签,再上传到自己的仓库

在这里插入图片描述

在这里插入图片描述

这里出现了Mount from library/nginx,并没有把本地的镜像推送到仓库,因为发现服务端有,所以直接使用了library/nginx里的

推送第二个

在这里插入图片描述

直接就告诉我们对应的层已经存在了

推送第三个,第四个都是如此

在这里插入图片描述

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

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

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

相关文章

创建多层级行索引,创建多层级行索引的DataFrameMultiIndex.from_product()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 创建多层级行索引, 创建多层级行索引的DataFrame MultiIndex.from_product() [太阳]选择题 使用pd.MultiIndex.from_product(),下列输出正确的是: import pandas as pd…

C++打怪升级(十)- STL之vector

~~~~ 前言1. vector 是什么2. 见见vector的常用接口函数吧构造函数无参构造函数使用n个val构造拷贝构造使用迭代器范围构造初始化形参列表构造 析构函数赋值运算符重载函数元素访问[]运算符重载函数访问at函数访问front函数back函数 迭代器相关正向迭代器反向迭代器 容量相关si…

C# OpenCvSharp 玉米粒计数

效果 项目 代码 using OpenCvSharp; using System; using System.Drawing; using System.Text; using System.Windows.Forms;namespace OpenCvSharp_Demo {public partial class frmMain : Form{public frmMain(){InitializeComponent();}string fileFilter "*.*|*.bmp;…

【NLP】特征提取: 广泛指南和 3 个操作教程 [Python、CNN、BERT]

什么是机器学习中的特征提取? 特征提取是数据分析和机器学习中的基本概念,是将原始数据转换为更适合分析或建模的格式过程中的关键步骤。特征,也称为变量或属性,是我们用来进行预测、对对象进行分类或从数据中获取见解的数据点的…

JAVA微信端医院3D智能导诊系统源码

医院智能导诊系统利用高科技的信息化手段,优化就医流程。让广大患者有序、轻松就医,提升医疗服务水平。 随着人工智能技术的快速发展,语音识别与自然语言理解技术的成熟应用,基于人工智能的智能导诊导医逐渐出现在患者的生活视角中…

java--String

1.String创建对象封装字符串数据的方式 ①方式一:java程序中的所有字符串文字(例如"abc")都为此类的对象 ②方式二:调用String类的构造器初始化字符串对象。 2.String提供的操作字符串数据的常用方法

docker部署mongodb

1:拉去momgodb镜像 2:拉去成功后,通过docker-compose.yml配置文件启动mongodb,docker-compose.yml配置如下 version: 3.8 services:mongodb-1:container_name: mongodbimage: mongo ports:- "27017:27017"volumes:- G:…

计网----累积应答,TCP的流量控制--滑动窗口,粘包问题,心跳机制,Nagle算法,拥塞控制,TCP协议总结,UDP和TCP对比,中介者模式

计网----累积应答,TCP的流量控制–滑动窗口,粘包问题,心跳机制,Nagle算法,拥塞控制,TCP协议总结,UDP和TCP对比,中介者模式 一.累积应答 1.什么是累计应答 每次发一些包&#xff0…

前端构建工具vite与webpack详解

文章目录 前言什么是构建工具先说说企业级项目里都需要具备哪些功能?这是代码改动后需要做的事情样例总结 一、构建工具他到底承担了哪些脏活累活?二、vite相较于webpack的优势三、 vite会不会取代webpack四、 你必须要理解的vite脚手架和vitecreate-vit…

虚幻引擎:如何在工程里面添加插件

1.在自己的项目中安装插件 在content目录下创建一个Plugins的文件,将插件文件放进去即可 2.在软件上安装,这样所有创建的项目都会带有此插件 将插件放在自己软件的这个目录下就好了

Linux 多线程编程详解

目录 为什么要使用多线程 线程概念 线程的标识 pthread_t 线程的创建 向线程传入参数 线程的退出与回收 线程主动退出 线程被动退出 线程资源回收(阻塞方式) 线程资源回收(非阻塞方式) 为什么要使用多线程 在编写代码时,是否会遇到以下的场景会感觉到难以…

后期混音效果全套插件Waves 14 Complete mac中文版新增功能

Waves 14 Complete for Mac是一款后期混音效果全套插件,Waves音频插件,内置混响,压缩,降噪和EQ等要素到建模的模拟硬件,环绕声和后期制作工具,包含全套音频效果器,是可以让你使用所有功能。Waves 14 Comple…

Vue3全局共享数据

目录 1,Vuex2,provide & inject2,global state4,Pinia5,对比 1,Vuex vue2 的官方状态管理器,vue3 也是可以用的,需要使用 4.x 版本。 相对于 vuex3.x,有两个重要变…

微信小程序电商审核模版

《电商平台服务协议》与交易规则 下载链接 电商平台对入驻经营者的审核要求或规范文件 下载链接 电商平台对用户交易纠纷处理的机制或方案 下载链接 打包下载:https://download.csdn.net/download/nicepainkiller/88519604https://download.csdn.net/download/nicep…

拓世科技集团打造数字人营销解决方案,为车企提供新的“增长担当”

汽车,已经渐渐融入了现代人的日常生活,从高端的身份标志转变为普罗大众的出行选择,它驶入了千家万户,成为了我们日常出行的可靠伙伴,见证着人们的生活故事和时代的变迁。 中国汽车市场的蓬勃发展引起了业内外的广泛关…

怎样使用ovsyunlive在web网页上直接播放rtsp/rtmp视频

业务中需要在网页中直接播放rtsp和rtmp视频,多方比较测试发现ovsyunlive的播放器能直接播放rtsp/rtmp视频,还是非常方便简洁,使用过程如下: 1,Windows系统在github上面下载ovsyunlive绿色包下载解压。 github地址&am…

Android Studio代码无法自动补全

Android Studio代码自动无法补全问题解决 在写layout布局文件时,代码不提示,不自动补全,可以采用如下方法: 点击File—>Project Structure,之后如图所示,找到左侧Modules,修改SDK版本号&…

『 MySQL数据库 』数据库基础之表的基本操作

文章目录 创建表🗡查看表🗡✒ 查看表内所有信息(描述\表结构等)✒ 根据条件查看表内数据✒ 查看表的具体详细信息: 修改表🗡✒ 修改表名:✒ 修改表的存储引擎、编码集(字符集和校验集):✒ 表内插入数据:insert into✒ 在表中新添一个字段(列)…

pytorch中常用的损失函数

1 损失函数的作用 损失函数是模型训练的基础,并且在大多数机器学习项目中,如果没有损失函数,就无法驱动模型做出正确的预测。 通俗地说,损失函数是一种数学函数或表达式,用于衡量模型在某些数据集上的表现。损失函数在…

解决Jenkins执行git脚本时报错:No such device or address问题

问题现象: Jenkins执行BeanShell脚本时,报错:jenkins fatal: could not read Username for http://112.11.120.1: No such device or address 解决方案: 解决服务器拉取git仓库的代码权限,使用高级子模块克隆功能。…