星球狂想战队|什么是Docker?看这一篇干货文章就够了( 三 )


有了“可执行程序”image后就可以运行程序了 , 接下来使用命令docker run , docker daemon接收到该命令后找到具体的image , 然后加载到内存开始执行 , image执行起来就是所谓的container 。
星球狂想战队|什么是Docker?看这一篇干货文章就够了3 , docker pull
其实docker build和docker run是两个最核心的命令 , 会用这两个命令基本上docker就可以用起来了 , 剩下的就是一些补充 。
那么docker pull是什么意思呢?
我们之前说过 , docker中image的概念就类似于“可执行程序” , 我们可以从哪里下载到别人写好的应用程序呢?很简单 , 那就是APP Store , 即应用商店 。 与之类似 , 既然image也是一种“可执行程序” , 那么有没有"Docker Image Store"呢?答案是肯定的 , 这就是Docker Hub , docker官方的“应用商店” , 你可以在这里下载到别人编写好的image , 这样你就不用自己编写dockerfile了 。
docker registry 可以用来存放各种image , 公共的可以供任何人下载image的仓库就是docker Hub 。 那么该怎么从Docker Hub中下载image呢 , 就是这里的docker pull命令了 。
因此 , 这个命令的实现也很简单 , 那就是用户通过docker client发送命令 , docker daemon接收到命令后向docker registry发送image下载请求 , 下载后存放在本地 , 这样我们就可以使用image了 。
星球狂想战队|什么是Docker?看这一篇干货文章就够了最后 , 让我们来看一下docker的底层实现 。
docker的底层实现docker基于Linux内核提供这样几项功能实现的:

  • NameSpace
我们知道Linux中的PID、IPC、网络等资源是全局的 , 而NameSpace机制是一种资源隔离方案 , 在该机制下这些资源就不再是全局的了 , 而是属于某个特定的NameSpace , 各个NameSpace下的资源互不干扰 , 这就使得每个NameSpace看上去就像一个独立的操作系统一样 , 但是只有NameSpace是不够 。
  • Control groups
虽然有了NameSpace技术可以实现资源隔离 , 但进程还是可以不受控的访问系统资源 , 比如CPU、内存、磁盘、网络等 , 为了控制容器中进程对资源的访问 , Docker采用control groups技术(也就是cgroup) , 有了cgroup就可以控制容器中进程对系统资源的消耗了 , 比如你可以限制某个容器使用内存的上限、可以在哪些CPU上运行等等 。
有了这两项技术 , 容器看起来就真的像是独立的操作系统了 。
总结【星球狂想战队|什么是Docker?看这一篇干货文章就够了】docker是目前非常流行的技术 , 很多公司都在生产环境中使用 , 但是docker依赖的底层技术实际上很早就已经出现了 , 现在以docker的形式重新焕发活力 , 并且能很好的解决面临的问题 , 希望本文能对大家理解docker有所帮助 。


推荐阅读