首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Docker 已到达战场4年,现代化开发中不可或缺的利器

本文属于docker 科普类文章,缺乏实际操作,并不能完成 十分钟速成Docker (1/1) 的任务,给您带来的不便敬请谅解。

我们将会面对怎样的读者:

观察者:朋友圈查阅转发资料的IT相关人士

学习者:从观察者转换过来的,可以说是我们公众号的稳定粉丝了

运营者:我们团队本身

Docker 君的前世今生

Docker 是一个工具,官网的介绍是“Docker is the world’s leading software container platform.”官方给Docker的定位是一个应用容器平台。它致力于为任何应用程序创建分发版本而简化封装流程,将其部署到各种规模的环境中,并将敏捷软件组织的工作流程和响应流水化。云计算就好比大货轮。docker就是集装箱。

过去,不仅需要打包应用程序,还需要包含一些依赖库和守护进程等。然而,我们永远不能百分之百地保证,软件运行的环境是完全一致的。这就使得软件的打包很难掌握,许多公司也不能可靠地完成这项工作。常有类似的事发生,使用 Scientific Linux 的用户试图部署一个来自社区的、仅在 Red Hat Linux 上经过测试的软件包,希望这个软件包足够接近他们的需求。如果使用 Dokcer、只需将应用程序和其所依赖的每个文件一起部署即可。Docker 的分层镜像使得这个过程更加高效,确保应用程序运行在预期的环境中。

实际问题是如何被Docker解决的

1. 多人协作开发的时候,在我本地程序跑的好好的,别人的电脑上就跑不动了

拿 LNMP 栈举栗子,在 LNMP 中它经常会涉及很多东西,Linux nginx mysql php 某一项版本不一致的时候,都会导致应用与理想目标相差甚远,Docker则将程序直接打包成镜像,直接运行在容器中即可。

2. 新来的大牛搭建环境,ta手忙脚乱的搭了一周...

由于历史原因,环境及其复杂,项目穿插过大,技术负债庞大,大牛迟迟不能进入开发现场,Docker将环境依赖打包,写入配置,新来的小伙伴开箱即用

3. 服务器自己的程序挂了,结果发现是别人程序出了问题把内存吃完了,自己程序因为内存不够就挂了

如果你的程序重要性不是特别高的话,公司基本上不可能让你的程序独享一台服务器的,这时候你的服务器就会跟公司其他人的程序共享一台服务器,所以不可避免地就会受到其他程序的干扰,导致自己的程序出现问题。Docker就很好解决了环境隔离的问题,别人程序不会影响到自己的程序。

4. 公司要弄一个活动,可能会有大量的流量进来,公司需要再多部署几十台服务器

在没有Docker的情况下,要在几天内部署几十台服务器,这对运维来说是一件非常折磨人的事,而且每台服务器的环境还不一定一样,就会出现各种问题,最后部署地头皮发麻。用Docker的话,我只需要将程序打包到镜像,你要多少台服务,我就给力跑多少容器,极大地提高了部署效率。

5. 服务上线就要顶的住压力、扛的住考验,不然挨说的还是我们这帮做事的兄弟

老办法是增加服务集群部署,但总归有个上限,利用Traefik+Docker构建可弹性扩展的微服务或服务集群

Docker 与 虚拟机

简单的说,Docker是一个基于进程容器(Processcontainer)的轻量级VM解决方案。大概的示意图如下(左边是传统VM,右边是docker)

传统的虚拟机是虚拟出硬件,然后在虚拟的硬件上安装操作系统及各种上层应用。Docker则是共享操作系统,在操作系统上层虚拟出独立的容器,每个容器是一个独立的沙箱,拥有自己的文件系统及运行时。打个比喻吧,宿主机比成一间房子,虚拟机则是在这间房子里面再用水泥造了一些新的房子,而Docker只是把房子用板子隔离开。这就是所谓的容器技术。

虚拟机核心是模拟硬件,让虚拟机的操作系统以为自己跑在一个真实的物理机器上,用软件模拟出来CPU,内存,硬盘,网卡,让虚拟机里面的操作系统觉得自己是在操作真实的硬件,所以虚拟机里面的CPU啊,内存啊都是假的,都是软件模拟出来的(现在有硬件虚拟化技术了,比纯软件模拟要高级一些,但操作系统不管这些),既然操作系统都骗过去了,当然跑在操作系统上的进程同样也骗过去了呗,所以这些进程都完全感知不到底层硬件的区别,还以为自己很欢乐的跑在一台真实的物理机上了。

和虚拟机一个很明显的区别就是容器其实并没有模拟硬件,还是那个硬件,还是那个操作系统,只不过是在操作系统上做了一点文章,运用 namespace 让进程以为自己运行在了一个全新的操作系统上

容器技术的未来蓝图

Docker 最近几年非常热门,作为新时代的宠儿,Docker本身不止容器技术本身,还有AUFS文件分层技术,还有etcd集群技术,最关键的是docker通过自己的整个生态把容器包裹在里面了,提供了一整套的容器管理套件,这样让容器的使用变得异常简单。一次封装,到处运行,决绝了应用环境的问题

docker is like iframes for linux

-- twitter.com/joevennix

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180126G0E88200?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券