Docker是什么?

大家好,我是指北君。

如果说个人主机时代大家都是比拼单机 CPU 主频的高低和内存的大小,那么现在的云计算时代,虚拟化技术毫无疑问是时代的主流了(进一步压榨硬件资源)。而 Docker 就是实现轻量级虚拟机技术的代表了。它实现了应用组件级别的 “一次封装,到处运行”。

Docker 是基于 Go 语言实现的开源项目,这里需要注意的是它开源哦,这也打下了它后来这么流程的基础,因为受到了广泛的关注和讨论,社区不断地发展壮大,生态就起来了。最早诞生于2013年初,目前也已经加入了 Linux 基金会,遵循 Apache 2.0 协议。

现在主流的 Linux 操作系统已经支持 Docker。例如 Redhat 6.5、CentOS 6.5 往上的版本、Ubuntu 14.04 等操作系统,都已经默认带有 Docker 软件包了。 目前我们使用的各种云服务器平台也都广泛应用了 Docker。

上面说了这么多,就是为了说明它目前在主流技术中的地位,可以预见这也是目前的一个正确趋势,为了不沦为菜鸟,我们必须技术上得跟进这一块。

为什么要使用Docker

那你可能会问了,之前 linux 就有容器化的功能特性呀,Docker的容器化有啥好处呢?

大家可以将 Docker 理解为一种沙盒。每个容器内运行一个应用,不同的容器相互隔离,容器之间也可以建立通信机制。 而且容器的启动和停止都十分快速,自身对资源的需求也十分有限,远远低于虚拟机。 我们在公司都直接把容器当做应用本身的。

为了更好的理解呢,这里我举一个例子。

假如你们公司现在要搞一个网站,技术选型使用最常见的 LAMP(Linux + Apache + MySQL + PHP)。按照传统的做法,我们是不是要先安装 Apache、MySQL 和 PHP 以及他们所需要依赖的环境。然后得分别对这些应用软件进行配置(创建用户、配置参数等等)。按照经验配置过程中肯定还会出各种各样的问题,操作了一大堆好不容易解决了,服务启动了,开始测试又出了问题。。。

按照上面这个步骤可以想象,如果要部署多台机器,那肯定花费的时间又多,风险又大。 更为可怕的是,一旦服务器迁移(腾讯云迁移到阿里云),那肯定又得重新搞一遍部署、调试。这纯粹就是体力活,假如搞活动,要扩容,你这个操作下来黄花菜都凉了。

那这个时候,我们今天要聊的主角Docker肯定该登场了。 Docker 提供了一种非常聪明的方法,通过容器来打包应用,也就是说如果要迁移那只要在新的服务器启动容器就好了,简单的一笔。 是不是节约了时间,也降低了部署过程中出现问题的风险。

这个和Java还是有点像的,一次性创建,可以在任意环境、任意时间让应用正常的执行

Docker与虚拟机的比较

在使用 Docker 之前,我们都是使用虚拟机软件(VMware、VirtualBox等)来安装一个操作系统,然后再安装我们需要的应用。 那 Docker 和传统这种虚拟机方式有啥区别呢? 我们从启动速度、磁盘使用、性能、系统支持数量、隔离性等方面给大家总结一下看看。

特性 Docker容器 虚拟机
启动速度 秒级 分钟级
硬盘使用 一般为MB 一般为GB
性能 接近原生 弱于
系统支持数量 单机支持上千个容器 一般十几个
隔离性 安全隔离 安全隔离

Docker 容器除了运行其中的应用外,基本上不消耗额外的系统资源,保证应用性能的同时,尽量减少了系统开销。

传统虚拟机运行 N 个不同的应用就要启动 N 个虚拟机(每个虚拟机都要单独的分配独占内存、磁盘等资源),而Docker虚拟机只需要启动 N 个隔离的容器,并将应用放到容器内即可。

如果看到这里你还对 Docker 和 我们经常使用的虚拟机(VMware、VirtualBox)方式的虚拟化不太了解,那么记住下面这张图就够了。

Docker 容器是在操作系统层面实现虚拟机,直接复用本地主机的操作系统,因此更加轻量级。

总结

这篇文章主要为大家讲解了Docker是什么,以及它的优势。Docker 为 Linux 容器技术提供了更简便的使用和管理方案,Docker 让容器技术变得前所未有的方便易用。

欢迎关注公众号【Java技术指北】,第一时间获取更多精彩内容。

有任何问题可以在公众号后台留言,指北君会第一时间回复大家。

Java Geek Tech wechat
欢迎订阅 Java 技术指北,这里分享关于 Java 的一切。