Docker几个概念

Docker几个概念,有不正确地方欢迎指正

一、首先来看一句话:没有Cgroups就没有LXC,没有LXC就没有Docker。

1、什么是Cgroup呢?Cgroup又名Control group,是Linux内核提供的一种可以限制、记录、隔离进程组所使用的物理资源(CPU、 Memory、IO、NET)的机制。

可以看出来,Cgroup是Linux内核里的一个解决方案。其提供的机制非常符合Docker,Docker容器本身也是一种隔离

2、什么是LXC呢?LXC又名Linux Container,是Linux系统上的一个容器技术,是基于内核级的虚拟化技术,可以使Linux操作系统软件服务进程能够相互独立,控制每个服务进程的CPU,内存资源。但这个对于Docker来讲还不够,Docker是在LXC技术上进一步的封装,比LXC技术更完善,并且提供了一系列完整的功能

LXC包含了Cgroups,NameSapce等等,并通过Cgroup进行资源管理

从管理结构体系看,Cgroup在最底层,LXC在Cgroup上封装一层,Docker又在LXC封装一层。

 二、什么是AUFS

从上图看出来,Docker包含了LXC和AUFS,那什么是AUFS呢?

AUFS是早期Docker使用的文件系统,Aufs是一种层次结构的文件系统,每当修改时,会拷贝一层为可写层做修改,如果文件大,效果会很低。

下图所示为一个完整的容器文件层级结构

1、什么是Bootsfs?

Linux文件系统由Boofts和Rootfs两部分组成

Bootfs(boot file system)主要包含 bootloader和kernel。Bootloader主要是引导加载kernel,当kernel被加载到内存中后 bootfs就被umount,Rootfs (root file system) 包含的就是典型 Linux 系统中的/dev,/proc,/bin,/etc等目录和文件。系统引导时,Rootfs是只读的,当系统自检完成后,Rootfs才会变更为可写。

 2、什么是Base Imag和Image

容器镜像文件都是层级堆叠的,可以把每一层看作一起应用服务。

3、根据AUFS系统原理,容器需要写入内容,每层为只读的,为了能够用来写入,在容器最顶层writeable Container写入层。把需要修改的层拷贝到这里来做修改。这种修改机制造成Aufs效果低下。

AUFS因为没有加入到内核,使用上性能又不足,考虑到兼容问题,Docker已经对AUFS放弃了

Docker支持文件系统有很多,如AUFS,Btrfs、Device mapper、OverlayFS,ZFS,VFS等等,目前主流使用的是OverlayFS

三、什么是OverlayFS

OverlayFS是目前使用比较广泛的层次文件系统,是一种类似Aufs的一种堆叠文件系统,于2014年正式合入Linux 3.18主线内核,OverlayFS文件系统,实现简单,而且性能很好,可以充分利用不同或相同Overlay文件系统的Page Cache,具有:上下合并、同名遮盖、写时拷贝等特点。

Docker存储驱动利用了很多OverlayFS特性来构建和管理镜像与容器的磁盘结构。OverlayFs加入内核,在内核模块中的名称也从Overlayfs变为Overlay。但实际使用中,overlayfs代表整个文件系统,overlay表示Docker的存储驱动。

 Dpper Dir,上层目录。Lower Dir下层目录,Merged对外提供视图。

Lower Dir层只读,如果需要修改文件,需要把文件从Lower Dir层复制到可写的Upper Dir层。修改完成后,其结果也会被保留到Upper Dir层。

在Docker中 ,只读层为image,可写的层是Container。Docker镜像中的每一层,其实对应的是/varlib/docker/overlay/overlay2中的一个文件夹,文件夹以该层的UUID命名,如下图。

[root@localhost ~]# ls /var/lib/docker/overlay2/
backingFsBlockDev  l
[root@localhost ~]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
f1f26f570256: Pull complete 
7f7f30930c6b: Pull complete 
2836b727df80: Pull complete 
e1eeb0f1c06b: Pull complete 
86b2457cc2b0: Pull complete 
9862f2ee2e8c: Pull complete 
Digest: sha256:dbf632af6963e56f6b3fc4196578b75742482490c236f5009b3e68cf93a62997
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
nginx        latest    080ed0ed8312   2 weeks ago   142MB
[root@localhost ~]# ls /var/lib/docker/overlay2/
124de18ac679debed8fad498e3c0ea285e84751b6c98e10afd64b22708856821  14e1318ee77934bcc00eb04177d8d53d11ba4063b055a6c5e48d91fa3468c88f  9b318696a784bdd69e2c47ae2c0cdf1a9d542919b63e0b4d99007351f9e7bc3a  backingFsBlockDev
133c407321616f4451df01043ab6e987400f402ef6d1305df5390df538d5d2d9  45812d55a14f0a4c7410aea41871e35c60262093e4641a117158456c4ab0d21e  abef3738390c7a91ddde9db868b2db4bc6f861d74c7cedbee55b71bc6355518f  l
[root@localhost ~]# 

四、Docker引擎架构

Docker是一个C/S架构,Server常驻进程,Server和Client通过REST API交互,CLI实现容器和镜像的管理,为用户提供统一操作界面。

五、Docker镜像,容器,仓库

Docker镜像包含各种软件,每个软件用户服务分层存放于一个镜像中,Docker镜像只读,不能对其进行写操作

Docker容器,是Docker镜像的实例。其底层是Docker镜像,基于镜像运行。可以理解为在镜像层添加一个容器层后的实休。

Docker仓库,用于存放管理Docker镜像地方,分来公共仓库和私有仓库。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

阿蔡BLOG

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

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

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

打赏作者

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

抵扣说明:

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

余额充值