docker容器技术
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker容器技术相关的知识,希望对你有一定的参考价值。
谈到容器,我们就必须得谈谈虚拟化,我们一般使用的虚拟机都是主机级别的虚拟化,主机级的虚拟化一般是在硬件上安装操作系统,操作系统上安装一个Hypervisor,然后hypervisor上在安装虚拟操作系统,又或者直接在硬件上安装Hypervisor。而容器技术与虚拟化技术的区别就在于宿主机上跑的是一个个的容器。因此在架构上少了一个hypervisor和许多的客户机,在性能上提升了许多。但是在资源隔离性方面没有主机级别的虚拟化好。如下图所示:
Virtualization and Container
每个容器在自身看来都是独立运行在操作系统之上的,否则何谈隔离性,so,每个容器都需要隔离以下资源才能最小化运行:
1.UTS:主机名
2.Mount,挂载点、根文件系统
3.IPC,信号量、消息队列和共享内存
4.PID:每个docker容器内都有自己独立的进程号
5.Net,每个docker都有自己的网络设备、网络栈、端口等。
6.User,用户和用户组(内核 3.8支持)
以上名称空间在kernel 3.8后原生支持,当然还有其他一些可选的隔离资源,如:CPU、内存等通过Control Groups(cgroups)实现。而linux 容器(LXC)就是chroot+namespaces+cgroups等技术实现的,docker就是实现以上技术的工具。
docker通过事先制作好的镜像(如:nginx镜像),直接从仓库中拉去镜像并启动,于是一个nginx的docker就创建并成功启动了。那么,docker是如何能使nginx独立运行的呢?大家知道,docker一次打包,到处运行。他又如何屏蔽linux和windows底层的差别呢?docker的镜像底层是通过分层构建,联合挂载来实现的。就拿构建一个nginx镜像来说,首先它会在底层构建一个最小的centos镜像,然后上一层构建一个ngxin镜像,并且每个镜像都是只读的。
以上是关于docker容器技术的主要内容,如果未能解决你的问题,请参考以下文章