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


星球狂想战队|什么是Docker?看这一篇干货文章就够了但是虚拟机技术有上述提到的各种缺点 , 那么容器技术又怎么样呢?
与虚拟机通过操作系统实现隔离不同 , 容器技术只隔离应用程序的运行时环境但容器之间可以共享同一个操作系统 , 这里的运行时环境指的是程序运行依赖的各种库以及配置 。
星球狂想战队|什么是Docker?看这一篇干货文章就够了从图中我们可以看到容器更加的轻量级且占用的资源更少 , 与操作系统动辄几G的内存占用相比 , 容器技术只需数M空间 , 因此我们可以在同样规格的硬件上大量部署容器 , 这是虚拟机所不能比拟的 , 而且不同于操作系统数分钟的启动时间容器几乎瞬时启动 , 容器技术为打包服务栈提供了一种更加高效的方式 , So cool 。
那么我们该怎么使用容器呢?这就要讲到docker了 。
注意 , 容器是一种通用技术 , docker只是其中的一种实现 。
什么是dockerdocker是一个用Go语言实现的开源项目 , 可以让我们方便的创建和使用容器 , docker将程序以及程序所有的依赖都打包到docker container , 这样你的程序可以在任何环境都会有一致的表现 , 这里程序运行的依赖也就是容器就好比集装箱 , 容器所处的操作系统环境就好比货船或港口 , 程序的表现只和集装箱有关系(容器) , 和集装箱放在哪个货船或者哪个港口(操作系统)没有关系 。
因此我们可以看到docker可以屏蔽环境差异 , 也就是说 , 只要你的程序打包到了docker中 , 那么无论运行在什么环境下程序的行为都是一致的 , 程序员再也无法施展表演才华了 , 不会再有“在我的环境上可以运行” , 真正实现“build once, run everywhere” 。
此外docker的另一个好处就是快速部署 , 这是当前互联网公司最常见的一个应用场景 , 一个原因在于容器启动速度非常快 , 另一个原因在于只要确保一个容器中的程序正确运行 , 那么你就能确信无论在生产环境部署多少都能正确运行 。
如何使用dockerdocker中有这样几个概念:

  • dockerfile
  • image
  • container
实际上你可以简单的把image理解为可执行程序 , container就是运行起来的进程 。
那么写程序需要源代码 , 那么“写”image就需要dockerfile , dockerfile就是image的源代码 , docker就是"编译器" 。
因此我们只需要在dockerfile中指定需要哪些程序、依赖什么样的配置 , 之后把dockerfile交给“编译器”docker进行“编译” , 也就是docker build命令 , 生成的可执行程序就是image , 之后就可以运行这个image了 , 这就是docker run命令 , image运行起来后就是docker container 。
具体的使用方法就不再这里赘述了 , 大家可以参考docker的官方文档 , 那里有详细的讲解 。
docker是如何工作的实际上docker使用了常见的CS架构 , 也就是client-server模式 , docker client负责处理用户输入的各种命令 , 比如docker build、docker run , 真正工作的其实是server , 也就是docker demon , 值得注意的是 , docker client和docker demon可以运行在同一台机器上 。
接下来我们用几个命令来讲解一下docker的工作流程:
1 , docker build
当我们写完dockerfile交给docker“编译”时使用这个命令 , 那么client在接收到请求后转发给docker daemon , 接着docker daemon根据dockerfile创建出“可执行程序”image 。
星球狂想战队|什么是Docker?看这一篇干货文章就够了2 , docker run


推荐阅读