编辑
2022-12-30
🚀运维部署
00
请注意,本文编写于 902 天前,最后修改于 225 天前,其中某些信息可能已经过时。

目录

1.docker简介
2.docker与传统虚拟化的不同之处
1,传统的虚拟化技术
2.容器
3.总结

1.docker简介

docker使用google公司推出的GO语言进行开发实现

基于linux内核的cgroup、namespace,以及OverlayFS类的UnionFS等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术

由于隔离的进程独立于宿主和其他隔离的进程,因此称其为容器。

最初实现是基于LXC,从0.7版本以后开始去除LXC,转而使用自行开发的libcontainer,从1.1版本开始,则进一步演进为使用runC和containered

image.png

  • docker client: 客户端,用户与Docker交互的主要方式,Docker客户端可以与多个守护进程进行交互
  • docker compose: 是一个能够让开发者在Docker节点上,以单引擎模式进行多容器应用的部署和管理的python脚本工具。它通过yaml文件来配置应用程序的服务。
  • docker registry是一个存储和内容交付系统,其中维护着若干命名的docker镜像,这些镜像有不同的标记版本。(例如:有一个镜像名字叫hello/world,它有两个tags分别是2.0和2.1)。用户通过使用docker push和docker pull命令与registry进行交互。
  • docker swarm 是管理跨节点容器的编排工具,相较于docker compose 而言,compose智能编排单节点上的容器,Swarm将一群docker节点虚拟化为一个主机,使得用户只要在单一主机上操作就能完成对整个容器集群的管理工作。
  • runc是一个Linux命令行工具,用于根据OCI容器运行时规范创建和运行容器
  • containerd是一个守护程序,它管理容器生命周期,提供了在一个节点上执行容器和管理镜像的最小功能集

2.docker与传统虚拟化的不同之处

docker在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护。使得docker技术比虚拟机技术更为轻便、快捷

下面的图片比较了docker和传统虚拟化方式的不同之处:

  • 传统虚拟机技术是虚拟出一套硬件侯,在其上运行一个完整操作系统,在该系统上再运行所需应用进程。
  • 而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核。而且也没有进行硬件虚拟。

1,传统的虚拟化技术

image.png 什么是虚拟化? 如果要对物理资源进行管理,第一步就是虚拟化。

虚拟化是云计算的基础。简单来说,虚拟化就是在一台物理服务器上,运行多台“虚拟服务器”。这种虚拟服务器,也要虚拟机(VM virtial machine)

从表面来看,这些虚拟机是独立的服务器,实际上,他们共享物理服务器的CPU、内存、硬件、网卡等资源。物理机,通常称为“宿主机”。虚拟机,则称为“客户机”。

2.容器

image.png 容器也是虚拟化,但是属于《轻量级》的虚拟化,它的目的和虚拟机一样,都是为了创造“隔离环境”。但是,它又和虚拟机有很大的不同——虚拟机是操作系统级别的资源隔离,而容器本质上是进程级的资源隔离

容器是一个不依赖于操作系统,运行应用程序的环境

它通过Linux的Namespaces和Cgroup技术对应用程序进程进行隔离和限制的。

namespace的作用是隔离,它让应用进程智能看到该Namespace内的世界

Cgroup的作用是限制分配给进程的宿主机资源。

但对于宿主机来说,这些被隔离了的进程跟其他进程没有太大的区别。

容器只是运行在宿主机的一种特殊的进程,多个容器之间使用的还是同一个宿主机的操作系统内核。

3.总结

总的来说,虚拟机非常适合传统的资源密集型单片应用程序,尤其是准备将这些应用程序移至云中时。

容器更适合承载web服务中使用的微服务,特别是在对可扩展性要求很高的情况下。当以这种方式使用容器时,通常由容器编排系统对其进行管理,以自动执行计算机应用程序的部署、扩展和管理。

本文作者:Eric

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!