5分钟弄懂Docker

尽管之前久闻Docker的大名了,但是天资愚钝,对其到底是个啥东西一直摸不清,最近花了一段时间整理了一下,算是整理出一点头绪来。

官网的介绍是这样的:

Docker is an open platform for developers and sysadmins to build, ship, and run distributed applications….其实看完这句话还是不明白究竟是啥的,下面就慢慢解释。不过长话短说的话,把他想象成一个用了一种新颖方式实现的超轻量虚拟机,在大概效果上也是正确的。当然在实现的原理和应用上还是和VM有巨大差别的,并且专业的叫法是应用容器(Application Container)。

为啥要用容器?

那么应用容器长什么样子呢,一个做好的应用容器长得就好像一个装好了一组特定应用的虚拟机一样。比如我现在想用MySQL那我就找个装好MySQL的容器,运行起来,那么我就可以使用 MySQL了。

那么我直接装个 MySQL不就好了,何必还需要这个容器这么诡异的概念?话是这么说,可是你要真装MySQL的话可能要再装一堆依赖库,根据你的操作系统平台和版本进行设置,有时候还要从源代码编译报出一堆莫名其妙的错误,可不是这么好装。而且万一你机器挂了,所有的东西都要重新来,可能还要把配置在重新弄一遍。但是有了容器,你就相当于有了一个可以运行起来的虚拟机,只要你能运行容器,MySQL的配置就全省了。而且一旦你想换台机器,直接把这个容器端起来,再放到另一个机器就好了。硬件,操作系统,运行环境什么的都不需要考虑了。

在公司中的一个很大的用途就是可以保证线下的开发环境、测试环境和线上的生产环境一致。当年在 Baidu 经常碰到这样的事情,开发把东西做好了给测试去测,一般会给一坨代码和一个介绍上线步骤的上线单。结果代码在测试机跑不起来,开发就跑来跑去看问题,一会儿啊这个配置文件忘了提交了,一会儿啊这个上线命令写错了。找到了一个 bug 提上去,开发一看,啊我怎么又忘了把这个命令写在上线单上了。类似的事情在上线的时候还会发生,变成啊你这个软件的版本和我机器上的不一样……在 Amazon 的时候,由于一个开发直接担任上述三个职位,而且有一套自动化部署的机制所以问题会少一点,但是上线的时候大家还是胆战心惊。

如果利用容器的话,那么开发直接在容器里开发,提测的时候把整个容器给测试,测好了把改动改在容器里再上线就好了。通过容器,整个开发、测试和生产环境可以保持高度的一致。

此外容器也和VM一样具有着一定的隔离性,各个容器之间的数据和内存空间相互隔离,可以保证一定的安全性。

那为啥不用VM?

那么既然容器和 VM 这么类似为啥不直接用 VM 还要整出个容器这么个概念来呢?Docker 容器相对于 VM 有以下几个优点:

启动速度快,容器通常在一秒内可以启动,而 VM 通常要更久

为啥相似的功能在性能上会有如此巨大的差距呢,其实这和他们的设计的理念是相关的。 VM 的设计图如下:

0

VM 的 Hypervisor 需要实现对硬件的虚拟化,并且还要搭载自己的操作系统,自然在启动速度和资源利用率以及性能上有比较大的开销。而 Docker 的设计图是这样的:

0

Docker 几乎就没有什么虚拟化的东西,并且直接复用了 Host 主机的 OS,在 Docker Engine 层面实现了调度和隔离重量一下子就降低了好几个档次。 Docker 的容器利用了 LXC,管理利用了 namespaces 来做权限的控制和隔离, cgroups 来进行资源的配置,并且还通过 aufs 来进一步提高文件系统的资源利用率。

其中的 aufs 是个很有意思的东西,是 UnionFS 的一种。他的思想和 git 有些类似,可以把对文件系统的改动当成一次 commit 一层层的叠加。这样的话多个容器之间就可以共享他们的文件系统层次,每个容器下面都是共享的文件系统层次,上面再是各自对文件系统改动的层次,这样的话极大的节省了对存储的需求,并且也能加速容器的启动。

=====================================================

本微信静态数据存储由七牛云存储提供!七牛专为移动时代开发者提供数据安全托管、双向传输加速以及图片、音视频等数据处理的一站式服务。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 每天花5分钟阅读和学习Docker PDF,可以帮助我们快速掌握Docker的基本知识和使用技巧。首先,我们可以利用这5分钟来了解Docker的概念和基本原理,如容器化技术、镜像和容器的关系等。同时,也可以学习Docker的核心功能,如映像构建、容器管理、网络配置等。通过阅读Docker PDF,我们可以了解Docker的各种命令和选项的使用方法,例如docker run、docker build等。另外,我们可以学习如何使用Docker Compose来编排和管理多个容器的应用程序,以及如何使用Docker Swarm来进行容器集群的部署和管理。此外,阅读Docker PDF还可以让我们了解到一些Docker的最佳实践和常见问题,以及如何解决这些问题。通过每天花5分钟来玩转Docker PDF,我们可以不断积累对Docker的理解和掌握,提高我们的工作效率和技术水平。 ### 回答2: 每天花费5分钟玩转Docker PDF,对于对Docker有基本了解的人来说是一个很好的学习和提升技能的方式。 首先,我们可以阅读一些Docker的入门资料和教程。可以搜索并下载一些与Docker相关的PDF文档,例如《Docker入门指南》等。通过阅读这些资料,我们可以了解Docker的基本概念、使用方法以及与之相关的命令。 其次,我们可以学习Docker的一些常用命令和操作。可以找到一些包含Docker命令和操作示例的PDF文档,例如《Docker常用命令手册》等。通过学习这些命令和操作,我们可以更好地理解和掌握Docker的使用技巧,能够更高效地管理和使用容器。 此外,我们还可以学习Docker的一些高级特性和技术。有一些PDF文档专门介绍和讲解Docker的高级特性和技术,例如Docker的网络配置、数据卷的使用、镜像构建等等。通过学习这些高级特性和技术,我们可以更好地应用Docker解决实际问题,并优化我们的容器化应用。 最后,我们可以进行一些实践和实验。可以找到一些包含Docker实践和实验的PDF文档,例如一些Docker的实战项目或者案例分析。通过实践和实验,我们可以将理论知识应用到实际问题中,也可以发现和解决在实践中遇到的困难和挑战。 总结来说,每天花费5分钟阅读和学习Docker的相关PDF文档,可以帮助我们提升Docker的基础知识和技能,掌握Docker的常用命令和操作,了解Docker的高级特性和技术,并通过实践和实验运用所学知识。这样,我们可以更好地应用和管理Docker容器,为我们的工作和项目开发带来更多的便捷和效率。 ### 回答3: 每天花5分钟学习和应用Docker将是非常值得的。Docker是一种容器化技术,可以将应用程序和其所有依赖项打包在一个独立的容器中,从而实现快速部署和管理。通过学习Docker,你可以更方便地构建、发布和运行应用程序,同时提高开发效率和部署灵活性。 在5分钟的时间里,你可以阅读并理解有关Docker的一些核心概念和基本命令的PDF文档。这些内容包括容器、镜像、容器注册表、Dockerfile等。了解这些概念将帮助你更好地理解和使用Docker。 此外,你还可以学习如何在本地环境中安装Docker,并通过一些简单的命令启动容器和运行应用程序。你可以尝试使用Docker创建一个简单的Web应用,如一个Hello World页面,并通过浏览器访问它。这将帮助你快速上手并体验Docker的优势。 为了更深入地学习Docker,你可以查看更多高级的Docker功能,如网络设置、数据卷和多容器应用的部署。学习这些功能可以帮助你更好地管理和扩展应用程序。 每天花5分钟学习和应用Docker的PDF指南是非常实用的,并且你可以通过不断积累知识和实践来提高自己的技能。无论你是开发人员、测试人员还是系统管理员,掌握Docker技术都将为你的工作带来很多便利和效益。开始行动吧,每天花5分钟玩转Docker,让你的工作更加高效和充满乐趣!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值