什么是Docker
Docker是一个开源项目,诞生于 2013年初,最初是dotCloud
公司内部的一个业余项目。它基于Google公司推出的Go
语言实现。
Docker项目的目标是实现轻量级的操作系统虚拟化解决方案。Docker的基础是Linux容器(LXC)等技术
在LXC的基础上Docker
进行了进一步的封装,让用户不需要去关心容器的管理,使得操作更为简便。用
户操作Docker
的容器就像操作一个快速轻量级的虚拟机一样简单
特点
容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统方式则是在硬件层面实现。
为什么要使用Docker
首先,Docker容器的启动可以在秒级实现,这相比传统的虚拟机方式要快得多。
其次,Docker对系统资源的利用率很高,一台主机上可以同时运行数千个Docker
容器。
容器除了运行其中应用外,基本不消耗额外的系统资源,使得应用的性能很高,同时系统的开销尽量小。
传统虚拟机方式运行10个不同的应用就要起10个虚拟机,而Docker只需要启动10个隔离的应用即可。
优势
更快速的交付和部署
- Docker 可以快速创建容器,快速迭代应用程序,并让整个过程全程可见
- Docker 容器很轻很快!容器的启动时间是秒级的,大量地节约开发、测试、部署的时间。
更高效的虚拟化
- Docker 容器的运行不需要额外的 hypervisor 支持,它是内核级的虚拟化,因此可以实现更高的性能和效
率。
更轻松的迁移和扩展
- Docker容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器
等。这种兼容性可以让用户把一个应用程序从一个平台直接迁移到另外一个。
更简单的管理
- 使用 Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分发和
更新,从而实现自动化并且高效的管理。
对比传统虚拟机
特性 | 容器 | 虚拟机 |
---|---|---|
启动 | 秒级 | 分钟级 |
硬盘使用| 一般为MB|一般为GB|
性能|接近原生|弱于|
系统支持量|单机支持上千个容器|一般几十个|
Docker基本概念
- 镜像(Image)
- 容器(Container)
- 仓库(Repository)
镜像
Docker镜像就是一个只读的模板
例如:一个镜像可以包含一个完整的ubuntu操作系统环境,里面仅安装Apache
或用户需要的其它应用程序。
镜像可以用来创建Docker容器。
Docker提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下载一个已经做好的镜像来直接使用
容器
Docker 利用容器来运行应用。
容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。
可以把容器看做是一个简易版的Linux环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。
注:镜像是只读的,容器在启动的时候创建一层可写层作为最上层。
Docker仓库
仓库是集中存放镜像文件的场所。有时候会把仓库和仓库注册服务器(Registry)混为一谈,并不严格区分。
实际上,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。
仓库分为公开仓库(Public)和私有仓库(Private)两种形式。
最大的公开仓库是Docker Hub
,存放了数量庞大的镜像供用户下载。
国内的公开仓库包括Docker Pool
等,可以提供大陆用户更稳定快速的访问。
当然,用户也可以在本地网络内创建一个私有仓库。
当用户创建了自己的镜像之后就可以使用push
命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上pull
下来就可以了。
注:Docker仓库的概念跟 Git 类似,注册服务器可以理解为 GitHub 这样的托管服务。