一、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、网络等资源是全局的,而NameSpace机制是一种资源隔离方案,在该机制下这些资源就不再是全局的了,而是属于某个特定的NameSpace,各个NameSpace下的资源互不干扰。
进程管理机制:虽然有了NameSpace技术可以实现资源隔离,但进程还是可以不受控的访问系统资源,比如CPU、内存、磁盘、网络等,为了控制容器中进程对资源的访问,Docker采用control groups技术(也就是cgroup),有了cgroup就可以控制容器中进程对系统资源的消耗了,比如你可以限制某个容器使用内存的上限、可以在哪些CPU上运行等等。
有了这两项技术(资源隔离机制NameSpace、系统管理机制control groups),容器看起来就真的像是独立的操作系统了。
三、容器与主机之间的数据拷贝命令?
docker cp :用于容器与主机之间的数据拷贝。
- 从主机往容器中拷贝
将主机/www/runoob目录拷贝到容器96f7f14e99ab的/www目录下。
docker cp /www/runoob 96f7f14e99ab:/www/
- 将容器中文件拷往主机
将容器 96f7f14e99ab 的 /www 目录拷贝到主机的 /tmp 目录中。
docker cp 96f7f14e99ab:/www /tmp/
四、一个完整的Docker由哪些部分组成?
- DockerClient客户端
- Docker Daemon守护进程
- Docker Image镜像
- DockerContainer容器
五、什么是联合文件系统(UnionFS)?
**docker**的镜像实际上由一层一层的文件系统组成,这种层级的文件系统就是**UnionFS**。
UnionFS是一种分层、轻量级并且高性能的文件系统。联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录。
六、Docker与虚拟机有何不同?
参考文章
Docker容器并非虚拟机!
使用虚拟机运行多个相互隔离的应用时,如下图:
使用Docker容器运行多个相互隔离的应用时,如下图:
对比虚拟机与Docker:
Docker守护进程可以直接与主操作系统进行通信,为各个Docker容器分配资源;
它还可以将容器与主操作系统隔离,并将各个容器互相隔离。虚拟机启动需要数分钟,而Docker容器可以在数毫秒内启动;
没有臃肿的从操作系统,Docker可以节省大量的磁盘空间以及其他系统资源。
不同的使用场景:
虚拟机更擅长于彻底隔离整个运行环境,例如云服务提供商通常采用虚拟机技术隔离不同的用户。
Docker通常用于隔离不同的应用,例如前端,后端以及数据库。
