一 简介
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镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等),镜像不包含任何动态数据。