操作系统解决主要问题之一就是如何在一台机器上调度硬件资源,比如为一个进程分配cpu、gpu、存储资源等,使得进程可以高效、按照预期地完成运行;
云和互联网解决的主要问题之一是如何在多台机器之间调度硬件资源or调度信息资源,这就产生了更丰富架构,比如可以从服务器获取信息资源(收到服务器带宽限制下载比较慢),也可以使用P2P方式将文件分成n块( torrent文件存储分成的每块的哈希值,以对下载的数据进行校验;Tracker地址来识别哪些客户端存储着需要的文件),在各个客户端之间并行地下载不同的块(各块之间无下载先后的要求),随后组装。
当单独机器的硬件不足以进行最小任务的调度时,期望可以把独立的机器链接,使得多台机器硬件像一台机器一样进行调度,这样就形成cluster(集群);比如GPU集群是把很多GPU放到一个资源池里调度、分配使用;gpfs cluster是把存储设备放到一个资源池里可以供一起使用。
有时任务比较小,希望能够把独立的硬件隔离拆分使用,这时就出现VM(虚拟机)以及Docker。
linux中进行开发需要按照各种库,经常遇到在一台机器上开发完,到另一台机器上复现需要重新配置环境甚至由于环境配置问题无法正常运行。Docker是把应用和依赖库打包,然后可以发布到任何linux机器上运行,避免再其他linux机器上重新再配置环境或无法复现。
Docker: build, share, and run modern applications
Dockerfile是文本文件,里面包含一系列命令,用来创建镜像,每条命令构建一层镜像。注意:Docker是以远程调用形式在服务端(Docker 引擎)构建的, docker命令提供的是客户端工具与服务端的Docker引擎交互。
docker build -f /path/Dockerfile
参考:Dockerfile 详解_万wu皆可爱的博客-CSDN博客_dockerfile
Image即Dockerfile生成的镜像,包含了要部署的app及其所关联的所有库。
Image又可以创建多个Container,运行着部署的app。
即k8s用于调度容器,对容器进行生命周期管理等。