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镜像,基于镜像运行。可以理解为在镜像层添加一个容器层后的实休。文章来源:https://www.toymoban.com/news/detail-412010.html
Docker仓库,用于存放管理Docker镜像地方,分来公共仓库和私有仓库。文章来源地址https://www.toymoban.com/news/detail-412010.html
到了这里,关于Docker几个概念的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!