虚拟化容器技术与Docker

本文介绍了虚拟机的原理及缺点,重点探讨了Linux容器技术,包括NameSpace和Control Groups。Docker作为Linux容器的封装,提供了简单易用的接口,实现了应用程序的快速部署和资源隔离。Docker的应用场景包括一次性环境、弹性云服务和微服务架构,并由客户端、守护进程、镜像、容器和仓库等组件构成。
虚拟机(virtual machine)

虚拟机就是带环境安装的一种解决方案。它可以在一种操作系统里面运行另一种操作系统,比如在 Windows 系统里面运行 Linux 系统。应用程序对此毫无感知,因为虚拟机看上去跟真实系统一模一样,而对于底层系统来说,虚拟机就是一个普通文件,不需要了就删掉,对其他部分毫无影响。

虚拟机缺点:资源占用多;冗余步骤多;启动慢


Linux容器

针对虚拟机容器的缺点,另一种虚拟化技术:Linux容器(Linux Containers,缩写为 LXC),依赖于Linux内核特性:NameSpace(命名空间) 和 Cgroups(控制组),只能运行Linux系统,而不能运行Windows系统,它包含了基本的文件系统、进程、网络设备。


NameSpace 和 Control Groups

理解NameSpace和Control Groups有助于理解Docker的资源分配和管理

NameSpace
PID:(Process ID),进程隔离
NET:(NetWork),管理网络接口
IPC:(InterProcess Communication),管理跨进程通信的访问
MNT:(Mount),管理挂载点,文件系统的隔离
UTS:(Unix Timesharing System),隔离内核和版本标识

这些隔离的资源怎么管理起来?使用Cgroups

Control Groups
是Linux内核提供的可以记录、限制、隔离进程族所使用的物理资源的机制,来源于Google,用来分配资源,没有Cgroups就没有容器技术
—提供的功能:
资源限制,例如:限制进程族的内存上限。
优先级设定,例如:设定哪些进程族使用更大的CPU或磁盘IO
资源计量,例如计算进程族使用了多少资源
资源控制,例如:将进程族挂起或恢复

Docker 容器的能力
文件系统隔离:每个容器都有自己的root文件系统
进程隔离:每个容器都运行在自己的进程环境中
网络隔离:容器间的虚拟网络接口和IP地址都是分开的
资源的隔离和分组:使用Cgroups将CPU和内存之间的资源独立分配给每个Docker容器


Linux 容器不是模拟一个完整的操作系统,而是对进程进行隔离。
或者说,在正常进程的外面套了一个保护层。对于容器里面的进程来说,它接触到的各种资源都是虚拟的,从而实现与底层系统的隔离。

由于容器是进程级别的,相比虚拟机有很多优势:启动快;资源占用少;体积小


Docker

Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口,将应用程序自动部署到容器的开源引擎,使用Go语言开发。
Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker,就不用担心环境问题。总体来说,Docker 的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。

Docker用途
(1)提供一次性的环境。比如,本地测试他人的软件、持续集成的时候提供单元测试和构建的环境。
(2)提供弹性的云服务。因为 Docker 容器可以随开随关,很适合动态扩容和缩容。
(3)组建微服务架构。通过多个容器,一台机器可以跑多个服务,因此在本机就可以模拟出微服务架构。

Docker的基本组成

  1. Docker Client 客户端
  2. Docker Daemon 守护进程

Docker 是 C/S 架构,Docker Client 向 Docker Daemon 服务端发出请求,服务端守护进程处理完所有的工作并返回结果。

在这里插入图片描述

  1. Docker Image 镜像
    Image 镜像是容器的基石,就像容器的源代码一样,它是一个层叠的只读文件系统。
    最底端是一个引导文件系统——bootfs,当一个容器启动后,容器将会移动到内存中,而引导文件系统将被卸载。
    第二层是 root 文件系统——rootfs,rootfs是一种操作系统,例如 Ubuntu/CentOS ,rootfs 永远是只读状态,Docker使用联合加载技术(union mount,一次同时加载多个文件系统) 在 rootfs 之上加载更多的只读文件系统,联合加载会将多个文件系统叠加在一起,这样最终的文件系统会包含所有的底层文件和目录。Docker 将这样的文件系统称为镜像,一个镜像可以位于另一个镜像的顶部,下面的镜像称为父镜像。
    在这里插入图片描述

  2. Docker Container 容器
    容器通过镜像来启动,Docker 容器是 Docker 的执行单元,容器中可以运行客户的一个或多个进程。如果说镜像是Docker 生命周期中的构建和打包阶段,那么容器就是启动和执行阶段。
    容器怎么通过镜像来启动?当 Docker 启动一个容器时会在该镜像的最顶层加载一个读写文件系统,也就是一个可写的文件层。当 Docker 第一次启动这个容器时,初始的读写层是空的,当文件系统发生变化时,这些变化都会应用到这一层上,例如:要修改一个文件,这个文件首先会从该读写层下面的只读层复制到该读写层,改文件的只读版本依然存在,但是已经被该读写层中的文件副本所隐藏,这就是 Docker 中的一个重要技术:写时复制(copy on write)。
    在这里插入图片描述

  3. Docker Registry 仓库
    仓库来保存用户构建的镜像。分为 公有私有 两种。Docker 公司提供了一个公有的仓库—— Docker Hub,可以在 Docker Hub 上注册账号,分享并保存自己构建的镜像,可以查找需要的镜像。可以搭建自己私有的仓库。
    在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值