【Docker】Docker比虚拟机快的原因、ubuntu容器、镜像的分层概念和私有库的详细讲解
🚀欢迎来到本文🚀
🍉个人简介:陈童学哦,目前学习C/C++、算法、Python、Java等方向,一个正在慢慢前行的普通人。
🏀系列专栏:陈童学的日记
💡其他专栏:C++STL,感兴趣的小伙伴可以看看。
🎁希望各位→点赞👍 + 收藏⭐️ + 留言📝
⛱️万物从心起,心动则万物动🏄♂️
前言:Docker 可以让开发者打包他们的应用以及依赖包到一个
轻量级、可移植
的容器中,然后发布到任何流行的Linux系统
机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
Docker比虚拟机快的原因、_ubuntu容器、分层概念和私有库的详细讲解
- 1.Docker比虚拟机快的原因
- 2.Dockers中关于ubuntu容器的简单说明
- 3.Docker中镜像的分层概念
- 3.1Docker中的UnionFS联合文件系统
- 3.2Docker中的镜像加载原理
- 4.Docker的私有库简介
1.Docker比虚拟机快的原因
众所周知,Docker比虚拟机快,那么为什么呢?凭啥Docker比虚拟机快呢?因为它更帅吗?任何主流的东西都是有它的优势的。
Docker比虚拟机快的主要原因有以下几点:
-
1.
资源利用率高
:Docker容器共享宿主机的操作系统内核,不需要像虚拟机一样每个实例都运行完整的操作系统。这使得Docker容器在启动和停止时更加轻量级和快速。 -
2.
快速启动时间
:Docker容器的启动时间通常只需要几秒钟,而虚拟机需要几分钟甚至更长时间。这是因为Docker容器不需要启动完整的操作系统,只需加载应用程序所需的文件和依赖项。 -
3.
资源隔离
:虚拟机在运行时需要为每个实例分配一定的CPU、内存和磁盘资源,而Docker容器可以共享宿主机的资源。这种资源隔离方式使得Docker容器在性能方面更加高效。 -
4.
轻量级
:Docker容器的镜像大小相对较小,只包含应用程序和其依赖项,而虚拟机镜像包含完整的操作系统。这使得Docker容器在传输和存储时更加高效。
2.Dockers中关于ubuntu容器的简单说明
Docker是一种容器化平台,它允许用户将应用程序及其依赖打包为一个独立的容器,提供了一种轻量级、可移植、可复制的方式来部署和运行应用程序。Ubuntu容器
是指在Docker中基于Ubuntu操作系统镜像创建的容器。它是一个虚拟化的环境
,可以运行Ubuntu操作系统及其相关的应用程序。
在Docker中创建一个Ubuntu容器可以通过以下步骤完成:
- 1.首先,确保你已经安装好Docker。如果没有安装,请按照Docker官方文档的指引进行安装。
- 2.打开终端或命令提示符,运行以下命令来拉取Ubuntu镜像:
docker pull ubuntu
- 3.等待镜像下载完成后,可以运行以下命令来创建并启动一个Ubuntu容器:
docker run -it --name my_ubuntu_container ubuntu
这个命令会创建一个新的Ubuntu容器,并将终端连接到容器的交互式会话中。my_ubuntu_container
是你给容器起的一个名称。
3.Docker中镜像的分层概念
在Docker中,镜像是构建和运行容器的基础
。镜像是由一系列只读层
(layers)组成的。每个层都包含了文件系统中的一部分,这些层会根据需要进行合并和重用,以创建最终的镜像。
镜像分层的概念有以下几个关键点:
-
1
.分层结构
:Docker镜像是由多个只读层组成的,每个层都可以看作是文件系统中的一个快照。每个层都包含了增量的文件和目录变化,以及相应的元数据信息。这种分层结构使得镜像的构建和分发更加高效。 -
2
.基础镜像
:镜像分层的最底层是一个基础镜像,它通常包含了操作系统的核心组件和基本工具。基础镜像可以是官方提供的如Ubuntu、CentOS等,也可以是自定义的。 -
3.
可写层
:在基础镜像之上,可以有任意数量的可写层。可写层允许在容器中进行修改和更新操作。当容器启动时,可写层会与只读层一起形成容器的文件系统视图。 -
4.
共享和复用
:由于镜像分层的机制,多个镜像可以共享相同的只读层,从而节省存储空间。当多个镜像使用相同的基础镜像时,它们可以共享相同的只读层,只需要额外存储各自的可写层。 -
5.
构建和发布
:在构建镜像时,Docker会根据Dockerfile中的指令逐层构建镜像。每个指令都会创建一个新的只读层,并根据需要将其与之前的层进行合并。在发布镜像时,只需传输增量的层数据,而不需要传输整个镜像,这也使得镜像的分发更加高效。
3.1Docker中的UnionFS联合文件系统
Docker中的联合文件系统是一种分层、轻量级并且高性能
的文件系统技术,它支持对文件系统的修改作为一次提交来一层层的叠加
,允许在容器中使用多个文件系统镜像,并将它们合并成一个单一的可读写的文件系统。这种技术称为联合文件系统,因为它通过在不同的文件系统镜像之间建立联合来实现。
在Docker中,每个镜像都有一个基础镜像,所有的更改和添加都是在该基础镜像上进行的。当创建一个容器时,Docker会在基础镜像之上创建一个可写层。这个可写层允许在容器中对文件进行更改和添加,而不会影响到基础镜像。
当容器启动时,Docker会将所有的镜像层以及可写层联合挂载到一个单一的文件系统中。这样,容器就可以访问并操作这个联合文件系统中的所有文件。当对文件进行修改或添加时,Docker会在可写层中创建新的文件或修改已有的文件,而不会改变基础镜像中的文件。
联合文件系统的好处是它可以节省存储空间。因为每个容器都共享基础镜像的只读部分。
3.2Docker中的镜像加载原理
在Docker中,镜像是用于运行容器的文件系统。镜像加载是指将镜像从Docker仓库或本地缓存加载到本地系统,以供后续创建和运行容器。
镜像加载的过程大致可以分为以下几个步骤:
-
1
.镜像下载
:如果镜像不在本地缓存中,Docker会从指定的仓库中下载镜像文件。默认情况下,Docker会从Docker Hub下载公共镜像,也可以通过配置使用其他仓库。 -
2
.镜像分层
:镜像文件实际上由多个分层组成,每个分层都包含文件系统的一部分。Docker加载镜像时,会按照分层的顺序逐个加载,并将它们合并成一个单一的文件系统。 -
3.
分层缓存
:Docker会根据镜像的分层信息进行缓存,以提高后续加载相同镜像时的速度。如果多个镜像共享相同的分层,只需要下载一次,并在本地缓存中进行复用。 -
4.
容器创建
:一旦镜像加载完成,就可以使用该镜像创建容器。容器是镜像的一个实例化对象,它包含一个独立的文件系统和运行时环境。
4.Docker的私有库简介
私有库是Docker中用于存储和管理镜像的仓库
,它可以用于存储自己创建的镜像,以及从公共仓库拉取下来的镜像。在本地搭建私有库可以提供更高的安全性和更好的性能。搭建私有库可以使用Docker官方提供的Registry镜像,也可以使用第三方工具,如Harbor、Nexus等。
下面以Docker官方的Registry为例进行讲解。
- 1.下载Registry镜像:
docker pull registry
- 2.运行Registry容器:
docker run -d -p 5000:5000 --restart=always --name registry registry
这里将容器的5000端口映射到宿主机的5000端口,方便访问私有库。
- 3.配置Docker客户端:
编辑Docker配置文件/etc/docker/daemon.json
,添加以下内容:
{"insecure-registries": ["your-registry-domain:5000"]
}
这里将your-registry-domain
替换为私有库的域名或IP地址。
- 4.推送镜像到私有库:
首先,为镜像添加标签,使其与私有库的地址关联:
docker tag your-image your-registry-domain:5000/your-image
然后,推送镜像到私有库:
docker push your-registry-domain:5000/your-image
这里将your-image
和your-registry-domain
替换为实际的镜像名称和私有库地址。
- 5.从私有库拉取镜像:
docker pull your-registry-domain:5000/your-image
这里将your-image
和your-registry-domain
替换为实际的镜像名称和私有库地址。
以上就是在Docker中搭建私有库的详细步骤啦。通过私有库,你可以方便地管理和分享自己的镜像,同时也可以控制访问权限。
如果本文对大家有所帮助的话,还望各位能给我点赞、收藏并评论一下,感谢各位💕!!! 另如果大家有什么疑问或者建议的话,欢迎评论区留言。
拜拜ヾ(•ω•`)o
相关文章:

【Docker】Docker比虚拟机快的原因、ubuntu容器、镜像的分层概念和私有库的详细讲解
🚀欢迎来到本文🚀 🍉个人简介:陈童学哦,目前学习C/C、算法、Python、Java等方向,一个正在慢慢前行的普通人。 🏀系列专栏:陈童学的日记 💡其他专栏:CSTL&…...

java.lang.IllegalArgumentException: Invalid character found in methodname
postman请求异常:java.lang.IllegalArgumentException: Invalid character found in method name. HTTP method names must be tokens...

【PCB专题】Allegro高速电路Xnet网络等长约束——SDIO信号为例
高速PCB板布线过程中,经常遇到等长设置问题,例如DDR的一组数据线和地址线等。但是由于数据线和地址线中间有一个电阻(或排阻),这种情况下设置等长就要引入Xnet的概念,通过设置Xnet的等长来确保数据线和地址线的等长。 由无源、分立器件(电阻、电容、电感)连接起来的几段…...

leetcode每日一练-第278题-第一个错误的版本
一、思路 二分查找——因为它可以快速地将版本范围缩小一半,从而更快地找到第一个坏版本。 二、解题方法 维护一个左边界 left 和一个右边界 right,在每一步循环中,我们计算中间版本 mid,然后检查它是否是坏版本。如果是坏版本…...
最小生成树笔记(Prim算法Kruskal算法)
1.最小生成树 最小生成树(Minimum Spanning Tree,简称MST)是指:在一个连通无向图中,找到一个包含所有顶点的树,且该树的所有边的权重之和最小。 换句话说,最小生成树是原图中的一个子图&#…...
4、数据清洗
4、数据清洗 前面我们处理的数据实际上都是已经被处理好的规整数据,但是在大数据整个生产过程中,需要先对数据进行数据清洗,将杂乱无章的数据整理为符合后面处理要求的规整数据。 数据去重 1.删除重复数据groupby().count():可以…...

Python-OpenCV 图像的基础操作
图像的基础操作 获取图像的像素值并修改获取图像的属性信息图像的ROI区域图像通道的拆分及合并图像扩边填充图像上的算术运算图像的加法图像的混合图像的位运算 获取图像的像素值并修改 首先读入一副图像: import numpy as np import cv2# 1.获取并修改像素值 # 读…...
test111
step3:多线程task 首先,实现两个UserService和AsyncUserService两个服务接口: package com.example.demospringboot.service;public interface UserService {void checkUserStatus(); }package com.example.demospringboot.service.impl;im…...

17. Spring 事务
目录 1. 事务定义 2. MySQL 中的事务使用 3. 没有事务时的插入 4. Spring 编程式事务 5. Spring 声明式事务 5.1 Transactional 作用范围 5.2 Transactional 参数说明 5.3 Transactional 工作原理 1. 事务定义 将⼀组操作封装成一个执行单元(封装到一起…...

【C# 基础精讲】运算符和表达式
在C#编程中,运算符和表达式是构建复杂逻辑的关键元素。运算符用于执行各种数学、逻辑和其他操作,而表达式则由运算符、变量、常量和函数组成,用于生成计算结果。本文将详细介绍C#中常见的运算符和表达式的概念,以及它们在程序中的…...
【搜索】DFS连通性模型
算法提高课笔记 目录 迷宫题意思路代码 红与黑题意思路代码 DFS 的搜索分为两大部分: 内部搜索:一个图中从一个点搜到另一个点外部搜索:从一张图(状态)搜到另一张图(状态) 在第一个部分里是图…...

项目优化后续 ,手撸一个精简版VUE项目框架!
之前说过项目之前用的vben框架,在优化完性能后打包效果由原来的纯代码96M变成了56M,后续来啦,通过更换框架,代码压缩到了36M撒花~ 现在就来详细说说是怎么手撸一个框架的! 方案: 搭建一套 vite vue3 a…...

【深度学习笔记】TensorFlow 基础
在 TensorFlow 2.0 及之后的版本中,默认采用 Eager Execution 的方式,不再使用 1.0 版本的 Session 创建会话。Eager Execution 使用更自然地方式组织代码,无需构建计算图,可以立即进行数学计算,简化了代码调试的过程。…...
面试题-springcloud中的负载均衡是如何实现的?
一句话导读 Springcloud中的负载均衡是通过Ribbon实现的,自带有很多负载均衡策略,如:包括轮询(Round Robin)、随机(Random)、加权轮询(Weighted Round Robin)、加权随机&…...
flink的ProcessWindowFunction函数的三种状态
背景 在处理窗口函数时,ProcessWindowFunction处理函数可以定义三个状态: 富函数getRuntimeContext.getState, 每个key每个窗口的状态context.windowState(),每个key的状态context.globalState,那么这几个状态之间有什么关系呢? …...

day50-springboot+ajax分页
分页依赖: <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.0.0</version> </dependency> 配置: …...

Win7 专业版Windows time w32time服务电脑重启后老是已停止
环境: Win7 专业版 问题描述: Win7 专业版Windows time w32time服务电脑重启后老是已停止 解决方案: 1.检查启动Remote Procedure Call (RPC)、Remote Procedure Call (RPC) Locator,DCOM Server Process Launcher这三个服务是…...

全网最强,接口自动化测试-token登录关联实战总结(超详细)
目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 在PC端登录公司的…...

OLAP ModelKit Crack,ADO.NET和IList
OLAP ModelKit Crack,ADO.NET和IList OLAP ModelKit是一个多功能的.NET OLAP组件,用C#编写,只包含100%托管代码。它具有XP主题的外观,并能够使用任何.NET数据源(ADO.NET和IList)。借助任何第三方组件(尤其是图表组件)呈现数据的能力扩展了产品…...

4 三组例子,用OpenCV玩转图像-AI-python
读取,缩放,旋转,写入图像 首先导入包,为了显示导入matplotlib/为了在matplotlib显示 导入CV2/查看版本 导入图片/查看图片类型 图片数组 数组大小 对于opencv通道顺序蓝色B、绿色G、红色R matplotlib通道顺序为 红色R、绿色G、蓝…...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...

Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

JVM 内存结构 详解
内存结构 运行时数据区: Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器: 线程私有,程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 每个线程都有一个程序计数…...
MySQL JOIN 表过多的优化思路
当 MySQL 查询涉及大量表 JOIN 时,性能会显著下降。以下是优化思路和简易实现方法: 一、核心优化思路 减少 JOIN 数量 数据冗余:添加必要的冗余字段(如订单表直接存储用户名)合并表:将频繁关联的小表合并成…...
python爬虫——气象数据爬取
一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用: 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests:发送 …...
小木的算法日记-多叉树的递归/层序遍历
🌲 从二叉树到森林:一文彻底搞懂多叉树遍历的艺术 🚀 引言 你好,未来的算法大神! 在数据结构的世界里,“树”无疑是最核心、最迷人的概念之一。我们中的大多数人都是从 二叉树 开始入门的,它…...

在 Visual Studio Code 中使用驭码 CodeRider 提升开发效率:以冒泡排序为例
目录 前言1 插件安装与配置1.1 安装驭码 CodeRider1.2 初始配置建议 2 示例代码:冒泡排序3 驭码 CodeRider 功能详解3.1 功能概览3.2 代码解释功能3.3 自动注释生成3.4 逻辑修改功能3.5 单元测试自动生成3.6 代码优化建议 4 驭码的实际应用建议5 常见问题与解决建议…...

Matlab实现任意伪彩色图像可视化显示
Matlab实现任意伪彩色图像可视化显示 1、灰度原始图像2、RGB彩色原始图像 在科研研究中,如何展示好看的实验结果图像非常重要!!! 1、灰度原始图像 灰度图像每个像素点只有一个数值,代表该点的亮度(或…...

RushDB开源程序 是现代应用程序和 AI 的即时数据库。建立在 Neo4j 之上
一、软件介绍 文末提供程序和源码下载 RushDB 改变了您处理图形数据的方式 — 不需要 Schema,不需要复杂的查询,只需推送数据即可。 二、Key Features ✨ 主要特点 Instant Setup: Be productive in seconds, not days 即时设置 :在几秒钟…...