面试 - Docker

原创
03/24 17:31
阅读数 42

Docker和虚拟机的区别?
传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程。操作系统其磁盘占用至少几十G起步,内存要几个G起步。启动时要从头到尾把该检测的都检测了该加载的都加载上,这个过程非常缓慢。
而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟,因此容器要比传统虚拟机更为轻便。每个容器有自己的文件系统 ,容器之间进程不会相互影响,能区分计算资源。

容器和镜像的区别?
镜像(Image)就是一个只读的模板。镜像可以用来创建 Docker容器,一个镜像可以创建很多容器。
Docker 利用容器(Container)独立运行的一个或一组应用。容器是用镜像创建的运行实例。 它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。可以把容器看做是一个简易版的Linux环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。

Docker是怎么工作的?
实际上Docker使用了常见的CS架构,也就是Client-Server模式,Docker Client负责处理用户输入的各种命令,比如Docker Build、Docker Run,真正工作的其实是Server,也就是Docker Demon,值得注意的是,Docker Client和Docker Demon可以运行在同一台机器上。
Docker是一个Client-Server结构的系统,Docker守护进程运行在主机上,然后通过Socket连接从客户端访问,守护进程从客户端接受命令并管理运行在主机上的容器。守护进程和客户端可以运行在同一台机器上。

Docker容器之间怎么隔离?
Linux中的PID、IPC、网络等资源是全局的,而Name Space机制是一种资源隔离方案,在该机制下这些资源就不再是全局的了,而是属于某个特定的Name Space,各个Name Space下的资源互不干扰。
虽然有了Name Space技术可以实现资源隔离,但进程还是可以不受控的访问系统资源,比如CPU、内存、磁盘、网络等,为了控制容器中进程对资源的访问,Docker采用Control Groups技术,就可以控制容器中进程对系统资源的消耗了,比如你可以限制某个容器使用内存的上限、可以在哪些CPU上运行等等。

联合文件系统(UnionFS)
Docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统就是UnionFS。UnionFS是一种分层、轻量级并且高性能的文件系统。联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录。

DockerFile
DockerFile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本。每条指令都会创建一个新的镜像层,并对镜像进行提交。

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部