一、docker是什么
对于docker 官方给出的定义如下:
Package Software into Standardized Units for Development, Shipment and Deployment
A container is a standard unit of software that packages up code and all its dependencies so the application runs quickly and reliably from one computing environment to another. A Docker container image is a lightweight, standalone, executable package of software that includes everything needed to run an application: code, runtime, system tools, system libraries and settings.
Container images become containers at runtime and in the case of Docker containers - images become containers when they run on Docker Engine. Available for both Linux and Windows-based applications, containerized software will always run the same, regardless of the infrastructure. Containers isolate software from its environment and ensure that it works uniformly despite differences for instance between development and staging.
简单来说,docker是一个能装载软件运行的“容器”,我们可以在这个“容器”中能像进程一样,使用不同的“小电脑”来运行所需的程序。如果不好理解,你可以近似的认为,他的功能,就像用一台“虚拟机”来运行不同的软件,系统。但是他跟虚拟机又是区别开的。
二、比较虚拟机和docker的不同
docker框架图:
虚拟机框架图:
三、区别总结
Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器容器和虚拟机,Docker采用 C/S架构 Docker daemon 作为服务端接受来自客户的请求,并处理这些请求(创建、运行、分发容器)。 客户端和服务端既可以运行在一个机器上,也可通过 socket 或者RESTful API 来进行通信。
和虚拟机相比,区别点在倒数第二层开始产生区别。Hypervisor(管理程序,可以理解为我们的虚拟机软件,比如VMware)和Host operating system(操作系统,比如我们的windows),docker他就像我们的QQ 浏览器一样,是一个进程,但是这个小进程可以完成虚拟机的工作,你可以在这个小进程中安装软件 系统,并且运行他们。光从这里讲,他其实最终和虚拟机的功能似乎没有差别。
重点在于后面的架构,虚拟机是必须在硬盘中开辟一个空间,安装我们的Virtual Machine,然后对这个Virtual Machine安装Guest Operating System 然后再类似我们平常一样,安装软件,才能够使用,这个过程中,每个虚拟机相互隔离,不会主动产生关系,如果你想使用不同的App,你就许要切换到不同的Virtual Machine才能使用对应的App,因为不同的机器中的app,他们是使用不同的系统内核。
而docker则不同了,我们可以看见框架中,只有简单的Docker层,然后往上就是不同的App,也就是说,我们只需要借助Docker这个媒介,就可以直接运行安装不同的App,和不同的系统,我们直接略过了安装划分Virtual Machine的空间,安装Guest Operating System的过程,Docker可以智能的帮我们处理这个过程,做到从Docker中直接运行App,所有的App都是共享使用我们的系统内核。
那么好处是什么呢,其实官方有说明:
Containers and virtual machines have similar resource isolation and allocation benefits, but function differently because containers virtualize the operating system instead of hardware. Containers are more portable and efficient.
Containers are an abstraction at the app layer that packages code and dependencies together. Multiple containers can run on the same machine and share the OS kernel with other containers, each running as isolated processes in user space. Containers take up less space than VMs (container images are typically tens of MBs in size), can handle more applications and require fewer VMs and Operating systems.
由于省略了大部分虚拟机所必须的过程,容器节约了大量的资源和运行空间,从机器效率来讲,docker更加强大,但是相应的,docker的功能齐全性没有虚拟机那么完整,所以在日常使用中,我们往往是和虚拟机配套使用,起到1+1大于2的效果。
四、docker的主要组成部分
- Docker daemon ( Docker 守护进程 )
Docker daemon 是一个运行在宿主机 (DOCKER_HOST) 的后台进程。可通过 Docker 客户端与之通信。我们日常会经常查看这个进程来判断docker的运行状况 - Client (Docker 客户端)
Docker 客户端是 Docker 的用户界面,它用来接受我们输入的命令和配置,并与 Docker daemon 通信。 - Images ( Docker 镜像 )
Docker 镜像是一个只读模板,它包含创建 Docker 容器说明。有点类似我们平常的安装包(ios镜像),但是他可以直接使用镜像的内容,运行镜像中的程序。 - Container (容器)
容器是镜像的可运行实例。简单来说,他就是负责装载货物的集装箱,我们需要容器来“装载”运行镜像。 - Registry ( 注册 )
Docker Registry 是一个集中存储与分发镜像的服务。在不同机器中是不能使用同一个镜像的,如果想使用其他地方的镜像,往往需要手动复制,但是使用 Docker Registry 后就可以直接使用另外的镜像,不需要手动复制。
一个 Docker Registry 可包含多个 Docker 仓库,仓库间相互独立,我们可以使用docke的pull命令拉取官方的镜像库。
五、Docker使用场景
官方其实已经举例了典型的使用场景:
- Automating the packaging and deployment of applications(使应用的打包与部署自动化)
- Creation of lightweight, private PAAS environments(创建轻量、私密的PAAS环境)
- Automated testing and continuous integration/deployment(实现自动化测试和持续的集成/部署)
- Deploying and scaling web apps, databases and backend services(部署与扩展webapp、数据库和后台服务)
docker的缺陷
其实docker也有一定的缺点:
- Docker是基于Linux 64bit的,无法在32bit的linux/Windows/unix环境下使用
- LXC是基于cgroup等linux kernel功能的,因此container的guest系统只能是linux base的
- 隔离性相比KVM之类的虚拟化方案还是有些欠缺,所有container公用一部分的运行库
- 网络管理相对简单,主要是基于namespace隔离,cgroup的cpu和cpuset提供的cpu功能相比KVM的等虚拟化方案相比难以度量(所以dotcloud主要是按内存收费)
- Docker对disk的管理比较有限,container随着用户进程的停止而销毁,container中的log等用户数据不便收集
所以大部分场景 ,我们都是配套虚拟机一起使用。
- 参考:
- https://baike.baidu.com/item/Docker/13344470?fr=aladdin(百度百科)
- https://www.docker.com/resources/what-container (docker官网)