Docker认识

Docker 是一种容器化平台,可以轻松地将应用程序及其依赖项打包为容器,以便在不同的环境中运行。

1.为什么使用容器

(1)更高效的利用系统资源

(2)一致的运行环境

(3)持续交付

(4)快速部署

(5)弹性扩容

2.容器特点

(1)容器和虚拟机的区别,通过下图可以很明显看出,虚拟机是模拟出一套硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软件。Docker没有自己的内核,也没有虚拟硬件,容器内的应用是直接运行在宿主机的内核上,它比起虚拟机更轻便,两者区别如下图1。

 

 (2)容器不是一个新技术,是os功能和工具的集合,就像docker的logo一样,像一个大船一样,如图2。

 (3)cgroups(Control Groups)是一种Linux内核功能,用于限制、隔离和管理进程组的资源使用。Cgroups提供了一种机制,可以将一组进程(或者任务)组织在一起,并对其分配和限制资源,如CPU、内存、磁盘I/O等。

 

(4)images && container,Docker镜像是一个只读的模板,包含了运行容器所需的文件系统、代码和依赖项。镜像可以看作是容器的静态快照或模板。它可以用来创建多个相同的容器实例。镜像是构建和分发容器应用的基础。Docker容器是基于镜像运行的实例化进程。容器是一个独立、隔离的运行环境,它包含了运行应用所需的文件、库、环境变量和配置等。容器可以被启动、停止、删除和重启。它们二者的关系可以使用下图来表示。

 

 docker run的流程如下图:

 

3.容器效率

    任何虚拟化的技术都会关注效率和隔离性,下面是从网上整理的各个维度的数据。

(1)cpu损耗几乎可以不计,docker里面进程和native的进程没有任何区别。

 (2)内存损耗也基本忽略不计,没有任何内存虚拟页映射等操作,都是直接向内核申请内存进行读写。

 (3)IO效率,磁盘IO效率跟docker关系不大,由镜像文件系统和读写层驱动决定,下面以OverLayFS为例。

 (4)网络效率,host模式直接和宿主机共享网络栈,没有任何效率损失,其共享程度甚至达到了连端口都会冲突,host-gw brigde在宿主机虚拟了一个网卡叫做docker0,所有和外部的通信都通过docker0来进行转发,达到了内部网络栈的一个独立性和可访问性。

 

3.结论

    CPU、内存效率无损耗,基于Cgroup能够很好的隔离,IO效率无损耗,无法直接隔离,但可以通过卷的方式进行隔离,网络效率1%左右的损耗,基于namespace能很好的隔离,总之容器值得推广和使用。

 

posted @ 2023-10-23 09:27  人不疯狂枉一生  阅读(16)  评论(0编辑  收藏  举报