当前位置:   article > 正文

Docker基本原理与基础概念_( ).容器和虚拟机具有类似的资源隔离和分配优势,但功能不同,因为容器是虚拟化

( ).容器和虚拟机具有类似的资源隔离和分配优势,但功能不同,因为容器是虚拟化

简介

Docker是一个开放源代码软件项目,让应用程序布署在软件容器下的工作可以自动化进行,借此在Linux操作系统上,提供一个额外的软件抽象层,以及操作系统层虚拟化的自动管理机制。
Docker利用Linux核心中的资源分离机制,例如cgroups,以及Linux核心名字空间(name space),来创建独立的软件容器(containers)。这可以在单一Linux实体下运作,避免启动一个虚拟机造成的额外负担。Linux核心对名字空间的支持完全隔离了工作环境中应用程序的视野,包括进程树、网络、用户ID与挂载文件系统,而核心的cgroup提供资源隔离,包括CPU、存储器、block I/O与网络。从0.9版本起,Dockers在使用抽象虚拟是经由libvirt的LXC与systemd - nspawn提供界面的基础上,开始包括libcontainer库做为以自己的方式开始直接使用由Linux核心提供的虚拟化的设施,

Docker特点

  • 灵活:即使是最复杂的应用也可以集装箱化。
  • 轻量级:容器利用并共享主机内核。
  • 可互换:即时部署更新和升级。
  • 便携式:在本地构建,部署到云,并在任何地方运行。
  • 可扩展:增加并自动分发容器副本。
  • 可堆叠:垂直和即时堆叠服务。

容器和虚拟机

容器和虚拟机具有类似的资源隔离和分配优势,但功能不同,因为容器虚拟化操作系统而不是硬件。容器更便携,更高效。
在这里插入图片描述

容器是应用层的抽象,它将代码和依赖关系打包在一起。多个容器可以在同一台机器上运行,并与其他容器共享操作系统内核,每个容器在用户空间中作为独立进程运行。容器占用的空间比VM少(容器映像的大小通常为几十MB),可以处理更多的应用程序,并且需要更少的VM和操作系统。

虚拟机(VM)是物理硬件的抽象,将一台服务器转变为多台服务器。虚拟机管理程序允许多台虚拟机在一台计算机上运行。每个VM都包含操作系统的完整副本,应用程序,必要的二进制文件和库 - 占用数十GB。虚拟机也可能很慢启动。

Docker的三大组件

镜像(Image)

通过运行镜像启动容器。镜像是一个可执行包,包含运行应用程序所需的所有内容 - 代码,运行时,库,环境变量和配置文件。Docker 运行容器前需要本地存在对应的镜像,如果本地不存在该镜像,Docker 会从镜像仓库
下载该镜像

容器(container

容器是图像的运行时实例,

仓库(Repository)

存放镜像的地方,一个容易混淆的概念是注册服务器(Registry ) 。实际上注册服务器是管理仓库的具体服务
器,每个服务器上可以有多个仓库,而每个仓库下面有多个镜像。从这方面来说,仓库可以
被认为是一个具体的项目或目录。例如对于仓库地址 dl.dockerpool.com/ubuntu 来说, dl.dockerpool.com 是注册服务器地址, ubuntu 是仓库名。

我们来看一个图简单说明一下三者之间的关系
在这里插入图片描述

  1. 基于镜像创建容器(run),也可以基于容器制作镜像(commit)
  2. 从远端仓库拉取镜像(pull),将本地镜像推送到远端(push)

Docker底层实现

基本架构

Docker 采用了 C/S 架构,包括客户端和服务端。Docker 守护进程 (Daemon ) 作为服务端接受来自客户端的请求,并处理这些请求(创建、运行、分发容器)
Docker 守护进程一般在宿主主机后台运行,等待接收来自客户端的消息。
Docker 客户端则为用户提供一系列可执行命令,用户用这些命令实现跟 Docker 守护进程交
互。
默认情况下,Docker守护程序侦听UNIX套接字上的连接以接受来自本地客户端的请求。通过将Docker配置为侦听IP地址和端口以及UNIX套接字,可以允许Docker接受来自远程主机的请求。

命名空间(Namespace)

命名空间是 Linux 内核一个强大的特性。每个容器都有自己单独的命名空间,运行在其中的应用都像是在独立的操作系统中运行一样。命名空间保证了容器之间彼此互不影响。

  1. pid 命名空间
    pid命名空间隔离进程id号,这意味着不同pid命名空间中的进程可以具有相同的pid。允许嵌套,因此可以很方便的实现嵌套的 Docker 容器
  2. net 命名空间
    网络隔离是通过 net 命名空间实现的, 每个 net 命名空间有独立的 网络设备, IP 地址, 路由表, /proc/net 目录。这样每个容器的网络就能隔离开来。Docker 默认采用 veth 的方式,将容器中的虚拟网卡同 host 上的一 个Docker 网桥 docker0 连接在一起。
  3. ipc 命名空间
    容器中进程交互还是采用了 Linux 常见的进程间交互方法(interprocess communication - IPC),包括信号量、消息队列和共享内存等。然而同 VM 不同的是,容器的进程间交互实际上还是host 上具有相同 pid 命名空间中的进程间交互,因此需要在 IPC 资源申请时加入命名空间信息,每个 IPC 资源有一个唯一的 32 位 id。
  4. mnt 命名空间
    类似 chroot,将一个进程放到一个特定的目录执行。mnt 命名空间允许不同命名空间的进程看到的文件结构不同,这样每个命名空间 中的进程所看到的文件目录就被隔离开了。同chroot 不同,每个命名空间中的容器在 /proc/mounts 的信息只包含所在命名空间的 mountpoint。
  5. uts 命名空间
    UTS(“UNIX Time-sharing System”) 命名空间允许每个容器拥有独立的 hostname 和 domainname, 使其在网络上可以被视作一个独立的节点而非 主机上的一个进程。
  6. user 命名空间
    每个容器可以有不同的用户和组 id, 也就是说可以在容器内用容器内部的用户执行程序而非主机上的用户

控制组(cgroups)

控制组(cgroups) 是 Linux 内核的一个特性,主要用来对共享资源进行隔离、限制、审计等。只有能控制分配到容器的资源,才能避免当多个容器同时运行时的对系统资源的竞争。控制组可以提供对容器的内存、CPU、磁盘 IO 等资源的限制和审计管理。命名空间主要是实现了系统资源的隔离,而cgroups则是负责资源的分配

联合文件系统

在这里插入图片描述
Docker采用了分层构建的机制,最底层为bootfs,在此之上为rootfs

  • bootfs主要是用于系统引导的文件系统,一旦引导完成就会将bootfs这一层卸载掉,它的存活时间非常短。

  • rootfs表现为Docker容器的根文件系统,传统模式中,系统启动之时,内核挂载rootfs时会首先将其挂载为“只读”模式,完整性自检完成后将其重新挂载为读写模式;docker中,rootfs由内核挂载为“只读”模式,而后通过“联合挂载 ”技术额外挂载一个“可写”层;

在这里插入图片描述
启动一个容器的时候,Docker会在镜像上附加一层可写层,顶层以下都只是可读,这时候用户删除底层文件,并不是真正删除而只是标记为不可见,但是实际上文件在底层还是存在的。如果用户需要修改底层文件,Docker将底层文件复制到顶层让你进行修改,同时底层文件也是存在的,只是当你读修改后的文件的时候指向的位置是顶层而不是原来的底层文件了。

图片全部来自网上,如有侵权,联系作者删除
qq:835311324
参考链接

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/blog/article/detail/80785
推荐阅读
  • 我们都知道,jmeter可以做接口测试,也可以用于性测试,现在企业中性测试也大多使用jmeterdocker是最近这些年流行起来的容器部署工具,可以创建一个容器,然后把项目放到容器中,就可以构建出一个独立的运行环境。用docker创建... [详细]

  • docker_面试docker面试dockerDocker是什么?是实现容器技术的一种工具是一个开源的应用容器引擎使用C/S架构模式,通过远程API来管理(我们本机是C,docker引擎是S,实际的构建过程是在docker引擎下完成的)可以... [详细]

  • 与dockersave不同,dockerexport只导出容器的文件系统,不包含镜像的元数据信息和层。与dockerload不同,dockerimport命令会将文件作为一个新的镜像导入,而不是还原已有的镜像。dockerexport导出的... [详细]

  • 我们知道使用镜像创建一个容器,该镜像必须与Docker宿主机系统架构一致,例如Linuxx86_64架构系统中只能使用Linuxx86_64的镜像创建容器例如我们在Linuxx86_64中构建一个username/test镜像CMDech... [详细]

  • `dockerexec-it`:在运行的容器中执行命令。-`dockerbuild-t:`:构建一个镜像。-`dockerpush:`:将镜像推送到远程仓库。-`dockerstart`:启动一个已停止的容器。-`dockerstop`:停... [详细]

  • Docker是一种流行的开源软件平台,可简化创建、管理、运行和分发应用程序的过程。它使用容器来打包应用程序及其依赖项。Docker主导了市场。大多数顶级云和IT公司都采用Docker来简化其应用程序开发工作流程。对具有Docker经验的申请... [详细]

  • 1.Docker和虚拟机有啥不同?答:Docker是轻量级沙盒,在其中运行只是应用,虚拟机里面还有额外系统。查看twt论坛_关于docker面试题关于docker面试题1.Docker和虚拟机有啥不同?答:Docker是轻量级沙... [详细]

  • docker快速安装mysqldocker安装mysql1、创建宿主机挂载磁盘目录mkdir-p/home/huangliang/mysql/datamkdir-p/home/huangliang/mysql/config122、创建配置文... [详细]

  • 最近阿里面试官问我Docker是做什么用,我记得之前360和美团,京东都问过,但是一直没时间看,最近有时间了,系统学习了一下Docker,在此做一下记录,方便各位看官学习交流一、Docker概述:Docker:本意是码头工人,言外之... [详细]

  • Docker是一个开源应用容器引擎,让开发者可以打包他们应用以及依赖包到一个可移植容器中,然后发布到任何流行Linux机器或Windows机器上,也可以实现虚拟化。如果要删除正在运行容器,需要先停止容器,然后再删除容器。进入容器后... [详细]

  • 如何通过docker快速构建个人博客网站docker构建个人博客网站1、项目地址https://gitee.com/hhll/blog-hangliang.git2、打包docker镜像并上传docker hub【1】注册dock... [详细]

  • Arthas是一款强大的Java诊断和调试工具,它能够在生产环境中实时诊断Java应用,提供强大的调试功能,帮助开发者和运维人员解决各种Java应用的性能问题和调试挑战。本指南将介绍如何在Docker环境中使用Arthas进行实战。​​​​... [详细]

  • 配置持续部署工具(如Kubernetes、DockerSwarm、AWSECS等),监视Docker镜像仓库中的新镜像,并将其自动部署到生产环境中。当Dockerfile中的指令没有变化时,Docker会重用之前的构建缓存,而不是重新执行该... [详细]

  • docker安装minio对象存储docker安装minioMinIO是一款高性能、分布式的对象存储系统.它是一款软件产品,可以100%的运行在标准硬件。即X86等低成本机器也能够很好的运行MinIO。MinIO与传统的存储和其他的对象存储... [详细]

  • 主要记录在centos当中安装MinIO_docker链接minio看看启动是否正常docker链接minio看看启动是否正常一、查看docker环境是否正常dockersearchminIO1  如果能查出来证明docker安装的没问题,... [详细]

  • 使我们在重启docker时,自动启动相关容器。配置MinIOWeb控制台端口地址。配置MiniIOApi接口端口地址。以守护式容器在后台运行。_docker安装miniodocker安装miniodocker安装Minio搜索可安装版本do... [详细]

  • Docker安装Minio_docker安装miniodocker安装minio1、检索和拉取Minio镜像#查看本地镜像dockerimages#检索minio镜像dockersearchminio#拉取minio镜像dockerpull... [详细]

  • Docker安装Minio_docker安装miniodocker安装minio文章目录一、查看Minio镜像二、下载镜像三、创建并启动Minio容器四、查看Minio容器五、登录Minio控制台六、创建桶七、创建分组八、创建MInio用户... [详细]

  • 使用docker-compose安装2023最新minio_docker-compose最新版本docker-compose最新版本上一篇使用了比较传统的方式安装minio并添加进systemctl管理,最近比较闲,把以前的一些服务改为d... [详细]

  • 1.拉取镜像dockersearchminio;//在dockerhub中查询;dockerpullminio/minio2.创建两个目录/data/config3.启动镜像容器dockerrun--nameminio-p9000:9000... [详细]

相关标签
  

闽ICP备14008679号