# 什么是Docker

image926569a6f7e5a3fb.png

Docker 是世界领先的软件容器平台 。

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app)。

Docker 让容器与宿主机之间、容器与容器之间隔离的更加彻底。每个容器会有自己的权限管理,独立的网络与存储栈,及自己的资源管理,使同一台宿主机上可以友好的共存多个容器。另外,Docker也为容器提供更强的业界的隔离兼容。

Docker 利用Linux核心中的资源分离机制,例如控制组(Control Group)以及Linux核心名字空间(Namespace),来创建独立的容器(containers)。这可以在单一Linux实体下运作,避免启动一个虚拟机造成的额外负担。

# Docker 的前世今生

我们学习一门技术,首先要了解它的发展史,才能清楚是怎么样的一个情况下才有了Docker的诞生,扩展一下自己的知识。

2010 年,几个搞 IT 的年轻人,在美国旧金山成立了一家名叫 dotCloud 的公司。dotCloud 的平台即服务(Platform-as-a-Service, PaaS)提供商。底层技术上,dotCloud 平台利用了 Linux 的 LXC 容器技术。

image4891fdde0a3decee.png

为了方便创建和管理这些容器,dotCloud 基于 Google 公司推出的 Go 语言开发了一套内部工具,之后被命名为 Docker。Docker 就是这样诞生的。

如同 Docker 的 Logo 一样,Docker 的思想来源于集装箱。集装箱解决了什么问题?在一艘大船上,可以把货物规整的摆放起来,并且各种各样的货物被集装箱标准化,集装箱与集装箱之间互不影响。那么就不需要专门运送水果的船和专门运送化学用品的船了。只要这些货物封装在不同的集装箱里,就可以用一艘大船把它们都运走。

Docker 技术诞生之后,并没有引起行业的关注。而 dotCloud 公司,作为一家小型创业企业,在激烈的竞争之下,也步履维艰。

正当他们快要坚持不下去的时候,脑子里蹦出了“开源”的想法。什么是“开源”?开源,就是开放源代码。也就是将原来内部保密的程序源代码开放给所有人,然后让大家一起参与进来,贡献代码和意见。

有的软件一开始就是开源的。也有的软件,是混不下去,创造者又不想放弃,所以选择开源。自己养不活,就吃“百家饭”嘛。2013 年 3 月,dotCloud 公司的创始人之一,Docker 之父,28 岁的 「Solomon Hykes」 正式决定,将 Docker 项目开源。

imageae141856f1922daa.png

不开则已,一开惊人。越来越多的 IT 工程师发现了 Docker 的优点,然后蜂拥而至,加入 Docker 开源社区。Docker 的人气迅速攀升,速度之快,令人瞠目结舌。

开源当月, Docker 0.1 版本发布。此后的每一个月, Docker 都会发布一个版本。到 2014 年 6 月 9 日, Docker 1.0 版本正式发布。

此时的 Docker,已经成为行业里人气最火爆的开源技术,没有之一。甚至像 Google、微软、Amazon、 VMware 这样的巨头们都对它青睐有加,表示将全力支持。

Docker 火了之后, dotCloud 公司干脆把公司名字也改成了 Docker Inc. 。

# Docker理念

Docker 是基于 Go 语言实现的云开源项目。

Docker 的主要目标是 "Build,Ship and Run Any App,Anywhere",也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的 APP(可以是一个 Web 应用或数据库应用等等)及其运行环境能够做到「一次封装,到处运行」。

Linux 容器技术的出现就解决了这样一个问题,而 Docker 就是在它的基础上发展过来的。将应用运行在 Docker 容器上面,而 Docker 容器在任何操作系统上都是一致的,这就实现了跨平台、跨服务器。只需要一次配置好环境,换到别的机子上就可以一键部署好,大大简化了操作。

# Docker的应用场景

  • Web 应用的自动化打包和发布。

  • 自动化测试和持续集成、发布。

  • 在服务型环境中部署和调整数据库或其他的后台应用,降低运维的成本。

  • 从头编译或者扩展现有的OpenShiftCloud Foundry平台来搭建自己的PaaS环境。

    • 码托管平台或是云服务 (opens new window)的功能即提供给用户演示环境,对于用户来讲,并不需要知道底层采用的技术,但是如果PaaS层直接给用户提供虚拟机,由于虚拟机本身对物理机的开销比较大,会消耗太多的资源。
    • 如果采用Docker,在一台物理机上就可以部署多个轻量化的容器,运行效率上会有很大的提升。

# 为什么要用 Docker ?

Docker 是一个用于开发,交付和运行应用程序的开放平台。Docker 使您能够将应用程序与基础架构分开,从而可以快速交付软件。借助 Docker,您可以与管理应用程序相同的方式来管理基础架构。通过利用 Docker 的方法来快速交付,测试和部署代码,您可以大大减少编写代码和在生产环境中运行代码之间的延迟。

一致的运行环境

Docker 的镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性,从而不会再出现 “这段代码在我机器上没问题啊” 这类问题。

更快速的启动时间

​ 可以做到秒级、甚至毫秒级的启动时间。大大的节约了开发、测试、部署的时间。

隔离性

避免公用的服务器,资源会容易受到其他用户的影响。

弹性伸缩,快速扩展

善于处理集中爆发的服务器使用压力 。

迁移方便

可以很轻易的将在一个平台上运行的应用,迁移到另一个平台上,而不用担心运行环境的变化导致 应用无法正常运行的情况。

持续交付和部署

使用 Docker 可以通过定制应用镜像来实现持续集成、持续交付、部署。

最近更新: 1/8/2024, 3:36:54 PM
Copyright © - 码上言   |