一 简介
Docker最初是dotCloud公司的一个内部项目,诞生于 2013 年初,由google公司开源的Go语言开发。
Docker是一个开源的引擎,能够轻松的为任何应用建立一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试经过的容器能够批量地在生产环境中部署,包括VMs(虚拟机)、bare metal、OpenStack 集群和其余的基础应用平台。
二 特性
2.1 docker特性
- 保证一致的运行环境
- 弹性伸缩,快速扩容
- 方便迁移
- 持续集成、持续交付与持续部署
- 高性能
- 轻量级
2.2 容器的组成
容器=cgroup+namespace+rootfs+容器引擎(用户态工具)
- Cgroup:资源控制
- Namespace:访问隔离
- rootfs:文件系统隔离
- 容器引擎:生命周期控制
2.2 docker与KVM
虚拟化技术依赖物理CPU和内存,是硬件级别的;
而docker构建在操做系统上,利用操做系统的containerization技术,因此docker甚至能够在虚拟机上运行。 虚拟化系统通常都是指操做系统镜像,比较复杂,称为“系统”;
而docker开源并且轻量,称为“容器”,单个容器适合部署少许应用,好比部署一个redis、一个memcached。 传统的虚拟化技术使用快照来保存状态;
而docker在保存状态上不只更为轻便和低成本,并且引入了相似源代码管理机制,将容器的快照历史版本一一记录,切换成本很低。 传统的虚拟化技术在构建系统的时候较为复杂,须要大量的人力;
而docker能够经过Dockfile来构建整个容器,重启和构建速度很快。更重要的是Dockfile能够手动编写,这样应用程序开发人员能够经过发布Dockfile来指导系统环境和依赖,这样对于持续交付十分有利。
特性
|
容器
|
虚拟机
|
部署难度
|
简单
|
部署相对复杂
|
启动
|
秒级
|
分钟级
|
硬盘使用
|
通常为MB
|
通常为GB
|
性能
|
原生
|
弱于
|
系统支持量
|
单机支持上千个容器
|
通常几十个
|
管理效率
|
管理简单
|
管理复杂
|
三 场景
Docker一般用于以下场景:
- web应用的自动化打包和发布;
- 自动化测试和持续集成、发布;
- 在服务型环境中部署和调整数据库或其余的后台应用;
- 从头编译或者扩展示有的OpenShift或Cloud Foundry平台来搭建本身的PaaS环境。
四 架构
docker客户端则扮演着docker服务端的远程控制器,能够用来控制docker的服务端进程。
- Docker服务端 – Docker Daemon
docker服务端是一个服务进程,管理着全部的容器。
提示:大部分状况下,docker服务端和客户端运行在一台机器上。
docker镜像,一个可以运行在docker容器上的一组程序文件,是一个只读的模板。
- Docker容器 – Docker Container
docker容器,就是运行程序的载体。镜像(Image)是静态的定义,容器是镜像运行时的实体。docker容器是从镜像建立的运行实例。它能够被启动、开始、中止、删除。每一个容器都是相互隔离的、保证安全的平台。
Docker仓库是集中存放镜像文件的场所,Docker仓库分为公开仓库(Public)和私有仓库(Private)两种形式。Docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等),镜像不包含任何动态数据。