Docker概述
什么是Docker?
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。
Docker的思想来自于集装箱。
Docker的历史
2010 年,几个搞 IT 的年轻人,在美国旧金山成立了一家名叫 dotCloud
的公司。dotCloud 的平台即服务(Platform-as-a-Service, PaaS
)提供商。底层技术上,dotCloud 平台利用了 Linux 的 LXC 容器技术
。
为了方便创建和管理这些容器,dotCloud 基于 Google 公司推出的 Go 语言
开发了一套内部工具,之后被命名为 Docker
。Docker 就是这样诞生的。
2013 年 3 月,dotCloud 公司的创始人之一,Docker 之父,28 岁的 「Solomon Hykes」 正式决定,将 Docker 项目开源。
开源当月, Docker 0.1 版本发布。
此后的每一个月, Docker 都会发布一个版本。
2014 年 6 月 9 日, Docker 1.0 版本正式发布。
此时的 Docker,已经成为行业里人气最火爆的开源技术,没有之一。甚至像 Google、微软、Amazon、 VMware 这样的巨头们都对它青睐有加,表示将全力支持。
Docker的应用场景
- Web 应用的自动化打包和发布。
- 自动化测试和持续集成、发布。
- 在服务型环境中部署和调整数据库或其他的后台应用。
- 从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。
虚拟机技术
虚拟机的缺点:
- 资源占用十分多
- 冗余步骤多
- 启动很慢
容器技术
容器技术不是模拟的一个完整的操作系统。
比较Docker和虚拟还技术的不同
- 传统虚拟机,虚拟出一套硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软件;
- 容器内的应用直接运行在宿主机的内容,容器是没有自己的内核的,也没有虚拟我们的硬件,所以就轻便了;
- 每个容器间是互相隔离的,每个容器内都有一个属于自己的文件系统,互不影响;
DovOps(开发、运维)
应用更快的交付和部署
传统:一堆帮助文档,安装程序
Docker:打包镜像发布测试,一键运行
更便捷的升级和扩容
使用了Docker之后,我们部署应用就和搭积木一样!
项目打包为一个镜像,扩展服务器A!服务器B
更简单的系统运维
在容器化之后,我们的开发,测试环境都是高度一致的。
更搞笑的计算资源利用
Docker具内核级别的原扣化可再一个物理机上可以运行很多的容器实例!服务器的性能可被压榨到极致
Docker局限性
Docker是基于Linux 64bit
的,无法在32bit的linux/Windows/unix
环境下使用
LXC是基于cgroup等linux kernel功能的,因此container的guest系统只能是linux base的
隔离性相比KVM之类的虚拟化方案还是有些欠缺,所有container公用一部分的运行库
网络管理相对简单,主要是基于namespace隔离
container随着用户进程的停止而销毁,container中的log等用户数据不便收集
Docker对disk的管理比较有限
Docker并非适合所有应用场景,Docker只能虚拟基于Linux的服务。Windows Azure 服务能够运行Docker实例,但到目前为止Windows服务还不能被虚拟化。
可能最大的障碍在于管理实例之间的交互。由于所有应用组件被拆分到不同的容器中,所有的服务器需要以一致的方式彼此通信。这意味着任何人如果选择复杂的基础设施,那么必须掌握应用编程接口管理以及集群工具,比如Swarm、Mesos或者Kubernets以确保机器按照预期运转并支持故障切换。
Docker在本质上是一个附加系统。使用文件系统的不同层构建一个应用是有可能的。每个组件被添加到之前已经创建的组件之上,可以比作为一个文件系统更明智。分层架构带来另一方面的效率提升,当你重建存在变化的Docker镜像时,不需要重建整个Docker镜像,只需要重建变化的部分。
可能更为重要的是,Docker旨在用于弹性计算。每个Docker实例的运营生命周期有限,实例数量根据需求增减。在一个管理适度的系统中,这些实例生而平等,不再需要时便各自消亡了。
针对Docker环境存在的不足,意味着在开始部署Docker前需要考虑如下几个问题。首先,Docker实例是无状态的。这意味着它们不应该承载任何交易数据,所有数据应该保存在数据库服务器中。
其次,开发Docker实例并不像创建一台虚拟机、添加应用然后克隆那样简单。为成功创建并使用Docker基础设施,管理员需要对系统管理的各个方面有一个全面的理解,包括Linux管理、编排及配置工具比如Puppet、Chef以及Salt。这些工具生来就基于命令行以及脚本。
相关链接
Docker 官网:https://www.docker.com/
Docker 文档地址:https://docs.docker.com/
Docker 仓库地址:https://hub.docker.com/