Linux容器技术很早就有了,比较有名的是被集成到主流Linux内核中的LXC项目。容器通过对操作系统的资源访问进行限制,构建成独立的资源池,让应用运行在一个相对隔离的空间里,同时容器间也可以进行通信。
容器技术 VS 虚拟技术 容器比虚拟化更轻量级,对资源的消耗小很多。容器操作也更快捷,启动和停止都要比虚拟机快。
Docker容器需要与主机共享操作系统内核,不能像虚拟机那样运行在独立的内核。
Docker是一个基于LXC技术构建的容器引擎,基于GO语言开发,遵循Apache2.0协议开源。Docker的发展得益于为使用者提供了更好的容器操作接口。包括一系列的容器,镜像,网络等管理工具,可以让用简单的创建和使用容器。
Docker支持将应用打包进一个可以移植的容器中,重新定义了应用开发,测试,部署上线的过程,核心理念是: Build once,Run anywhere
Docker容器技术的典型应用场景是开发运维上提供持续集成和持续部署的服务。
Docker 三个组件:
Docker Client (客户端) 是用户界面, 他支持用户与Docker Deamon 之间通信。
Docker Deamon (守护进程) 运行于主机上 , 处理服务器请求。
Docker Index 是中央registry , 支持拥有公有于私有房屋权限的Docker容器镜像的备份。
Docker 的基本三个要素:
Docker Containers (容器) 负责应用程序的运行, 包括操作系统、用户添加的文件以及元数据。
Docker images (镜像) 是一个只读模块, 用来运行Docker容器。
Docker File 是文件指令集, 用来说明如何自动创建Docker 镜像。
镜像
Docker的镜像概念类似于虚拟机里面的镜像,就是一个只读的模板,一个对立的文件系统,包括运行容器所需的数据,可以用来创建新的容器。
镜像可以基于Dockerfile构建,Dockerfile是一个描述文件,里面包含若干条命令,每条命令都会对基础文件系统创建新的层次结构。
用户可以通过编写Dockerfile创建新的镜像,也可以直接从类似github的Docker Hub 上下载镜像使用。
容器
Docker容器是有Docker镜像创建的运行实例。Docker容器类似虚拟机,可以支持的操作包括启动,停止,删除等。每个容器间是相互隔离的,但隔离的效果比不上虚拟机。容器中会运行特定的应用,包含特定应用的代码及所需的依赖文件。
在Docker容器中,每个容器之间的隔离使用的是Linux的CGroups和Namespaces技术实现的,其中CGgroups对CPU,内存,磁盘等资源的访问限制,Namespaces 提供了环境的隔离。
仓库
Docker仓库相当于一个github上的代码库。
Docker仓库是用来包含镜像的位置,Docker提供一个注册服务器(registry)来保存多个仓库,每个仓库又可以包含多个具备不同tag的镜像。Docker 运行中使用的默认仓库是Docker Hub公共仓库。
仓库支持的操作类似git,创建了新的镜像后,我们可以push提交到仓库,也可以从指定仓库pull拉取镜像到本地。
Docker和虚拟机对比
特性
|
容器
|
虚拟机
|
启动速度
|
秒级
|
分钟级
|
性能
|
接近原生
|
较弱
|
内存代价
|
很小
|
较多
|
硬盘使用
|
一般为MB
|
一般为GB
|
运行密度
|
单机支持上千个容器
|
一般几十个
|
隔离性
|
安全隔离
|
完全隔离
|
迁移性
|
优秀
|
一般
|
English
|
中文
|
host
|
宿主机
|
image
|
镜像
|
container
|
容器
|
registry
|
仓库 |
daemon
|
守护程序
|
client
|
客户端
|