一文读懂Docker及其对系统管理员的重要性

作者 | Damian Perera

编译 | 火火酱,责编 | Carol

出品 | CSDN云计算(ID:CSDNcloud)

自从Docker在2013年初上线以来,就与程序员及系统管理员之间产生了一种爱恨交加的奇妙关系。虽然与我交谈过的一些经验丰富的的开发人员都非常不喜欢容器化(稍后会详细介绍),但是为什么许多大公司,包括eBay、Twitter、Spotify和Lyft在内,都在他们的生产环境中采用了Docker呢?

Docker究竟是做什么的呢?

不知道您是否曾使用过VMware、VirtualBox、Parallels或任何其他的虚拟化软件呢?Docker和这些软件差不多(尽管没有花哨的GUI),它能创建出带有操作系统的虚拟机,并且可以绑定选定的web应用程序及其依赖项。

虚拟机的速度不是很慢吗?

虚拟化推动了云计算革命,我喜欢把Docker称为虚拟化的最后一步,因为实际上,它执行着的正是您开发出来的业务逻辑。

但是,通常意义上真正的虚拟机的速度是很慢的,而且,并不能将Docker所做的工作完全归类于虚拟化。

相反,Docker通过使用runc(由Open Containers Initiative提供维护)在内核(对不同进程命名空间和设备命名空间提供的)支持的基础上建立额外的抽象层,从而能够共享很多主机系统的资源。因为在Docker容器和主机内核之间没有额外的虚拟化层,所以容器能够提供与主机相同的性能。

runc:

https://github.com/opencontainers/runc

Open Containers Initiative:

https://www.opencontainers.org/

完全虚拟化的系统会为其分配自己的资源,并且进行最小化程度的共享(如果需要的话),这会导致更多资源之间的隔离,但系统也会变得需要更多资源——然而,通过Docker,资源的隔离会减少,同时容器也会变得轻量级(需要的资源更少)。

如果您要运行一个需要在保证资源的基础上完全隔离的系统(例如,游戏服务器),那么或许该选择基于KVM或OpenVZ的虚拟机。但是,如果您只是想要将各个进程隔离开来,将其运行在一个大小适中的主机上,同时又不致力于把自己搞破产,那么Docker将会是您的不二选择。

如果您想了解更多关于运行容器化系统的性能方面的信息,可以看看这一篇来自IBM的研究论文:《虚拟机和Linux容器的最新性能比较(An Updated Performance Comparison of Virtual Machines and Linux Containers)》,该论文很好地比较了虚拟机和容器。

论文链接:

http://domino.research.ibm.com/library/cyberdig.nsf/papers/0929052195DD819C85257D2300681E7B/$File/rc25482.pdf

不能直接将应用程序上传到云服务器上吗?

如果不在意基础设施、环境一致性、可扩展性或可用性这类东西的话,是可以这样做的。

设想一下:您管理着12个Java服务,并将它们全部部署到了运行着Ubuntu和Java 8的独立服务器上,以用于开发、质量保证、预发布及生产环境。即使您应用程序的使用程度并不高,也需要管理至少48个服务器(12个服务*4个环境)。

假设现在需要您的团队带头更改策略,将运行环境升级到Java 11。那么您需要登录并手动更新48个服务器。即使是使用Chef或Puppet这类的工具,工作量也非常大。

有什么更简便的解决方案呢?

Docker能够帮助您创建所需操作系统的快照,并只在其上安装所需的依赖项。这样一来,您可以管理或省去所有的“臃肿软件”。您可以最小化安装Linux(我推荐Alpine Linux,但在本文中,我将继续使用Ubuntu),并且只在上面安装Java 8。

在需要更新时,只需要在您Java映像的Dockerfile文件中说明使用Java 11,构建并推送到容器存储库(如Docker Hub或Amazon ECR)中。此后,您只需修改您的应用程序容器基础镜像标签,引用新的快照并重新部署即可。

以下示例罗列了在Ubuntu 18.04最小操作系统之上构建Docker容器的要点:

我将使用标签oracle-jdk-ubuntu-18.04:1.8.0_191来构建此映像并将其推送至Docker Hub账户damian, 然后用它来为我的服务构建另一个容器:

# Instructs Docker to build this container on top of this snapshotFROM damian/oracle-jdk-ubuntu-18.04:1.8.0_191# Copys the application JAR to the containerCOPY build/hello-world.jar hello-world.jar# Executes this command when the container startsCMD java -jar hello-world.jar

现在,如果我需要将服务更新到Java 11,那么需要做的只是:发布安装了兼容JRE的Java快照新版本,在服务容器中的FROM声明中更新标签,令容器使用新的基础映像。完成!接下来,您的所有服务都会随着Ubuntu和Java的更新而更新。

但是这对我的开发来说有什么意义呢?

这是个好问题。

我最近开始在单元测试中使用Docker。假设您有成千上万的测试用例(如果真是这样的话,相信我,我对您的痛苦感同身受),这些用例都连接到一个数据库,其中每个测试类都需要一个数据库的新副本,并且每个测试用例都将对数据执行CRUD操作。

通常来讲,在每次测试之后,都需要使用类似Redgate的Flyway之类的工具来重置数据库,但是这就意味着您的测试必须按顺序运行,该过程会花费很多时间(我见过要因此而花20分钟才能完成的单元测试套件)。

在Docker中,您可以轻松地创建您数据库的映像(我建议使用TestContainers),在容器中为每个测试类运行一个数据库实例,然后并行运行整个测试套件。因为所有测试类都是并行运行的,并且都链接单独的数据库,所以它们都可以同时在同一主机上运行并且快速完成(假设您的CPU能扛住的话)。

我在用Golang编码时也会使用Docker。与其直接在开发机器上安装GO,我更喜欢采用类似于Konstantin Darutkin的方法:通过安装Go和依赖项来维护Dockerfile文件,可以将其配置为在对源文件进行修改时实时重新加载项目。

这样一来,我已经有了自己的项目和Dockerfile版本控制文件,如果我要修改自己的开发机器或将其格式化,我只需要重新安装Docker,从上次停留的地方继续就可以了。

总结

如果您经营着一家初创公司,还没有决定要用什么来支撑您的新技术栈,又或者您是一家成熟的服务提供商,正在考虑将您的产品和非产品环境容器化,但又不敢在“未经测试的”海域上航行,那么可以考虑以下的几个问题。

1、一致性

您可能有整个行业中最棒的一群开发人员,但是在所有这些不同的操作系统中,每个人都有自己喜欢的设置方式。如果您已经用Docker配置了完善的本地环境,那么新开发人员只需安装,用该应用程序生成一个容器,然后启动即可。

2、调试

您可以轻松地隔离并消除整个团队环境中的问题,而无需了解团队成员计算机的设置方式。一个很好的应用实例是:当我们必须通过从ntpd迁移到Chrony来修复服务器上的一些时间同步问题时,我们只需要更新基础映像(不需要通知开发团队)。

3、自动化

目前,包括Jenkins、CircleCI、TravisCI等在内的大部分CI/CD工具都被完全集成到了Docker中,因此您可以轻松地将从一个环境应用到另一个环境。

4、云端支持

要想了解您的服务器和DataDog上运行着什么,就需要持续监视和控制容器。一家云监视公司曾说道:

容器的短寿命和密度增加对基础设施的监控具有重要意义。它们代表需要单独监视的事物数量的数量级增加。

自我管理的云编排工具(例如,Docker Swarm和Kubernetes)以及由供应商管理的工具(例如,AWS的Elastic Container Service和Google Kubernetes Engine)提供了针对这一问题的解决方案,这些工具可以监视和管理容器集群和调度。

随着Docker的广泛使用以及与AWS和Google Cloud等云服务提供商的紧密集成,Docker正在迅速成为处理您新应用程序或现有应用程序的明智之选。

原文:https://hackernoon.com/an-introduction-to-docker-and-how-it-is-important-for-sysadmins-9ai83awo

本文为CSDN 云计算翻译,未经授权请勿转载。

技术战“疫”,贾扬清、李飞飞要给程序员直播讲AI技术!

2月18日、2月20日,阿里云CIO学院攻“疫”技术课程正式开启。您将获得与达摩院数据库首席科学家、阿里巴巴集团副总裁、ACM 杰出科学家李飞飞,Caffe之父、ONNX创始人、阿里巴巴集团副总裁贾扬清,阿里巴巴集团副总裁、阿里 CIO 学院院长胡臣杰等顶级技术专家直播互动的机会。

推荐阅读:别再用那些已经淘汰的技术了!2020 年 9 大顶级 Java 框架出炉!!
Linux系统常用指令总结
读源码,对开发者重要吗?
链游真的能赚钱吗?我肝了3款链游终于找到了答案
再见 NoSQL!
超赞的PyTorch资源大列表,GitHub标星9k+,中文版也上线了
真香,朕在看了!点击“阅读原文”,即可报名

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/519175.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

主流微服务注册中心浅析和对比

开源产品受开发者热捧,是因为其代码透明、可以参与共建、有社区进行交流和学习,当然更重要的是开源产品的接入成本低。个人开发者或者中小型公司往往会将开源产品作为选型首选。 开发者通过阅读源代码,理解产品的功能设计和架构设计&#xf…

linux内核重要结构体,Linux中list_head结构体相关 | 技术部落

在Linux内核中,提供了一个用来创建双向循环链表的结构 list_head。虽然linux内核是用C语言写的,但是list_head的引入,使得内核数据结构也可以拥有面向对象的特性,通过使用操作list_head 的通用接口很容易实现代码的重用&#xff0…

Java老矣,尚能饭否?2020 Java生态系统报告出炉

最近,Jrebel公布了一份2020 Java生态系统报告,这份报告主要关注开发人员在开发过程中使用的技术。这份报告包含了技术人员正在用的编程语言、应用程序架构、应用服务器、运行时平台、框架技术、IDE、JRE/JDK版本、数据库、部署模型、构建工具和虚拟化工具…

AI评委引热议,阿里巴巴表示:AI不会取代工程师

昨日,一位能给工程师代码打分的“AI评委”引发了热议。起因是在2019阿里巴巴“83行代码挑战赛”决赛现场,一位运行在云端的AI评委和现场的专家评委、大众评委配合,一起对选手提交的的代码做综合评价。 “AI是否会取代工程师”的话题再次在网络…

windows2012运行linux,Linux一分钟部署完毕上线运行,windows server你要折磨我两天?...

原标题:Linux一分钟部署完毕上线运行,windows server你要折磨我两天?周四晚上好,各位~~经过数度折腾之后,终于对windows累觉不爱了。且不说点点点的弊端,浪费鼠标左右键的机械力,还有无数个需要…

使用DataWorks来调度AnalyticDB任务

DataWorks作为阿里云上广受欢迎的大数据开发调度服务,最近加入了对于AnalyticDB的支持,意味着所有的AnalyticDB客户可以获得任务开发、任务依赖关系管理、任务调度、任务运维等等全方位强大的能力,现在就给大家仔细介绍下如何使用DataWorks来…

稳定、可扩展、模块化、简化部署过程、版本控制……一文看懂 Kubernetes 到底如何运用!...

来源 | Daniele Fontani编译 | 火火酱,责编 | Carol出品 | CSDN云计算(ID:CSDNcloud)说实话,我是个Kubernetes爱好者。Kubernetes是软件开发的重要一步。当我遇到它时,我就想:“这就是将容器融入…

提升不止一点点,Dubbo 3.0 预览版详细解读

Dubbo 自 2011 年 10 月 27 日开源后,已被许多非阿里系的公司使用,其中既有当当网、网易考拉等互联网公司,也不乏中国人寿、青岛海尔等大型传统企业。更多用户信息,可以访问Dubbo GitHub,issue#1012: Wanted: whos usi…

Jenkins Tutorial

什么是Jenkins Jenkins是一个自动化平台,它允许你使用pipelines去部署应用。它也可以自动化其他任务。 BUILDTESTDEPLOYMENT Jenkins 架构 首先,你拥有一个Master Server,它控制pipelines和安排Build到你的Agent上; 其次&…

阿里云首次在ASPLOS'19发布重磅论文:揭秘帮助ECS快速迭代的热升级技术

第24届ACM编程语言和操作系统(ASPLOS19),于2019年4月13日至17日,在普罗维登斯召开,阿里云高级技术专家郑晓代表团队在会上发表了技术报告。 论文主题为《Fast and Scalable VMM Live Upgrade in Large Cloud Infrastr…

痛!做C#半年,挣的不如做AI1个月?”看到第二句泪目……

前段时间在网上发现一个热门话题:“做开发一年,在北京月薪不到1万,有点迷茫。” 其中,这个回答我永远忘不了:来源:库库的派派知乎回答,已取得授权在这短短的一条信息里,小编佩服不…

联想电脑u盘安装Linux,如何使用u盘安装linux系统

ps: 请注意,硬盘不是软盘7. 选择您的U盘作为硬盘驱动器,然后写入usb hdd 8. 点击[写]三,安装系统1. 将U盘插入计算机2. 启动计算机并按住[F2]进入BIOS以修改第一个启动项3. 选择U盘后,跳转到以下界面4. 按键盘键进入第二个“测试…

源码|详解分布式事务之 Seata-Client 原理及流程

前言 在分布式系统中,分布式事务是一个必须要解决的问题,目前使用较多的是最终一致性方案。自年初阿里开源了Fescar(四月初更名为Seata)后,该项目受到了极大的关注,目前已接近 8000 Star。Seata 以高性能和…

SonarQube中配置c语言/c++语言代码规则插件

文章目录一、下载安装重新启动1. 下载文件2.安装3. 重新启动SonarQube4. SonarQube管控台验证二、SonarQube管控台配置2.1. 创建配置模板2.2. 添加规则2.3. 查看配置模板规则列表2.4. 修改默认语言规则应用2.5. C配置流程同上我是java出身,因为特殊需要,要用sonarqube做一套c代…

从虚拟化前端Bug学习分析Kernel Dump

前言 也许大家都知道,分析 Kernel Dump 有个常用的工具叫 Crash,在我刚开始学习分析 Kernel Dump 的时候,总是花大量的时间折腾这个工具的用法,却总是记不住这个工具的功能。后来有一次在参加某次内部分享的时候,有位…

Apache Shiro RememberMe 1.2.4 反序列化过程命令执行漏洞【原理扫描】

文章目录一、分析定位1. 漏洞描述2. 项目引发漏洞简述二、 若依系统2.1. 版本升级2.2. 配置文件2.3. 推荐做法2.4. 栗子2.5. 项目场景三、Gus系统3.1. shiro版本升级3.2. 调用重新生成3.3. 生成工具类shiro漏洞补充:一、分析定位 1. 漏洞描述 目前厂商已经发布了新…

Linux系统json文件打中文,如何在 Linux 终端上漂亮地打印 JSON 文件

JSON 文件非常棒,因为它们以人类可读的格式存储数据集合。然而,如果 JSON 文件被最小化过,那么阅读 JSON 文件可能会很痛苦。• 来源:linux.cn • 作者:Abhishek Prakash • 译者:geekpi •(本文字数&#…

超级干货!31 条2020 年最新版 ZooKeeper面试题,先收藏再看!| 博文精选

作者| ThinkWon责编 | Carol出品 | CSDN云计算(ID:CSDNcloud)金三银四,虽然受疫情影响,大多数企业还未正式复工,但没有条件,创造条件也要上,许多企业已经开始物色合适的人才了&#…

Node.js 应用故障排查手册 —— 雪崩型内存泄漏问题

楔子 实践篇一中我们也看到了一个比较典型的由于开发者不当使用第三方库,而且在配置信息中携带了三方库本身使用不到的信息,导致了内存泄漏的案例,实际上类似这种相对缓慢的 Node.js 应用内存泄漏问题我们总是可以在合适的机会抓取堆快照进行…

检测到远端X服务正在运行中

文章目录一、 漏洞详情二、 解决方案2.1. 方案1(推荐使用)2.2. 方案2一、 漏洞详情 二、 解决方案 2.1. 方案1(推荐使用) 既然漏洞是6000端口导致的,首先要分析linux6000端口是谁在用呢、又和什么程序有关?如果没有用直接关掉6000端口即可,…