【Docker】Docker比虚拟机快的原因、ubuntu容器、镜像的分层概念和私有库的详细讲解

简介: 【Docker】Docker比虚拟机快的原因、ubuntu容器、镜像的分层概念和私有库的详细讲解

b96fa22148ae443bba7588fb2ee43aa3.png前言:Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux系统 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

1.Docker比虚拟机快的原因

众所周知,Docker比虚拟机快,那么为什么呢?凭啥Docker比虚拟机快呢?因为它更帅吗?任何主流的东西都是有它的优势的。

Docker比虚拟机快的主要原因有以下几点:

  • 1.资源利用率高Docker容器共享宿主机的操作系统内核,不需要像虚拟机一样每个实例都运行完整的操作系统。这使得Docker容器在启动和停止时更加轻量级和快速。
  • 2.快速启动时间:Docker容器的启动时间通常只需要几秒钟,而虚拟机需要几分钟甚至更长时间。这是因为Docker容器不需要启动完整的操作系统,只需加载应用程序所需的文件和依赖项。
  • 3.资源隔离:虚拟机在运行时需要为每个实例分配一定的CPU、内存和磁盘资源,而Docker容器可以共享宿主机的资源。这种资源隔离方式使得Docker容器在性能方面更加高效。
  • 4.轻量级:Docker容器的镜像大小相对较小,只包含应用程序和其依赖项,而虚拟机镜像包含完整的操作系统。这使得Docker容器在传输和存储时更加高效。

24193ae37caa4dca92617dac00fd9681.png

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会在可写层中创建新的文件或修改已有的文件,而不会改变基础镜像中的文件。


 联合文件系统的好处是它可以节省存储空间。因为每个容器都共享基础镜像的只读部分。


2e23bade1bc6444fa9d926f95eb45dfc.png


3.2Docker中的镜像加载原理

  在Docker中,镜像是用于运行容器的文件系统。镜像加载是指将镜像从Docker仓库或本地缓存加载到本地系统,以供后续创建和运行容器。

镜像加载的过程大致可以分为以下几个步骤:

1.镜像下载:如果镜像不在本地缓存中,Docker会从指定的仓库中下载镜像文件。默认情况下,Docker会从Docker Hub下载公共镜像,也可以通过配置使用其他仓库。


2.镜像分层:镜像文件实际上由多个分层组成,每个分层都包含文件系统的一部分。Docker加载镜像时,会按照分层的顺序逐个加载,并将它们合并成一个单一的文件系统。


3.分层缓存:Docker会根据镜像的分层信息进行缓存,以提高后续加载相同镜像时的速度。如果多个镜像共享相同的分层,只需要下载一次,并在本地缓存中进行复用。


4.容器创建:一旦镜像加载完成,就可以使用该镜像创建容器。容器是镜像的一个实例化对象,它包含一个独立的文件系统和运行时环境。

bd35ab856caf4cd6ae19ba06176b9c89.png

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-imageyour-registry-domain替换为实际的镜像名称和私有库地址。

  • 5.从私有库拉取镜像:
docker pull your-registry-domain:5000/your-image

这里将your-imageyour-registry-domain替换为实际的镜像名称和私有库地址。

以上就是在Docker中搭建私有库的详细步骤啦。通过私有库,你可以方便地管理和分享自己的镜像,同时也可以控制访问权限。

如果本文对大家有所帮助的话,还望各位能给我点赞、收藏并评论一下,感谢各位💕!!! 另如果大家有什么疑问或者建议的话,欢迎评论区留言。

拜拜ヾ(•ω•`)o

相关文章
|
8天前
|
Ubuntu NoSQL 开发工具
《docker基础篇:4.Docker镜像》包括是什么、分层的镜像、UnionFS(联合文件系统)、docker镜像的加载原理、为什么docker镜像要采用这种分层结构呢、docker镜像commit
《docker基础篇:4.Docker镜像》包括是什么、分层的镜像、UnionFS(联合文件系统)、docker镜像的加载原理、为什么docker镜像要采用这种分层结构呢、docker镜像commit
127 70
|
1月前
|
监控 NoSQL 时序数据库
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
251 77
|
7天前
|
Ubuntu NoSQL Linux
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
72 6
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
|
10天前
|
Ubuntu NoSQL 关系型数据库
《docker基础篇:6.本地镜像发布到私有库》包括本地镜像发布到私有库流程、docker regisry是什么、将本地镜像推送到私有库
《docker基础篇:6.本地镜像发布到私有库》包括本地镜像发布到私有库流程、docker regisry是什么、将本地镜像推送到私有库
83 29
|
1月前
|
监控 Docker 容器
在Docker容器中运行打包好的应用程序
在Docker容器中运行打包好的应用程序
|
18天前
|
Ubuntu Linux 开发工具
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
Docker 是一个开源的容器化平台,允许开发者将应用程序及其依赖项打包成标准化单元(容器),确保在任何支持 Docker 的操作系统上一致运行。容器共享主机内核,提供轻量级、高效的执行环境。本文介绍如何在 Ubuntu 上安装 Docker,并通过简单步骤验证安装成功。后续文章将探讨使用 Docker 部署开源项目。优雅草央千澈 源、安装 Docker 包、验证安装 - 适用场景:开发、测试、生产环境 通过以上步骤,您可以在 Ubuntu 系统上成功安装并运行 Docker,为后续的应用部署打下基础。
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
|
7天前
|
Kubernetes Linux 虚拟化
入门级容器技术解析:Docker和K8s的区别与关系
本文介绍了容器技术的发展历程及其重要组成部分Docker和Kubernetes。从传统物理机到虚拟机,再到容器化,每一步都旨在更高效地利用服务器资源并简化应用部署。容器技术通过隔离环境、减少依赖冲突和提高可移植性,解决了传统部署方式中的诸多问题。Docker作为容器化平台,专注于创建和管理容器;而Kubernetes则是一个强大的容器编排系统,用于自动化部署、扩展和管理容器化应用。两者相辅相成,共同推动了现代云原生应用的快速发展。
56 11
|
24天前
|
存储 Kubernetes 开发者
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
Docker 是一种开源的应用容器引擎,允许开发者将应用程序及其依赖打包成可移植的镜像,并在任何支持 Docker 的平台上运行。其核心概念包括镜像、容器和仓库。镜像是只读的文件系统,容器是镜像的运行实例,仓库用于存储和分发镜像。Kubernetes(k8s)则是容器集群管理系统,提供自动化部署、扩展和维护等功能,支持服务发现、负载均衡、自动伸缩等特性。两者结合使用,可以实现高效的容器化应用管理和运维。Docker 主要用于单主机上的容器管理,而 Kubernetes 则专注于跨多主机的容器编排与调度。尽管 k8s 逐渐减少了对 Docker 作为容器运行时的支持,但 Doc
122 5
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
|
30天前
|
关系型数据库 应用服务中间件 PHP
实战~如何组织一个多容器项目docker-compose
本文介绍了如何使用Docker搭建Nginx、PHP和MySQL的环境。首先启动Nginx容器并查看IP地址,接着启动Alpine容器并安装curl测试连通性。通过`--link`方式或`docker-compose`配置文件实现服务间的通信。最后展示了Nginx配置文件和PHP代码示例,验证了各服务的正常运行。
50 3
实战~如何组织一个多容器项目docker-compose
|
1月前
|
数据建模 应用服务中间件 nginx
docker替换宿主与容器的映射端口和文件路径
通过正确配置 Docker 的端口和文件路径映射,可以有效地管理容器化应用程序,确保其高效运行和数据持久性。在生产环境中,动态替换映射配置有助于灵活应对各种需求变化。以上方法和步骤提供了一种可靠且易于操作的方案,帮助您轻松管理 Docker 容器的端口和路径映射。
134 3