- 官方定义:Docker是一个能够把开发的应用程序自动部署到容器的开源引擎。由 Docker Inc. 公司 前 dotC1oud公司, PaaS市场中的老牌提供商)的团队编写,基于 Apache 2.0开源授权协议发行。
- 程序员能理解的定义:Docker是Docker Inc. 公司开源的一个基于Linux技术构建容器的容器引擎,其源代码在GitHub上,基于Go语言开发并遵从Apache 2.0协议;
- 普通人能理解的定义:“没有集装箱,就不会有全球化。”而Docker就是IT领域里改变世界的“集装箱”;
- 圈里人总结:Docker是一套以容器技术为核心的IT标准化构建体系。它不仅仅是一项技术,更不仅仅是一家公司,Docker必将改变整个IT世界,让“Build Ship Run”来的更猛烈些吧!
Docker优势 – 更轻量、更快速、更便捷
- 对开发人员来说:Docker提供了简单快速的隔离环境,无需再为配置环境操心,让程序跑到哪都一样;
- 对运维人员来说:Docker可以快速构建出一整套无状态分布式基础设施,使得运维工作可以通过程序化的脚本来完成;
- 对业务人员来说:从每月或每周才能发布的新版本到只需1小时就能发布完毕,迅速满足用户新需求;
- 标准化应用发布:Docker容器包含了运行环境和可执行程序,可以跨平台和主机使用;
- 节约时间:快速部署和启动,VM启动一般是分钟级,Docker容器启动是秒级;
- 方便构建基于SOA架构或微服务架构的系统,通过服务编排,更好的松耦合;
- 节约成本:以前一个虚拟机至少需要几个G的磁盘空间,Docker容器可以减少到MB级;
- 方便持续集成:通过与代码进行关联使持续集成非常方便;
- 可以作为集群系统的轻量主机或节点:在IaaS平台上,已经出现了CaaS,通过容器替代原来的主机。
如何学习Docker
- 学习Docker,如果没有云计算的基本知识,以及内核的基本知识,那么学习并理解起来会稍吃力。作为容器,Docker容器的优势在哪,不足在哪,最好了解容器的实现是怎样的(简单了解);拥有镜像管理,Docker又该如何体现软件开发,集成,部署,发布,再迭代的软件生命周期管理优势。
- 关于学习资源,起码的硬件设施总是要有的。Docker及其生态的发展很快,不使用纯理论肯定收效甚微。另外,资源还包括Docker官方,各大电子媒体平台,技术论坛,开源社区等,往往大牛的观点能点破自己的困惑,或者让自己知道哪方面的认识还很欠缺,以及让自己少走很多的弯路。
- 个人兴趣的话,归结为强扭的瓜不甜。起码应该认同Docker的设计价值,以及Docker的未来潜力,当然有依据的批判Docker并带动大家的思考,也是深切关注的表现。
- 个人发展方向,个人认为如果需要把Docker当作软件生命周期管理工具的话,那用好Docker最为重要,API及命令的理解与使用是必需的。如果专注系统设计方面,那么除Docker以上的知识与经验之外,若有Docker源码的学习与理解,那么这些肯定会让你的Docker水平提高一个层次。
- 阅读推荐:Docker命令指令详情
总结起来学习Docker需要了解以下相关知识点:
- Linux 系统管理(软件包管理,用户管理,进程管理等)
- Linux 内核相关(Cgroup, namespace 等)
- Linux 文件系统和存储相关(AUFS,BRFS,devicemapper 等)
- Linux 网络(网桥,veth,iptables等)
- Linux安全相关(Appmor,Selinux 等)
- Linux进程管理(Supervisord,Systemd etc)
- Linux容器技术(LXC等)
- 开发语言(Python, GO,Shell 等)
Docker不是什么
Docker在解决问题上广度是其他工具无法比拟的,但是在深度方面Docker缺乏在某些特定类型上的深度。例如,一些组织发现当他们转移到Docker上时可以完全的移除配置管理工具,但是Docker真正厉害之处是它能代替某些方面的传统工具,它也可以兼容这些工具甚至结合以使其增强。接下俩我们介绍一些类型的工具,Docker不直接替换而是与其结合来获得更好的结果:
- 企业虚拟平台(VMware、KVM等)
按传统概念来看容器并不是虚拟机,虚拟机包含一个完整的操作系统运行在宿主机操作系统之上。最大的优点是可以轻松的在一个宿主机上跑很多的配有不同操作系统的虚拟机。结合容器,宿主机和容器共享相同的内核。这就意味着容器很少利用系统资源,但是一定要基于同一个底层的操作系统(例如都是Linux)。 - 云平台(Openstack、CloudStack等)
像企业虚拟化,容器工作流和云平台存在很多相似之处。两者在传统上都运行应用根据需求进行水平缩放。但是Docker并不是云平台,它仅仅是掌管配置,运行,和管理容器在原来存在的Docker主机上。它并不允许创建新的宿主系统(实例),对象存储,块存储,以及很多很云平台相联系的资源。 - 配置管理(Puppet、Chef等)
虽然Docker可以显著提高组织管理应用和应用依赖的能力,但是它并不能直接替代传统的配置管理。Dockerfiles用来定义一个容器在构建时的状态,但是并不能管理容器正在进行的状态,也不能用来管理Docker的主机系统。 - 部署框架(Capistrano、Fabric等)
Docker创建一个独立封装了应用所需的依赖的容器镜像,而且可以部署到任何环境中不需要做任何改变,使得Docker在部署发方面比较方便。然后Docker不能单独用作自动化部署复杂进程。其它的一些工具也是需要结合起来使得工作流自动化更加的健全。 - 工作负载管理工具(Mesos、Fleet等)
Docker服务器没有集群的内部概念。需要附加的编排工具来智能的协调Docker主机池工作,跟踪所有主机及其资源的当前状态,并保存当前容器运行情况清单。 - 开发环境(Vagrant等)
Vagrant是一个虚拟机管理工具,开发者可以用来模拟服务器栈,类似应用注定被部署的生产环境。另外Vagrant可以很容易的在Mac OS X和基于Windows的工作站上运行Linux软件。由于Docker服务器只能运行在Linux上,Docker提供了一个叫做Boot2Docker的工具,来允许开发者在不同的平台上快速的推行基于Linux的Docker机器,但是该工具并没有提供出Docker和Vagarant在广度方面的特性。
Docker有哪些主要的特性
/ | 物理集装箱 | Docker |
---|---|---|
无关内容 | 集装箱几乎支持所有类型的货物 | 能压缩任何负载和依赖 |
无关硬件 | 标准化的尺寸和交接使得集装箱可以通过货船火车货车运输,用起重机交接不需要换一个容器或者打开集装箱 | 使用操作系统的基本体(像LXC)能一致的跑在几乎任何硬件下,不需要对硬件做额外的修改 |
内容隔离和相互作用 | 不需要关心铁锹会砸坏香蕉。集装箱可以一起堆放一起运输 | 资源、网络和内容的独立避免了依赖问题 |
自动化 | 标准化使得自动化装载卸货和移动变得方便 | 使用标准的操作指令去跑start/stop/commit/search等等。对运营人员:CI、CD、自动化测试、hybrid clouds |
高效 | 不需要打开不需要改动什么,高效的点对点的方式 | 轻量级,几乎没有启动的消耗,高效的移植性和操控性 |
职责分离 | 发货人只需要关心箱子内部的事情,托运人只需要关心箱子外部的东西 | 开发者只需要关心代码层面,运营人员只需要关心服务器的基础环境 |
Docker入门教程 | ||
Docker简介 | Docker基本概念 | Docker安装 |
什么是Docker | i.镜像 | 使用Debian操作系统安装Docker |
为什么要用Docker | ii.容器 | 使用CentOS操作系统安装Docker |
iii.仓库 | 使用Ubuntu操作系统安装Docker | |
Docker images镜像详细介绍 | Docker容器 | Docker仓库 |
获取Docker images | Docker容器启动 | Docker Hub |
查找Docker images | Docker容器新建 | 私有仓库 |
下载Docker images | Docker容器终止 | Docker配置文件 |
创建我们自己的Docker images | Docker容器进入容器 | |
Docker容器导出和导入 | ||
Docker容器删除 | ||
Docker数据管理 | Docker网络 | Docker高级网络配置 |
数据卷容器 | 外部访问容器 | 快速配置指南 |
数据卷备份、恢复、迁移 | 容器互联 | 配置 DNS |
容器访问控制 | ||
端口映射实现 | ||
配置 docker0 网桥 | ||
自定义网桥 | ||
实例:创建一个点到点连接 | ||
Docker安全 | Dockerfile | Docker底层实现 |
i. 内核名字空间 | i. 基本结构 | i. 基本架构 |
ii. 控制组 | ii. 指令 | ii. 名字空间 |
iii. 服务端防护 | iii. 创建镜像 | iii. 控制组 |
iv. 内核能力机制 | iv. 联合文件系统 | |
v. 其它安全特性 | v. 容器格式 | |
vi. 总结 | 网络 | |
Docker实战案例 | ||
使用 Supervisor 来管理进程 | ||
创建 tomcat/weblogic 集群 | ||
多台物理主机之间的容器互联 | ||
标准化开发测试和生产环境 |
“VM启动一般是分钟级,Docker容器启动是秒级”、“以前一个虚拟机至少需要几个G的磁盘空间,Docker容器可以减少到MB级”这两个数据的对比已经震撼了我,更不用说其它的优势了。
希望Docker能够在IT界带来集装箱革命!
如果能拿下docker.info的域名就太棒了