01 Docker 简介


Docker 简介

1
2
3
4
# 官方文档
https://www.runoob.com/docker/docker-tutorial.html
Docker 官网:http://www.docker.com
Github Docker 源码:https://github.com/docker/docker
  1. Docker是Docker.lnc公司(前dotCloud,PaaS市场老牌提供商)开源的一个基于LXC技术之上构建的Container容器引擎,源代码托管在Github上,基于Go语言并遵从Apache2.0协议开源。

  2. Docker是通过内核虚拟化技术(namespaces及cgroups等)来提供容器的资源隔离与安全保障等。
    由于Docker通过操作系统层的虚拟化实现隔离,所以Docker容器在运行时,不需要类似虚拟机(VM)额外的操作系统开销,提高资源利用率。

1
2
3
4
5
1. kvm解决了硬件和操作系统之间的依赖。
2. docker解决了软件和操作系统环境之间的依赖,能够让独立服务或应用程序在不同的环境中,得到相同的运行结果。
3. docker容器是一种轻量级、可移植、自包含的软件打包技术,使应用程序可以在几乎任何地方以相同的方式运行。
开发人员在自己笔记本上创建并测试好的容器,无需任何修改就能够在生产系统的虚拟机、物理服务器或公有云主机上运行。
4. Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版),我们用社区版就可以了。

Docker 的三大理念

  • 构建,运输,随处运行
  • Build,Ship and Run any App,Angwhere

Docker 的应用场景

1
2
3
4
1. Web 应用的自动化打包和发布。
2. 自动化测试和持续集成、发布。
3. 在服务型环境中部署和调整数据库或其他的后台应用。
4. 从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。

Docker 的优点

1
2
3
4
5
6
7
8
9
10
11
1、简化程序:
- Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,便可以实现虚拟化。
Docker改变了虚拟化的方式,使开发者可以直接将自己的成果放入Docker中进行管理。
方便快捷已经是 Docker的最大优势,过去需要用数天乃至数周的 任务,在Docker容器的处理下,只需要数秒就能完成。
2、避免选择恐惧症:
- 如果你有选择恐惧症,还是资深患者。那么你可以使用 Docker 打包你的纠结!比如 Docker 镜像;
Docker 镜像中包含了运行环境和配置,所以 Docker 可以简化部署多种应用实例工作。
比如 Web 应用、后台应用、数据库应用、大数据应用比如 Hadoop 集群、消息队列等等都可以打包成一个镜像部署。
3、节省开支:
- 一方面,云计算时代到来,使开发者不必为了追求效果而配置高额的硬件,Docker 改变了高性能必然高价格的思维定势。
Docker 与云的结合,让云空间得到更充分的利用。不仅解决了硬件管理的问题,也改变了虚拟化的方式。

Docker 能做什么

  1. Docker依赖“写时复制”(copy-on-write)模型,修改应用程序非常迅速,“随心所致,代码即改”

  2. 简化配置

1
2
3
这是Docker公司宣传的Docker的主要使用场景。虚拟机的最大好处是能在你的硬件设施上运行各种配置不一样的平台(软件、系统),
Docker在降低额外开销的情况下提供了同样的功能。它能让你将运行环境和配置放在代码中然后部署,
同一个Docker的配置可以在 不同的环境中使用,这样就降低了硬件要求和应用环境之间耦合度。
  1. 代码流水线(Code Pipeline)管理
1
2
前一个场景对于管理代码的流水线起到了很大的帮助。代码从开发者的机器到最终在生产环境上的部署,需要经过很多的中间环境。
而每一个中间环境都有自己微小的差别,Docker给应用提供了一个从开发到上线均一致的环境,让代码的流水线变得简单不少。
  1. 提高开发效率
1
2
3
4
5
6
7
8
9
这就带来了一些额外的好处:Docker能提升开发者的开发效率。
如果你想看一个详细一点的例子,可以参考Aater在DevOpsDays Austin 2014 大会或者是DockerCon上的演讲。
不同的开发环境中,我们都想把两件事做好。
一是我们想让开发环境尽量贴近生产环境,
二是我们想快速搭建开发环境。
理想状态中,要达到第一个目标,我们需要将每一个服务都跑在独立的虚拟机中以便监控生产环境中服务的运行状态。
然而,我们却不想每次都需要网络连接,每次重新编译的时候远程连接上去特别麻烦。
这就是Docker做的特别好的地方,开发环境的机器通常内存比较小,之前使用虚拟的时候,
我们经常需要为 开发环境的机器加内存,而现在Docker可以轻易的让几十个服务在Docker中跑起来。
  1. 隔离应用
1
有很多种原因会让你选择在一个机器上运行不同的应用,比如之前提到的提高开发效率的场景等
  1. 整合服务器
1
2
3
正如通过虚拟机来整合多个应用,Docker隔离应用的能力使得Docker可以整合多个服务器以降低成本。
由于没有多个操作系统的内存占用,以及能在多个实例之间共享没有使用的内存,
Docker可以比虚拟机提供更好的服务器整合解决方案。
  1. 调试能力
1
2
3
Docker提供了很多的工具,这些工具不一定只是针对容器,但是却适用于容器。
它们提供了很多的功能,包括可以为容器设置检查点、设置版本和查看两个容器之间的差别,这些特性可以帮助调试Bug。
你可以在《Docker拯救世界》的文章中找到这一点的例证。
  1. 多租户环境
1
2
3
4
5
另外一个Docker有意思的使用场景是在多租户的应用中,它可以避免关键应用的重写。
我们一个特别的关于这个场景的 例子是为IoT(译者注:物联网)的应用开发一个快速、易用的多租户环境。
这种多租户的基本代码非常复杂,很难处理,重新规划这样一个应用不但消耗时间,也浪费金钱。
使用Docker,可以为每一个租户的应用层的多个实例创建隔离的环境,这不仅简单而且成本低廉,
当然这一切得益于Docker环境的启动速度和其高效的diff命令。
  1. 快速部署
1
2
3
4
5
在虚拟机之前,引入新的硬件资源需要消耗几天的时间。
Docker的虚拟化技术将这个时间降到了几分钟,Docker只是创建一个容器进程而无需启动操作系统,这个过程只需要秒级的时间。
这正是Google和Facebook都看重的特性。
你可以在数据中心创建销毁资源而无需担心重新启动带来的开销。
通常数据中心的资源利用率只有30%,通过使用Docker并进行有效的资源分配可以提高资源的利用率。
  1. 小结:一句话说明docker的本质就是: 低开销(系统文件、内存 共用)的虚拟机

Docker 改变了什么

1
2
3
4
5
6
7
8
9
面向产品:产品交付

面向开发:简化环境配置

面向测试:多版本测试

面向运维:环境一致

面向架构:自动化扩容(微服务)