当前位置: 首页 > news >正文

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

相关文章:

Docker学习——④

文章目录 1、Docker Image(镜像)2、镜像命令详解2.1 docker rmi2.2 docker save2.3 docker load2.4 docker image inspect2.5 docker history2.6 docker image prune 3、镜像综合实战3.1 离线镜像迁移3.2 镜像存储的压缩与共享 1、Docker Image&#xff…...

Android选项卡TabHost

选项卡主要由TabHost(标签&#xff0c;主人)&#xff0c;TabWidget(微件)和FrameLayout3个组件组成&#xff0c;用于实现一个多标签页的用户界面。 1. TabHost在XML文件中添加&#xff1a; XML布局文件中添加选项卡时必须使用系统id来为各组件指定id属性。 <TabHostandro…...

qml添加滚动条

import QtQuick.Controls 2.15ScrollBar.vertical: ScrollBar {visible: flick1.contentHeight > flick1.heightanchors.right: parent.rightanchors.rightMargin: 40width: 10active: truecontentItem: Rectangle {radius: 6opacity: 0.5color: "#7882A0"} }...

elementui-plus el-tree组件数据不显示问题解决

当前情况: 显示: 注意看右侧的树是没有文字的,数据已经渲染,个数是对的,但就是没有文字, 解决: 对比以后发现是template中的#default{data}没有写大括号导致的 所以写上大括号后: 正常显示...

EMR 磁盘挂载解读与磁盘扩容操作

云上的计算实例挂载的存储盘通常可以在线实现磁盘扩容。本文以 AWS EMR 节点的磁盘扩容为例,记录一下具体的操作步骤。在详细介绍前,先将重要的总结发在前面,便于以后查阅: EMR 磁盘分配规则是: 第一磁盘(/dev/nvme0n1),必备,大小由控制台的"EBS root volume&qu…...

小程序day04

目标 自定义组件 创建组件 引用组件 局部引用 全局引用 组件的函数定义到metods节点中&#xff0c;梦回vue2. 样式 数据&#xff0c;方法&#xff0c;属性 下划线开头的称为自定义方法&#xff0c;非下划线开头的都是事件处理函数。 神特么&#xff0c;this.datathis.pro…...

哪些人更容易受到网络攻击?

当下&#xff0c;企业的安全已从传统的外部网络安全威胁防御&#xff0c;逐渐延伸到内部威胁防御。很多时候IT基础设施被攻陷不是外部造成&#xff0c;而是内部使然&#xff0c;这些内部威胁要复杂得多且难以管理。那么&#xff0c;哪些员工最脆弱、最有可能给企业组织带来网络…...

sql语句-实体属性有集合怎么批量查询

1、背景 前端返回一个实体类&#xff0c;实体类里还有集合。要对集合外的属性查询&#xff0c;还要对集合批量查询&#xff0c;并且属性可能为空。返回给前端的结果是个实体类&#xff0c;实体类里有集合。 2、前端实体类 public class AppletSyncDiseaseInfoBO {// 病害信息…...

临界资源,临界区,通信的干扰问题(互斥),信号量(本质,上下文切换问题,原子性,自身的安全性,操作)

目录 引入 概念 临界资源 临界区 干扰存在原因 互斥 信号量 引入 举例 概念 介绍 表示可用资源数 表示等待进程数 申请信号量 信号量的本质 全局变量? 共享内存? 不安全问题 -- 上下文切换 原子性 信号量自身的安全性 原子操作的意义 操作 引入 通信…...

工具介绍——第三方软件远程连接(工具:Rustdesk)

文章目录 前言一、使用工具二、开始演示1、拿下目标主机权限后上传文件2、运行目标主机上的rustdesk-1.1.9.exe文件3、目标主机上whoami查看现在的用户4、查找目标主机上连接的文件&#xff0c;并添加连接密码5、目标主机重启rustdesk的应用程序6、本地连接主机 前言 这里主要…...

【脑机接口 算法】EEGNet: 通用神经网络应用于脑电信号

EEGNet: 神经网络应用于脑电信号 中文题目论文下载&#xff1a;算法程序下载&#xff1a;摘要1 项目介绍2 EEGNet网络原理2.1EEGNet原理架构2.2FBCCA 算法2.3自适应FBCCA算法 3EEGNet网络实现4结果 中文题目 论文下载&#xff1a; DOI: 算法程序下载&#xff1a; 地址 摘要…...

【会话技术】Cookie和Session的工作流程和区别

Cookie技术 web程序是通过HTTP协议传输的&#xff0c;而HTTP是无状态的&#xff0c;即后续如果还要使用前面已经传输的数据&#xff0c;就还需要重传。这样如果数据量很大的情况下&#xff0c;效率就会大打折扣。Cookie的出现就是为了解决这个问题。 Cookie的工作流程&#x…...

Xmake v2.8.5 发布,支持链接排序和单元测试

Xmake 是一个基于 Lua 的轻量级跨平台构建工具。 它非常的轻量&#xff0c;没有任何依赖&#xff0c;因为它内置了 Lua 运行时。 它使用 xmake.lua 维护项目构建&#xff0c;相比 makefile/CMakeLists.txt&#xff0c;配置语法更加简洁直观&#xff0c;对新手非常友好&#x…...

红队专题-从零开始VC++C/S远程控制软件RAT-MFC-远程控制软件总结

红队专题 招募六边形战士队员[30]远控班第一期课程与远控总结 招募六边形战士队员 一起学习 代码审计、安全开发、web攻防、逆向等。。。 私信联系 [30]远控班第一期课程与远控总结 一.Bug修复(1)生成路径(2)显示系统版本号二.内存泄露(1)如何检查内存泄露 #define CRTDBG_…...

MyBatis与SQL实用技巧 实用语法

数据库SQL技巧 数值转字符 <select id"getMaterialsList" resultType"java.util.Map">selectmaterial_id materialId,material_name materialName,unit, specification, CONVERT(unit_price,CHAR) unitPricefrom trace_agriculture_materialwhere …...

更好的理解c++中的虚函数和静态多态以及动态多态

1.虚函数&#xff08;Virtual Function&#xff09; 在c 中&#xff0c; 虚函数是定义在基类中的函数&#xff0c;但是它可以在派生类中进行重写&#xff08;Override) 。 通过在基类中通过virtual 关键字声明函数 &#xff0c; 你创建了一个可以在任何派生类中特别实现的接口…...

MybatisPlus之新增操作并返回主键ID

在应用mybatisplus持久层框架的项目中&#xff0c;经常遇到执行新增操作后需要获取主键ID的场景&#xff0c;下面将分析及测试过程记录分享出来。 1、MybatisPlus新增方法 持久层新增方法源码如下&#xff1a; public interface BaseMapper<T> extends Mapper<T> …...

工程(十四)——ubuntu20.04 PL-VINS

博主创建了一个科研互助群Q&#xff1a;772356582&#xff0c;欢迎大家加入讨论。这是一个科研互助群&#xff0c;主要围绕机器人&#xff0c;无人驾驶&#xff0c;无人机方面的感知定位&#xff0c;决策规划&#xff0c;以及论文发表经验&#xff0c;以方便大家很好很快的科研…...

C复习-结构struct+bit field+union

参考&#xff1a; 里科《C和指针》 结构的声明 struct {int a;char b; } x; struct {int a;char b; } y[20], *z;// 会报错&#xff0c;因为z和x虽然都没有名字&#xff0c;但是并不是一个东西 z &x;struct SIMPLE {int a;char b; }; // 这样就对了&#xff0c;因为名字匹…...

1 快速了解Paimon数据湖核心原理及架构

1.1 什么是Apache Paimon Apache Paimon的前身属于Flink的子项目&#xff1a;Flink Table Store。 目前业内主流的数据湖存储项目都是面向批处理场景设计的&#xff0c;在数据更新处理时效上无法满足流式数据湖的需求&#xff0c;因此Flink社区在2022年的时候内部孵化了 …...

测试微信模版消息推送

进入“开发接口管理”--“公众平台测试账号”&#xff0c;无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息&#xff1a; 关注测试号&#xff1a;扫二维码关注测试号。 发送模版消息&#xff1a; import requests da…...

椭圆曲线密码学(ECC)

一、ECC算法概述 椭圆曲线密码学&#xff08;Elliptic Curve Cryptography&#xff09;是基于椭圆曲线数学理论的公钥密码系统&#xff0c;由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA&#xff0c;ECC在相同安全强度下密钥更短&#xff08;256位ECC ≈ 3072位RSA…...

Java如何权衡是使用无序的数组还是有序的数组

在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

基于Docker Compose部署Java微服务项目

一. 创建根项目 根项目&#xff08;父项目&#xff09;主要用于依赖管理 一些需要注意的点&#xff1a; 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件&#xff0c;否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中&#xff0c;元素的定位通过 position 属性控制&#xff0c;共有 5 种定位模式&#xff1a;static&#xff08;静态定位&#xff09;、relative&#xff08;相对定位&#xff09;、absolute&#xff08;绝对定位&#xff09;、fixed&#xff08;固定定位&#xff09;和…...

今日科技热点速览

&#x1f525; 今日科技热点速览 &#x1f3ae; 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售&#xff0c;主打更强图形性能与沉浸式体验&#xff0c;支持多模态交互&#xff0c;受到全球玩家热捧 。 &#x1f916; 人工智能持续突破 DeepSeek-R1&…...

稳定币的深度剖析与展望

一、引言 在当今数字化浪潮席卷全球的时代&#xff0c;加密货币作为一种新兴的金融现象&#xff0c;正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而&#xff0c;加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下&#xff0c;稳定…...

OPENCV形态学基础之二腐蚀

一.腐蚀的原理 (图1) 数学表达式&#xff1a;dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一&#xff0c;腐蚀跟膨胀属于反向操作&#xff0c;膨胀是把图像图像变大&#xff0c;而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

算法岗面试经验分享-大模型篇

文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer &#xff08;1&#xff09;资源 论文&a…...