01. Docker:概述和认识

目录

一、云基础知识

1、常见的云服务厂商

2、云计算服务模式三种层次

3、什么是虚拟化

4、什么是虚拟机

5、虚拟化产品

5.1 仿真虚拟化产品

5.2 半虚拟化产品

5.3 全虚拟化产品

6、虚拟机架构

6.1 寄居架构

6.2 源生架构

二、认识容器

1、容器的概述

2、容器的优点

3、容器的缺点

4、容器的相关技术

三、认识Docker

1、Docker概念

2、Docker发展史

3、Docker与虚拟机的区别

4、Docker三大核心概念

4.1 image 镜像

4.2 container 容器

4.3 repostory 仓库

5、Docker容器在内核中支持两种重要技术

5.1 Namespace(命名空间)

5.2 Control Groups (cgroups)


一、云基础知识

1、常见的云服务厂商

  • 国内云:阿里云、华为云、腾讯云、移动云、百度云、天翼云(私有云)
  • 国外云:谷歌云、亚马逊云、甲骨文云

选择云服务提供商时,通常需要考虑服务的稳定性、性能、价格、地域覆盖范围、安全性等因素

2、云计算服务模式三种层次

  • 基础设施即服务(IaaS - Infrastructure as a Service):
    • 在这一层,提供商提供基础的计算资源,如虚拟机、存储空间和网络资源。用户可以通过这些资源构建自己的应用程序和环境,管理操作系统和应用程序。
  • 平台即服务(PaaS - Platform as a Service):
    • PaaS层在IaaS的基础上提供更高级的服务,包括开发工具、数据库管理系统、中间件等。用户可以在这一层上开发、运行和管理应用程序,而无需关心基础设施的细节。
  • 软件即服务(SaaS - Software as a Service):
    • SaaS是最顶层的服务模式,用户通过互联网访问和使用提供商提供的应用程序。用户无需关心应用程序的维护、升级和安全性,只需专注于使用应用程序来解决业务问题。

每个层级都提供不同程度的管理和控制权,用户可以根据自身需求选择适合的服务模式

3、什么是虚拟化

        虚拟化是一种技术,通过它可以将计算资源(如服务器、存储、网络)或应用程序等进行逻辑上的隔离,使其看起来像是独立的实体。这种虚拟化技术可以让多个虚拟实体(虚拟机、容器等)共享同一物理资源,从而提高资源利用率、降低成本,并简化管理

在计算领域中,有几种常见的虚拟化技术:

  • 硬件虚拟化:硬件虚拟化是通过虚拟化软件(如Hypervisor)在物理服务器上创建多个虚拟机,每个虚拟机可以运行独立的操作系统和应用程序。这种虚拟化技术使得一台物理服务器可以同时运行多个虚拟服务器,提高了资源利用率
  • 容器虚拟化:容器虚拟化是一种轻量级的虚拟化技术,通过容器引擎(如Docker)在操作系统级别创建独立的容器,每个容器可以运行一个应用程序及其依赖项。容器共享主机操作系统的内核,因此相比虚拟机更加轻量级,启动速度更快
  • 网络虚拟化:网络虚拟化是通过虚拟化技术将网络资源进行逻辑隔离,使得不同的网络实体(如虚拟机、容器)可以共享同一物理网络基础设施,实现网络资源的灵活分配和管理。

        虚拟化技术在云计算、数据中心、网络等领域得到广泛应用,可以提高资源利用率、灵活性和可扩展性,同时简化部署和管理。通过虚拟化技术,用户可以更高效地利用计算资源,实现快速部署、弹性扩展和灵活管理

4、什么是虚拟机

        虚拟机(Virtual Machine)是一种软件实体,它模拟了具有独立功能的物理计算机。虚拟机可以在一台物理计算机上创建多个独立的虚拟环境,每个虚拟机都可以运行自己的操作系统和应用程序,就像是在一台独立的物理计算机上运行一样

        虚拟机技术的核心是虚拟化技术,通过虚拟化软件(Hypervisor)在物理计算机上创建并管理多个虚拟机。每个虚拟机都被分配了一部分物理计算机的资源,如处理器、内存、存储和网络等。这使得多个虚拟机可以在同一台物理计算机上同时运行不同的操作系统和应用程序,而彼此之间相互隔离,互不干扰

虚拟机的优点包括:

  • 资源隔离:每个虚拟机拥有自己的资源分配,相互之间不会干扰。
  • 灵活性:可以在同一台物理计算机上运行不同类型的操作系统和应用程序。
  • 资源利用率:提高了物理计算机资源的利用率,降低了硬件成本。
  • 快速部署:可以快速创建和部署新的虚拟机,适用于快速搭建开发环境或测试环境等场景。

        虚拟机广泛应用于服务器虚拟化、开发测试环境、云计算等领域,为用户提供了更灵活、高效的计算资源管理方式

5、虚拟化产品

5.1 仿真虚拟化产品

  • 仿真虚拟化产品是一种虚拟化技术,它通过模拟硬件和软件环境来创建虚拟化实例。与传统虚拟化不同,仿真虚拟化产品不依赖于物理硬件的虚拟化支持,而是在软件层面模拟硬件和操作系统的功能,从而实现虚拟化
  • 在仿真虚拟化中,一个称为仿真器(simulator)或模拟器(emulator)的软件会模拟硬件的行为,让虚拟机(虚拟实例)以为自己在运行于真实硬件上。这种虚拟化技术通常用于开发、测试、教育和研究等领域,以便在不同的硬件和软件环境中运行和测试应用程序

一些常见的仿真虚拟化产品包括:

  • VMware Workstation:
    • VMware Workstation 是一款针对 Windows 和 Linux 操作系统的虚拟化软件。它允许用户在个人计算机上创建、配置和运行多个虚拟机,以便在同一台物理计算机上同时运行多个操作系统和应用程序。VMware Workstation 提供了丰富的功能,包括快照、虚拟网络配置、共享文件夹等,适用于开发、测试、培训等场景
  • VMware Fusion:
    • VMware Fusion 是专为 macOS(苹果电脑)平台设计的虚拟化软件。类似于 VMware Workstation,VMware Fusion 允许 macOS 用户在自己的 Mac 计算机上创建和运行虚拟机,以便在 Mac 上同时运行 Windows、Linux 或其他操作系统。VMware Fusion 提供了与 macOS 集成的特性,如 Launchpad 集成、Retina 显示支持等,使用户可以方便地在 Mac 上体验其他操作系统
  • QEMU:
    • QEMU 是一个开源的仿真虚拟化工具,可以模拟多种硬件架构和操作系统,包括 x86、ARM、PowerPC 等。它广泛用于开发和测试嵌入式系统、操作系统和应用程序

5.2 半虚拟化产品

  • 在半虚拟化中,虚拟机知道自己在虚拟化环境中运行,并与虚拟化层进行协作。客户操作系统的部分代码会被修改以便更有效地与虚拟化层通信
  • 半虚拟化通常比全虚拟化具有更好的性能,因为虚拟机可以更直接地与虚拟化层交互,减少了虚拟化层的介入
  • 但半虚拟化需要客户操作系统的支持,可能需要特定的操作系统版本或内核

一些常见的半虚拟化产品包括:

  • Xen(rehl 5自带):
    • Xen 是一个开源的虚拟化平台,支持半虚拟化技术。rehl 5自带Xen(虚拟机监视器)。在 Xen 中,虚拟机通过修改后的操作系统(称为 Xen 启动加载程序或Dom0)来与 Hypervisor 进行通信,实现半虚拟化
  • Hyper-V(微软):
    • Microsoft 的虚拟化平台 Hyper-V 也支持一定程度的半虚拟化技术,通过与虚拟机中的操作系统进行通信来提高性能
  • VirtualBox:
    • VirtualBox 是由 Oracle 公司开发的免费开源虚拟化软件,可在各种操作系统上运行,包括 Windows、MacOS、Linux 和 Solaris 等。 VirtualBox 提供了一个用户友好的界面,方便用户创建、配置和管理虚拟机
    • VirtualBox 主要用于桌面虚拟化,即在个人计算机上创建虚拟机来运行其他操作系统或软件。它适用于开发、测试、教育和个人用户等场景
  • Citrix Hypervisor:
    • Citrix Hypervisor,以前称为 XenServer,是由 Citrix 公司开发的企业级虚拟化平台,基于开源虚拟化技术 Xen。Citrix Hypervisor 提供了丰富的功能,支持高可用性、虚拟机迁移、资源池管理等企业级特性
    • Citrix Hypervisor 主要用于服务器虚拟化,即在服务器上创建虚拟机来运行各种工作负载,包括应用程序、数据库、Web 服务等。它适用于企业级环境,提供了强大的管理和监控功能

5.3 全虚拟化产品

  • 在全虚拟化中,虚拟机(VM)完全模拟了物理硬件,包括处理器、内存、存储和网络等设备。虚拟机中的操作系统以为自己在运行在真实的物理硬件上,不需要对操作系统进行修改
  • 全虚拟化通常使用Hypervisor来创建和管理虚拟机,Hypervisor负责将虚拟机的指令翻译成对物理硬件的操作,并提供资源隔离和管理功能
  • 优点包括广泛兼容性和易用性,但由于需要完全模拟硬件,性能开销较大

一些常见的全虚拟化产品包括:

  • ESXi(普遍使用次数多):
    • ESXi 是 VMware 公司的一款基于 Type-1 Hypervisor 的虚拟化操作系统,用于在物理服务器上直接运行虚拟机。它是一种裸机虚拟化技术,可以直接访问物理服务器的硬件资源,从而提供高性能和效率
    • ESXi 被设计为一种轻量级、高性能的虚拟化解决方案,可以安装在服务器硬件上,作为虚拟化平台来运行多个虚拟机实例
    • ESXi是裸金属之上安装的虚拟化产品,首先需要在服务器上安装ESXi操作系统,然后使用客户端或网页端连接登录该ESXi操作系统,系统层会调用硬件服务器中的配置(网络、存储、CPU、内存)来创建虚拟机

  • vSphere:
    • vSphere 是 VMware 公司的虚拟化平台,包括了多个产品和组件,用于构建和管理虚拟化环境。vSphere 提供了一整套的虚拟化解决方案,包括计算、存储、网络和管理等功能
    • vSphere 包括了多个产品和组件,如 vCenter Server(用于集中管理虚拟化环境)、ESXi(用于虚拟化服务器)、vSphere Client(用于管理虚拟化资源)、vSphere Hypervisor(免费版本的 ESXi)等
  • KVM:
    • KVM是一个基于Linux内核的开源虚拟化技术,它将Linux内核转化为一个类型 1 的 Hypervisor,可以让用户在其上运行多个虚拟机。
    • KVM利用处理器的虚拟化扩展(如Intel VT-x和AMD-V)来提供硬件辅助虚拟化,从而实现更高的性能和效率。
    • KVM支持全虚拟化和硬件辅助虚拟化,可以在Linux系统上搭建虚拟化环境,是许多虚拟化平台和云计算解决方案的基础之一
    • KVM 通过使用内核,再调用QEMU组件(调用硬件设备,来完成CPU、内存、硬盘的逻辑划分) 来完成虚拟化
  • OpenStack:
    • OpenStack是一个开源的云计算平台,旨在提供弹性计算、存储和网络资源的自动化管理。它由一系列的项目组成,每个项目负责不同的云计算功能,如计算(Nova)、网络(Neutron)、存储(Cinder、Swift)等
    • OpenStack提供了一个完整的云计算解决方案,可以用于构建私有云、公共云和混合云环境。用户可以通过OpenStack管理虚拟机、存储、网络等资源,并提供自助服务的云计算环墩

6、虚拟机架构

6.1 寄居架构

        虚拟化产品的寄居架构是一种虚拟化技术架构,其中虚拟机(VM)在一个称为“寄主”(host)的物理服务器上运行,而不是在物理服务器的硬件上直接运行。这种架构使得多个虚拟机可以共享同一台物理服务器的计算资源,从而提高资源利用率和灵活性

        在虚拟化产品的寄居架构中,每个虚拟机都被分配一部分物理服务器的计算资源,如处理器、内存、存储和网络。虚拟化软件负责管理这些资源的分配和调度,以确保不同虚拟机之间的隔离和性能

        一些常见的虚拟化产品的寄居架构包括:VMware vSphere、Microsoft Hyper-V、KVM

数据流向:真实的操作系统 ----> 虚拟化产品 ----> 虚拟化操作系统或软件

6.2 源生架构

        虚拟化产品的本地架构是一种虚拟化技术架构,其中虚拟机(VM)直接在物理服务器的硬件上运行,而无需依赖宿主操作系统。这种架构通常称为“裸机虚拟化”或“裸金属虚拟化”,因为虚拟化软件直接在硬件上运行虚拟机,而不需要额外的操作系统层

        本地虚拟化架构的优势在于减少了虚拟化软件和操作系统之间的层级,提高了性能和效率。由于虚拟机直接访问物理硬件资源,因此在本地虚拟化环境中,虚拟机的性能往往更接近于物理服务器的性能

        一些常见的虚拟化产品的本地架构包括:Xen、VMware ESXi

数据流向:裸金属服务器 ----> 虚拟化产品

二、认识容器

1、容器的概述

        容器是一种轻量级、可移植的软件打包技术,用于将应用程序及其所有依赖关系(如库、配置文件等)打包在一起,以便在不同计算环境中进行一致性部署和运行。每个容器都是一个独立、安全的运行时环境,可以在其上运行应用程序,而不会受到宿主系统或其他容器的影响​​​​​

        容器是在linux上本机运行,并与其他容器共享主机的内核,它运行的是一个独立的进程,不占用其他任何可执行文件的内存,非常轻量。虚拟机运行的是一个完整的操作系统,通过虚拟机管理程序对主机资源进行虚拟访问,相比之下需要的资源更多。

        一些流行的容器技术包括 Docker 和 Kubernetes。Docker 是一个开源的容器化平台,提供了创建、部署和运行容器的工具和环境。 Kubernetes 则是一个用于自动化容器部署、扩展和管理的开源平台,可以帮助管理大规模的容器化应用程序

        总的来说,容器技术为开发人员和运维团队提供了一种灵活、高效的部署方式,可以加快应用程序的交付速度,提高整体的可移植性和可靠性

2、容器的优点

  • 轻量级:与虚拟机相比,容器更加轻量级,因为它们共享宿主操作系统的内核,无需每个容器都运行一个完整的操作系统
  • 可移植性:容器打包了应用程序及其所有依赖项,使得应用程序可以在不同的计算环境中以相同的方式运行,无需担心环境差异导致的问题
  • 快速部署:由于容器包含了应用程序的所有组件,因此可以快速部署和启动,减少了配置和依赖项设置的复杂性
  • 隔离性:每个容器都是独立的运行时环境,具有自己的文件系统、进程空间和网络空间,可以实现应用程序之间的隔离,确保安全性和稳定性
  • 可互换:可以即时部署更新和升级
  • 可扩展:可以增加并自动分发容器副本
  • 可堆叠:可以垂直和即时堆叠服务

3、容器的缺点

  • 复杂性增加:随着容器及应用数量的增加,同时也伴随着复杂性的增加。在生产环境中管理如此之多的容器是一个极具挑战性的任务,可以使用 Kubernetes 和 Mesos 等工具管理具有一定规模数量的容器
  • 原生 Linux 支持:大多数容器技术,比如 Docker,基于 Linux 容器(LXC),相比于在原生 Linux 中运行容器,在 Microsoft 环境中运行容器略显笨拙,并且日常使用也会带来复杂性
  • 不成熟:容器技术在市场上是相对新的技术,需要时间来适应市场。开发者中的可用资源是有限的,如果某个开发者陷入某个问题,可能需要花些时间才能解决问题

        总的来说,容器技术的优点远大于缺点,特别是在现代应用程序开发和部署中,容器技术已经成为一种不可或缺的工具,可以提高开发效率、部署速度和系统可靠性

4、容器的相关技术

  • Docker
    • Docker 是一个基于Go语言实现的开源的容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows 机器上
  • Podman
    • Podman 是一个用于管理容器和镜像的工具,类似于 Docker。它是一个开源项目,旨在提供一个简单、快速和安全的容器管理解决方案
  • K8s
    • Kubernetes,它是一个用于自动部署、扩展和管理容器化应用程序的开源平台。提供了一个可靠的基础设施平台,可以用于构建、部署和管理跨主机的容器化应用程序
  • container
    • docker核心组件之一,container是 Docker 打包的核心,它包含了应用程序及其依赖项、文件系统和运行时环境,以便在不同的计算环境中统一运行。容器化技术使得应用程序可以在各种环境中以相同的方式运行,而无需关心底层的操作系统和硬件差异
  • LXC
    • linux 容器化技术,类似于 Docker。LXC 不同于传统的虚拟机技术,它通过利用 Linux 内核提供的命名空间和 cgroups 等功能,实现了对进程和资源的隔离,从而能够在单一 Linux 主机上运行多个独立的 Linux 系统容器
  • crio
    • 轻量级,一个专门为 Kubernetes 设计的轻量级容器运行时工具。它作为 Kubernetes CRI(容器运行时接口)的一部分,用于在 Kubernetes 集群中运行容器。CRI-O 专注于符合 Open Container Initiative(OCI)规范的容器运行,同时支持容器管理和生命周期操作
  • apche mesos
    • 是一个开源的集群管理系统,旨在提供高效且可扩展的资源隔离和共享。它允许用户在整个数据中心的服务器上运行各种应用程序框架,并有效地管理计算资源。Mesos可以自动化任务分配和资源调度,使得整个集群的利用率更高,同时提供了弹性和容错能力。Apache Mesos还支持多种不同类型的工作负载,包括大数据处理、容器化应用程序等

三、认识Docker

1、Docker概念

        docker是一个开源的应用容器引擎,基于go语言开发并遵循了apache2.0协议开源。 docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 linux服务器,也可以实现虚拟化。 容器是完全使用沙箱机制,相互之间不会有任何接口(类iphone的app),并且容器开销极其低

        Docker的设计宗旨:Build,Ship and Run Any App,Anywhere,即通过对应用组件的封装、发布、部署、运行等生命周期的管理,达到应用组件级别的“一次封装,到处运行”的目的。这里的组件,既可以是一个应用,也可以是一套服务,甚至是一个完整的操作系统

        Docker的Logo设计为蓝色鲸鱼,拖着许多集装箱。鲸鱼可看作为宿主机,集装箱可理解为相互隔离的容器,每个集装箱中都包含自己的应用程序

2、Docker发展史

Docker是什么

Docker 是一个基于Go语言实现的开源的容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows 机器上。

Docker的发展历史

2008年

Solomon Hykes 和他的朋友 Kamel Founadi、Sebastien Pahl 共同创立了一家名为 DotCloud 的公司,目标是利用一种叫做容器的技术来创建他们称作是『大规模的创新工具』:一种任何人都可以使用的编程工具。

2013年

  • 2013 年 3 月

Docker 创始人 Solomon Hykes 在 PyCon 大会上的演讲中首次公开介绍了 Docker 这一产品。

  • 2013年3月20日

dotCloud发布了 Docker 的首个版本 0.1.0,并将Docker源码进行开源(https://github.com/docker)。

  • 2013年9月

红帽公司成为Docker的主要合作伙伴,利用Docker来驱动他的OpenShift云业务。随后,谷歌、亚马逊以及DigitalOcean也迅速的在其云服务平台提供了Docker的支持。

主流云厂商的加入,加速Docker的发展进度。

Docker 的强大之处在于它通过可移植的形式和易于使用的工具在应用程序和基础设施之间创造了独立性。其结果是,Docker将容器技术大众化,并解决了困扰数百万开发人员的"matrix from hell"问题,使容器技术成为主流。

  • 2013年底

DotCloud Inc则更名为Docker Inc

2014年

  • 2014年6月

DockerCon大会上Docker正式发布了Docker 1.0 版本。

这意味着Docker的稳定性和可靠性已经基本满足了生产环境的运行需求。

会议上同时发布Docker Image的镜像仓库Docker Hub(http://hub.docker.com/),并指出已经有超过14,000个Docker化的应用存储在他们的publc registry中。

同样是2014年6月,基于谷歌内部强大的Borg系统而开发出来的kubernetes横空处世,刷新了人们对容器的理解。

  • 2014年12月

DockerConEU大会上,Docker Swarm 和Docker Machine同时面世。

Docker Swarm是一个Docker集群管理工具,而Docker Machine是部署Docker主机的命令工具。

CoreOS宣布开发自家的容器运行环境rkt以及appc(应用容器规范)。

2015年

  • 2015年6月

容器技术不只Docker,很早之前Google就投资了CoreOS来做竞争的容器--Rocket。

那时是三家鼎立:Docker/Rocket/Warden,为了避免惨烈的竞争,大家终于统一意见,决定成立固定的标准来良好发展容器技术。

由Docker、IBM、微软、红帽及Google等厂商所组成的开放容器项目OCP联盟成立,该项目旨在建立软件容器的通用标准。OCP成立于Linux基金会之下,其使命是使用户和公司能够继续创新和开发基于容器的解决方案,并充满信心地保护其先前的开发工作,并且不会造成行业分散。作为该计划的一部分,Docker将捐赠其软件容器格式,运行时以及相关规范的代码。应用容器规范(“ appc”)计划的领导者,包括创始成员CoreOS,也将把他们的技术领导力和支持带到OCP。

2015 年,Docker 发布了 runC工具,runc是根据OCI(Open Container Initiative)标准生成的一个cli工具,一个轻量级的跨平台的容器运行时命令行小工具,可以直接利用 libcontainer 运行容器,而无需通过 docker engine。runC 的目标是使标准容器在任何地方都可用。

2016年

  • 2016年6月

DockerCon上,Docker宣布了Open Container Initiative的正式成立。

OCI意在业界一起合作,开发一个开放的、标准的容器格式和runtime。OCI也属于Linux基金会的协作项目,一直秉承着开放的模式来管理,其roadmap在GitHub上,大家都可以看到并参与进去:https://github.com/opencontainers/specs/blob/master/ROADMAP.md

2016年,OCI标准制定后,Docker 将 containerd 独立拆分,并将其捐赠给了社区。将这个组件分解为一个单独的项目,使得 docker 将容器的管理功能移出 docker 的核心引擎并移入一个单独的守护进程(即 containerd)。

在2016年,人们认识到容器技术本身的价值时在于容器的编排,而此时的Docker项目令人惊讶的放弃了Swarm项目,而是想将容器的编排和集群的管理功能添加到Docker项目当中。而Kubernetes却与Docker不同的是推进民主化架构,使得通过暴露Kubernetes API的方法,让更多的人来不断丰富kubernetes的插件。

2017年

从2013年3月开始推出0.1.0版本,到17年2月1.13的版本都采用x.x的形式。

从 2017 年第一季度开始,Docker 版本号遵循 YY.MM-xx 格式。

采用新格式前的最后一个版本是 Docker 1.13。

2017 年是容器成为主流技术的一年。

2017 年于 Austin 举办的 DockerCon 上开源Docker项目正式命名为 Moby 项目。由于这次改名,GitHub 上的 docker/docker 库也被转移到了 moby/moby,并且拥有了项目自己的 Logo。

Moby是Docker的上游项目,是Docker之母。正因如此,Docker这个名字也已经不适合作为原来源码库的名字了。而对于普通的容器个人使用者或者企业,影响并不是太大。对于一些容器系统厂商和组件提供方,Moby提供了一种新形式的协作平台,可以定制化、增强、适配容器系统等等。

于此同时,将Docker本身拆分为 Docker-CE免费版 和 Docker-EE商业版。

Docker-CE目前是docker公司维护的开源项目,是一个基于Moby项目的免费的容器产品。

Docker-EE目前是docker公司维护的闭源项目,是docker公司的商业产品。

至此,Docker天下三分。其中Moby由社区维护,Docker-CE由Docker公司维护,Docker-EE是Docker公司闭源的商业产品。

2018年及以后

容器市场基本趋于稳定,一切都向着优化改进方向发展。

Docker公司是底层容器引擎及运行时的。

容器的编排进过几轮的激烈竞争,基本是Google的Kubernetes一家独大。

新的战斗已经由容器和编排的战场,逐渐迁移到应用领域。云原生CNCF将引领新的技术方向,微服务、ServcieMesh、Envoy、ServerLess等正在路上。

3、Docker与虚拟机的区别

传统部署 ----> 虚拟机部署 ----> 容器化部署的演变如下图所示:

  • Docker容器是在linux上本机运行,并与其他容器共享主机的内核,它运行的是一个独立的进程,不占用其他任何可执行文件的内存,非常轻量
  • 虚拟机运行的是一个完整的操作系统,通过虚拟机管理程序对主机资源进行虚拟访问,相比之下需要的资源更多

特性

Docker

虚拟机

部署难度

非常简单

组件多,部署复杂

启动速度        

秒级

分钟级

执行性能

和物理系统一致

VM会占用部分资源

镜像体积

MB级别

GB级别

管理效率

简单

各组件相互依赖,管理复杂

可管理性

单进程

完整的系统管理

网络连接

借助neutron可以灵活组件各类网络管理

性能

接近原生(直接在内核中运行)

50%左右的所示

系统支持量(单机)

上千个

几十个

隔离性

进程级别

操作系统级别

封装程度

直达包项目代码和依赖关系,共享宿主机内核

完整的操作系统,与宿主机隔离

4、Docker三大核心概念

4.1 image 镜像

  • Docker 的镜像是创建容器的基础,类似虚拟机的快照,可以理解为一个面向 Docker 容器引擎的只读模板
  • 通过镜像启动一个容器,一个镜像是一个可执行的包,其中包括运行应用程序所需要的所有内容包含代码,运行时间,库、环境变量和配置文件
  • Docker 镜像也是一个压缩包,只是这个压缩包不只是可执行文件,环境部署脚本,它还包含了完整的操作系统。因为大部分的镜像都是基于某个操作系统来构建,所以很轻松的就可以构建本地和远端一样的环境,这也是 Docker 镜像的精髓

4.2 container 容器

  • Docker 的容器是从镜像创建的运行实例,它可以被启动、停止和删除。所创建的每一个容器都是相互隔离、互不可见,以保证平台的安全性
  • 可以把容器看做是一个简易版的 linux 环境(包括root用户权限、镜像空间、用户空间和网络空间等)和运行在其中的应用程序
  • 镜像 nginx(run) 起来之后的一个实例,可以把容器看做时一个简易版的linux环境容器就是集装箱(logo上的集装箱)

4.3 repostory 仓库

  • Docker 仓库是用来集中保存镜像的地方,当创建了自己的镜像之后,可以使用push命令将它上传到公有仓库(Public)或者私有仓库(Private)。当下次要在另外一台机器上使用这个镜像时,只需从仓库获取
  • Docker 的镜像、容器、日志等内容全部都默认存储在 /var/lib/docker
  • 仓库就是放镜像的场所,最大的公开库是docker hub
  • registry 是仓库主从服务器,实际上参考注册服务器上存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag) 仓库分为两种,公有仓库和私有仓库,最大的公开仓库是 docker Hub,存放了数量庞大的镜像供用户下载,国内的有docker pool。这里仓库的概念与 Git 类似,registry 可以理解为 github 这样的托管服务

5、Docker容器在内核中支持两种重要技术

        docker 本质就是宿主机的一个进程,docker是通过 namespace 实现资源隔离,通过 cgroup 实现资源限制,通过写时复制技术(copy-on-write)实现了高效的文件操作(类似虚拟机的磁盘比如分配500g并不是实际占用物理磁盘500g)

5.1 Namespace(命名空间)

        命名空间是Linux内核提供的一种机制,用于隔离系统资源,使得一个进程看到的资源是有限的。Docker使用不同类型的命名空间(如PID、Network、Mount、IPC等)来实现容器之间的隔离,确保各个容器拥有自己独立的运行环境

namespace

系统调用参数

隔离内容

UTS

CLONE_NEWUTS

主机名与域名

IPC

CLONE_NEWWIPC

信号量、消息队列和共享内存

PID

CLONE_NEWPID

进程编号

NETWORK

CLONE_NEWNET

网络设备、网络栈、端口等

MOUNT

CLONE_NEWNS

挂载点(文件系统)

UDER

CLONE_NEWUSER

用户和组(3.8以后的内核才支持)

5.2 Control Groups (cgroups)

        cgroups是Linux内核提供的另一种机制,用于限制、账户和隔离一个或多个进程的资源使用(如CPU、内存、磁盘I/O等)。Docker使用cgroups来管理容器的资源配额,确保容器在运行时不会占用过多的系统资源,从而实现资源控制和管理

  • cgroup的特点
  1. cgroup的api以一个伪文件系统的实现方式,用户的程序可以通过文件系统实现cgroup的组件管理
  2. cgroup的组件管理操作单元可以细粒度到线程级别,另外用户可以创建和销毁cgroup,从而实现资源的分配和再利用
  3. 所有资源管理的功能都以子系统的方式实现,接口统一子任务创建之初与其父任务处于同一个cgroup的控制组
  • cgroup的四大功能
  1. 资源限制:可以对任务使用的资源总额进行限制
  2. 优先级分配:通过分配的cpu时间片数量以及磁盘IO带宽大小,实际上相当于控制了任务运行优先级
  3. 资源统计:可以统计系统的资源使用量,如cpu时长,内存用量等
  4. 任务控制:cgroup可以对任务执行挂起、恢复等操作
  5. 总的来说,cgroup就是控制容器能够使用资源的上限
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MineGi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值