我眼中的 Docker(一)

前言

docker 是什么?docker 能干什么?docker 为什么这么火?相信不少人都有这个疑问。我也有。觉得 docker 涉及到的技术太多了,从 linux 内核到各种云计算的解决方案,对于我来说实在是有点艰难的。然而学了一个月的 docker 相关的东东,还是想简单谈谈,说一下我的理解,希望对 docker 的初学者有所帮助。

Docker 的历史

当我们在谈论一项技术的时候,经常会追溯它的历史,这可以帮助我们更好地理解它是怎么发展起来的,是为了解决什么问题。

docker 起源于国外一家很酷的公司 dotclound, 2013 年在 Github 上开源并推进,项目吸引了世界范围内大量的目光,社区非常活跃,许多巨头也参与进来,而 dotclound 直接就把自己改名为 docker 了….

关于 docker 的开源发展可以详细看这篇: Docker开源之路

Docker 是什么

那么,docker 究竟是什么?docker 是一个基于LXC 的高级容器引擎。听起来是不是不知道在说什么?简单地说,docker 是一个轻量级的虚拟解决方案,或者说 —— 一个超轻量级的虚拟机。你一定理解虚拟机是什么,那么,你现在可以认为 docker 是一个秒级启动的虚拟机,可以轻易创建和删除,就这一点,是不是酷毙了。

我们会经常看到这个 docker 的图,它告诉我们,docker 是一种集装箱式的工作方式。正如我们会将各种不同的货物统一打包成一个个集装箱,进行标准的管理和运输,在 docker 的世界里,我们把应用和应用所依赖的运行环境打包成一个个 image,然后分发到任意支持 docker 的平台,就可以在这些平台运行我们的应用,提供服务。

那支持 docker 的平台有哪些?因为 docker 是基于 linux 的,在任意的 linux 发行版我们都可以原生地支持 docker,只要对应的内核版本大于 3.10 并且是 64bit,而在 Windows 和 Mac 中,我们可以通过 boot2docker 来运行 docker,这几乎意味着,所有的主流平台都支持 docker 的运行 —— 从此你不再需要为跨平台而苦恼。

Docker vs VM

说起虚拟化,与 VM 的比较是离不开的,我们可以看看下面这张图:

vm 的理念是在宿主的系统之上,自己虚拟了一个硬件平台,然后运行一个不同的 OS。这意味着它要求很多的资源,在一台机器上,你最多就跑几个虚拟机吧。

而 docker 是依托于宿主机提供的内核,仅仅把一个不同的 linux 发行版本所需的特性打包成一个 image, 这样子当你运行一个 ubuntu 镜像,你会感觉就是在一个 ubuntu 的操作环境里,但实际调用的系统接口都是来源于宿主机。所以当你运行一些内核相关的命令时,你就会发现一些端倪,比如 uname -a, 这时给出的信息肯定是宿主机的。

因为共用宿主机的内核,所以 docker 所需的资源也很少,性能开销很小,通常可以在秒内启动,有些已经可以做到毫秒内启动了。在一台机器上,你完全可能做到同时运行上千个 docker 的容器。

docker 的运行方式也让我们对 VM 的理念产生质疑,假如我们需要虚拟一个不同的运行环境,是否需要一个完全新的系统?其实我们要的只是运行一个应用所需的依赖环境,不是吗?

总的来说,docker 抛弃传统 VM 试图模拟完整机器的思路,本着“面向应用”的核心理念,以应用为单元进行”集装封箱”。

Docker vs LXC

LXC 是什么?LXC 就是 Linux Container,官网。 LXC 也是一种轻量的虚拟技术,Linux 原生支持的容器。可以说 docker 就是基于 LXC 发展起来的,提供 LXC 的高级封装,发展标准的配置方法。

LXC 的定位是替代传统的虚拟机,侧重于提供一个个操作系统,如 Ubuntu、Debian等。Docker 是面向应用的,官方提倡一个容器即是一个应用,以应用为中心。所以,docker 还提供了统一的打包部署方案,即 Dockerfile, 还有版本控制,image 复用,远程仓库以供镜像共享等。

可以说,LXC 只是 Docker 的底层技术之一,而 Docker 已经在此之上发展出了一个生态系统,如果有另一种容器虚拟技术的话,也许 LXC 也只是配置文件里的 option 选项,libContainer 项目就是在做这样的事情。

Docker 在解决什么

看到这里,你应该对 docker 在解决的问题有一些模糊的概念,我们不妨总结一下:

  1. 简化配置。在容器中开发完成后快速部署于各主流系统,解决了地狱依赖问题,再也没有了“在我电脑明明可以运行”的情况。
  2. 机器资源利用率的提高,不需要为虚拟一个环境而耗费大量资源。
  3. 改变了传统应用交付的方式,软件的开发和管理从部门间的装配和调试转换为部件的简单替换。
  4. 软件的管理和共享从代码层次向应用层次上升。
  5. 给了我们更多的选择自由性,使软件架构更加灵活。详见:这里

也许以后 docker 成为了新的软件管理模式,我们不会再看到开发人员为每个不同发行版本编写配置文件,处理复杂的系统依赖。无论我们需要什么服务,我们只需要安装 docker,然后 pull 一个镜像到本地就可以了。事实上,我们已经开始看到这种趋势了,毕竟 docker 作为开发和测试来说都太方便了。

至于 docker 在集群自动化部署中的意义,我还是直接分享这篇文章吧:闲谈集群管理模式

有点长了,下一篇见。

时间: 2024-10-11 00:29:47

我眼中的 Docker(一)的相关文章

我眼中的 Docker(二)Image

Docker 安装 如何安装 docker 详见官网: installation 或者 中文指南. 不过 linux 上我推荐用 curl 安装,因为 apt-get 中源要么没有 docker,要么版本较低. $ sudo apt-get install curl $ sudo curl -sSL https://get.docker.com/ | sh $ sudo docker run hello-world 最后一个命令成功的话说明 docker 可以正常运行. 然而因为中国显而易见的国

网络工程师眼中的docker

好多年前,"云计算"这个名词刚出现的时候,好多概念还真是"云里雾里"."虚无缥缈",好多时候,大家把"云计算"等同于"网格计算"."分布式计算".似乎那个时候更注重是"计算"两字,或者可以说那个时候大家对云的理解还不够透彻,不知道"云"到底是啥玩意.又过了几年,"云计算"的概念清晰了许多,好多人认为"虚拟化"

Docker搭建本地私有仓库

安装部署一个私有的Docker Registry是引入.学习和使用Docker这门技术的必经之路之一.尤其是当Docker被所在组织接受,更多人.项目和产品开始接触和使用Docker时,存储和分发自制的Docker image便成了刚需.Docker Registry一如既往的继承了"Docker坑多"的特点,为此这里将自己搭建"各类"Registry过程中执行的步骤.遇到的问题记录下来,为己备忘,为他参考. Docker在2015年推出了distribution项

docker解决数据存储问题的方案

如今docker在云计算领域发展的势头非常猛,各个公司不论大小都開始研究这个开源工具和技术.环绕docker的开源项目和创业公司也多如牛毛,就是一个简单管理container的web ui都有非常多开源项目.只是还是一个人说的好.docker必须要是集群才好玩.并且越大越好玩. 当然这是从玩技术的人眼中看待的问题,假设要真正用于生产还是有非常多问题须要解决,非常多方案须要设计,非常多容错须要处理. 今天看资料学习到了docker是如何解决容器里面数据存储的问题的方案,曾经做PAAS遇到过这样的问

资深首席架构师眼中的架构应该是怎样的?

“架构的视角每个人都不一样,这位在eBay.携程.唯品会等平台型互联网公司都工作过的老司机就以平台架构视角和大家分享架构心得体会.一家之言,欢迎讨论. 本文首发于InfoQ垂直公众号「聊聊架构」,ID:archtime. 我对架构定义的理解 大概在7~8年前,我曾经有一个美国对口的架构师导师,他对我讲架构其实是发现利益相关者(stakeholder),然后解决他们的关注点(concerns),后来我读到一本书<软件系统架构:使用视点和视角与利益相关者合作>,里面提到的理念也是这样说:系统架构的

Docker深入浅出系列教程——Docker简介

我是架构师张飞洪,钻进浩瀚代码,十年有余,人不堪其累,吾不改其乐.如果你和我的看法不一样,请关注我的头条号,我们一起奇闻共赏,疑义相析. 本节属于入门简介,从三个小方面进行简单介绍Docker. Docker介绍: docker是一种内核级别的,新型的虚拟化技术,是运维人员的福音,相对传统虚拟化有本质的差别. docker介绍官网 www.docker.com github https://github.com/docker/dockergithub.io 开源的容器引擎,可以让开发者打包应用以

Docker深入浅出系列教程——镜像管理【外加视频】

我是架构师张飞洪,钻进浩瀚代码,十年有余,人不堪其累,吾不改其乐.如果你和我的看法不一样,请关注我的头条号,我们一起奇闻共赏,疑义相析. 接下来来讲解Docker三大组件之一的镜像,如果说镜像是静态的只读文件,那么容器就是带有运行时需要的可写文件层.也可以这样理解,镜像是对象的模板——类,容器是类生成的对象,镜像只有一个,对象可以有很多个.如果大家觉得看文字不过瘾,可以收看我的视频 1.搜索镜像 docker search ubuntu   //搜索镜像 2.拉取镜像 docker pull u

图解:在资深架构师眼中的架构应该是怎样的?

我对架构定义的理解 大概在7~8年前,我曾经有一个美国对口的架构师导师,他对我讲架构其实是发现利益相关者(stakeholder),然后解决他们的关注点(concerns),后来我读到一本书<软件系统架构:使用视点和视角与利益相关者合作>,里面提到的理念也是这样说:系统架构的目标是解决利益相关者的关注点. 这是从那本书里头的一张截图,我之前公司分享架构定义常常用这张图,架构是这样定义的: 每个系统都有一个架构 架构由架构元素以及相互之间的关系构成 系统是为了满足利益相关者(stakeholde

Docker 容器十诫

[编者按]本文作者为 Rafael Benevides,主要介绍使用 Docker 容器时应该注意的十个陷阱. Docker 容器十诫 当你刚开始使用容器时,会发现容器能解决许多问题,而且好处很多: 首先:容器是不可变的 —— 操作系统.库版本.配置.文件夹以及应用全都包裹在容器内.你可以确保,在 QA 阶段测试的一张图片,肯定会在生产环境中出现,并且行为保持一致. 其次:容器是轻量级的 —— 容器的内存占用很小.容器只会给主进程分配内存,因此无需十几万个 MB 的内存空间. 最后:容器速度很快