首页 文章 精选 留言 我的

精选列表

搜索[首次公开募股],共10002篇文章
优秀的个人博客,低调大师

首次 OpenChain 中国活动,从 Patrick 代行 GPL 执法案讲起

9 月 25 日,第一次OpenChainChinaWorkshop 在深圳举行。 OpenChain 是 Linux 基金会下的一个项目,它制定了一系列标准规范,这些规范和条例包含一系列管理流程,用来帮助各种规模的组织更高效地解决他们的开源许可证一致性问题。通过统一的 OpenChain 规范,开源许可证的一致性将变得更加可预测和易于理解,参与者可以更有效地参与到软件供应链中。 OpenChain 项目目前已有多位白金会员,包括 Adobe、ARM、谷歌、Cisco、微软与 GitHub 等。 通俗地来说,OpenChain 项目可以理解为,它统一了一套在整个开源软件供应链上的认证标准,加入的供应商及其项目都需要经过合规认定,之后大家在 OpenChain 这么一个统一的框架下,就不需要再担心开源供应链上关于开源许可的相关问题。而这也就是为什么当天参加会议的大多是各个公司的法务与知识产权相关的代表。此外,OpenChain 还通过一套程序将这个认证过程简化了。 开源软件合规无法由一个人单独完成 其实不仅是国内,目前整个开源界对于这个问题的探讨都处在早期阶段,这其实涉及到开源软件专利问题,这里也不得不提一下相关项目 OIN(Open Invention Network)。 OIN 是一个共享的防御性专利池,旨在保护 Linux 及其相关的开源项目。OIN 已经拥有多个行业领导者支持,包括谷歌、IBM、NEC、飞利浦、红帽、索尼、SUSE 和丰田等。任何从事 Linux、GNU、Android 或其它Linux 相关的软件开发的公司、项目或开发者都可以加入 OIN,通过交叉许可而免费获得数千项专利或版权。 可以简单理解为 OIN 项目主要针对开源软件(并以 Linux 为基础),比如它定义了一个集成了各种软件专利认证的 Linux 操作系统是怎么样的,这可以结合微软之前开放 exFAT到 Linux 内核时所做的承诺来理解:微软同时也宣布支持在未来OIN 的 Linux 系统定义版本中最终包含具有 exFAT 支持的 Linux 内核;而 OpenChain 项目主要面向的是公司层面。 为什么 OpenChain 与 OIN 都关注到开源软件专利相关的问题呢,从会上多次被提到的Patrick McHardy 案例可以大概看得出来。 Patrick McHardy 是 Netfilter 核心开发团队的前负责人,Netfilter 是Linux 内核的一个实用网络工具,在 Linux 内核中占有比较重要的地位。来自 Linux 基金会的 OpenChain 项目总经理ShaneCoughlan 介绍,Patrick 通过给全球各个国家(包括中国)使用到 Linux(也就是使用到了Netfilter)的公司发送邮件,以他们项目没有遵守 GPL(Linux 内核采用的开源许可协议)为由索要小额金钱,但这并不是 Linux 的主张,据介绍,Patrick 此前已经通过这种方式获得了数百万欧元。Patrick 被称为“自行担负起GPL 执法的角色”与“开源专利流氓”,同时他的索要方式也在不断演化。 虽然开源社区对如何以最好的方式来推动公司遵守 GPL 条款也有许多苦恼(公司没有正确采用 GPL 协议本身就是不对的),但是像 Linux 大多数人认为这种维权应该是非正式的,也就是不应该通过诉讼,并且主要的目的也应该是告知合规,而不是为了惩罚企业。Patrick 的方式之所以能够奏效,主要也是因为这种机制里边存在着过多的“道德因素”,没有强制效力;并且由于像 Linux 内核这样的大型项目,它的所有权通常是分散在不同开发者手里,那么这些个体所有者就可以采取不符合社区整体目标的维权行动,Patrick 就是以一人的想法代替了整个 Linux 内核在进行所谓的维权(当然了,Linux 社区唾弃他)。 所以我们可以看到开源软件会在运作中产生这样那样的专利许可等问题,并且对于整个软件供应链会造成严重的破坏,OpenChain 与 OIN 可能就是行之有效的解决方案。 回到此次 OpenChain 会议上,会上大家还讨论了当前中国公司在开源方面面临的一些问题与挑战,特别是关乎到整个开源软件供应链上的问题,诸如目前没有便捷的机制去把控公司使用到的开源项目的合规性,比如从 npm 或者 Maven 等软件平台上下载一个项目,这些项目虽然声明了采用某某开源协议,但是当你只想要快速、简单地使用它提供的二进制包时,那这种时候,怎么去确认它的协议合规性呢?同时项目下又可能会依赖许多其它的项目,这又使同一个问题更加复杂;又比如有人提出源代码继承问题,比如开源贡献者死亡,那么他所写的代码的继承如何处理? 目前 OpenChain 相关活动已经在日本与韩国等地展开,中国这还是第一场线下活动。开源软件供应链上的相关问题虽然棘手,但是现场Shane 与 OIN 首席执行官 KeithBergelt 都认为接下来的 5 年内,中国在这一方面的建设将会跑在世界前列。 关于 OpenChain 的更多信息查看官网: https://www.openchainproject.org

优秀的个人博客,低调大师

首次发现在例程中使用日语命名的编程书籍

初めてのJavaScript 第3版 -- ES2015以降の最新ウェブ開発. 示例代码: class Person { constructor(name) { this.name = name; this.id = Person.nextId++; } } Person.nextId = 0; const 一郎 = new Person("一郎"), /* id 0 */ 次郎 = new Person("次郎"), /* id 1 */ 三郎 = new Person("三郎"), /* id 2 */ 四郎 = new Person("四郎"); /* id 3 */ const arr = [一郎, 次郎, 三郎, 四郎]; /* 1. IDを使って直接比較 */ console.log(arr.find(p => p.id === 三郎.id)); // Person { name: '三郎', id: 2 } /* 2. thisを利用。thisを定数「三郎」に指定 */ console.log(arr.find(function(p) {return p.id === this.id}, 三郎)); // Person { name: '三郎', id: 2 } /* アロー関数ではthisは「語彙的に(lexically)」に束縛される(6章参照) */ console.log(arr.find(p => p.id === this.id, 三郎)); // undefined 译者对采用日语命名的缘由在此阐述初めてのJavaScript 第3版 -- ES2015以降の最新ウェブ開発(2016年12月): 翻訳の過程で、一部の例を日本語の識別子(変数名や関数名など)を使って書いてみましたが、「日本語で関数名や変数名を考えるのはとても楽だなあ」と感じました。英語を仕事で毎日使っている私でもそうなのですから、普通の方ならなおさらでしょう。コメントと識別子の区別がつきにくいなど、慣れないと少し読みにくい印象はありますが、特に書く際の負担はだいぶ減るように感じます。また、たとえば単数形のbookで、値をひとつ記憶する変数、複数形のbooksで配列を表すといった手法が日本語では使えないなど、日本語独特の工夫が必要になる場面があるかもしれません(一部の例では「本」と「本_配列」のようにしてみましたが)。これからは、日本国内をターゲットにした開発では徐々に日本語識別子が使われることになるのでしょう。英語の本を読むよりも、日本語にていねいに翻訳された本を読むほうが理解がずっと早いのと同じです。 倚靠在线翻译, 大致意思如下, 如有出入请指教: 日语命名函数/变量对常人更易理解, 即使译者在日常工作中使用英语仍是如此 虽然使用日语命名导致注释和实际代码行有些难以区分(日文注释+英文代码会比较显眼), 但译者编写时更容易 <--这里不大确定含义 有时单复数难以在日语中表达, 此时还是沿用英文命名 -- 中文命名也有类似情况, 之前的探讨: 中文命名的特定问题, 相关风格及规范 · Issue #45 · program-in-chinese/overview, 在代码中进行中文命名(类/变量/方法等)的优势 最后提到(粗体部分): 对面向日本国内的软件开发, 将会逐渐普及使用日语命名. 阅读使用日语命名的编程书籍会比英文原版更容易理解. -- 听起来似乎是有某些日本的业内推动力量, 值得深入发掘一下. 补译者 武舎 広幸 Hiroyuki Takeba 简历(机翻): 出生于长野县上田市。他在东京工业大学,科学技术研究生院,国际基督教大学,山梨大学研究生院,俄亥俄州立大学研究生院,卡内基梅隆大学机器翻译中心等完成博士课程。作为Merlin Arms Co.,Ltd。(http://www.marlin-arms.co.jp)的代表董事,他从事与计算机和自然科学,软件开发(翻译软件等),软件项目管理,在线翻译课程(http://www.dhc-online.com)相关的翻译和写作。和字典网站(http://www.dictjuggler.net) 另外, 看来日语命名在日本开发者中也是有阻力的, 日本語識別子(変数名や関数名)を好まれない方がいらっしゃるようですので - "似乎有些人不喜欢日语标识符(变量名和函数名)"(在初めてのJavaScript 第3版 -- ES2015以降の最新ウェブ開発). 确实在Amazon上有一星抱怨日语命名的, 但感觉并没什么说服力. 无论如何, 日本编程书籍出版商在推广母语命名上先行一步了. 期待中文示例代码的编程书籍早日面世. 源讨论帖在: 索引: 用中文代码作示例的编程教程 · Issue #5 · program-in-chinese/overview 2018-11补: 译者发消息, 重印(第四次印刷)已经确定. 另外, 经告知之前有一本"我的第一本编程书"日文编程书的中译本中使用了中文命名的示例代码, 但因为偏算法, 个人感觉母语命名的优势不是特别明显. 2019-2-16补: 发现2003年的日文论坛提到, 2003年出版的"MYSQL徹底活用(翔泳社-初版)"一书中(貌似MySQL徹底活用―SQL言語+サーバアプリケーション+管理者編 データベースの本), 使用了日文命名的示例代码: CREATE TABLE 社員 ( 社員番号 INT NOT NULL, 氏名 CHAR(20) NOT NULL, 性別 ENUM(`男`,`女`) NOT NULL, 部署コード INT NOT NULL, 入社年度 year NOT NULL, MAIL CHAR(40) NOT NULL, INDEX (社員番号), INDEX (氏名) ); 2018-10-18

优秀的个人博客,低调大师

首次使用 linux 阿里云服务器,入门及使用

上午编辑的文章 下午更新下 安装环境 因为服务器默认 linux 系统,所以这里讲怎么配置 linux 云服务环境。 我第一次使用的时候,还以为是要去安装一个界面化桌面,以便我这个命令小白可以操作。但是,对于只有2G 的内存来说安装了之后将会很卡很卡。后来我问学长,他说不要安装界面化,使用命令就好了。 首先关于远程服务器的登录入口, 默认系统的用户名是 root, 然后登录密码可以在控制台进行修改。如下图点击重置密码。 重置之后,然后点击远程连接,就可以连接登录到你的服务器上了。这里要将一点,如果你是 mac 电脑的话,可以在你的电脑上通过 ssh 登录到你的服务器。 命令如下: ssh root@你的公网IP,比如 ssh root@120.78.32.12 然后输入密码即可连接成功。 接下来在终端中输入命令。配置环境。如果你是配置 j

优秀的个人博客,低调大师

TIOBE 6 月编程语言榜:TypeScript 首次跻身前100

TIOBE 公布了 6 月编程语言指数排名榜,此次榜单的焦点在于 TypeScript 成功跻身前100名,以及 C 语言指数再度暴涨。 TypeScript 语言已经被 TIOBE 追踪了好几年,作为微软推出的 JavaScript 增加版,尽管它在业界的知名度很高,但是从未进入前100名。本月 TypeScript 终于进入了 TIOBE 指数排名前100,居第93位,相反,JavaScript 下降了一位,排到第8。TypeScript 是 JavaScript 的一个严格超集,它为 JavaScript 增加了很多额外的类型安全,前景是被看好的。 C 语言的指数还是一路上涨,继上个月上涨7个百分点后,本月涨幅更是达到了8.09%,在整个榜单中格外显眼。目前 TIOBE 榜单中排名第一的依旧是Java,但是领榜15.368%的指数与第2名C 的14.936%相差已经不多了,如果 C 再按照这样疯狂的增长速度向上,那下个月的头把交椅可能就让C 拿了。 而上个月强势杀入前20名的 Scala 在6月份又下降了3位,退出20名行列,排到23。 6月榜单前20名语言如下: 需要注意的是,SQL自 2018 年 2 月起被重新添加到了 TIOBE 排行榜中,由于没有以往的数据可以对比,所以会给人 SQL 语言指数突然暴涨的错觉。 Top 10编程语言TIOBE指数走势(2002-2018) 可以看到 C 语言的黑线在一路上扬,差不多与 Java 相交了。 其他编程语言排名 第 21-50 名如下: 第 51-100 名如下,由于它们之间的数值差异较小,仅以文本形式列出(按字母排序): (Visual) FoxPro, 4th Dimension/4D, APL, AutoLISP, Bourne shell, C shell, CFML, CL (OS/400), Clipper, Common Lisp, Crystal, Elixir, Elm, Euphoria, F#, Forth, Groovy, Hack, Haskell, Icon, Inform, Io, J, Korn shell, ML, Monkey, MQL4, NATURAL, NXT-G, OCaml, OpenEdge ABL, Oz, PL/I, PostScript, PowerShell, Q, RPG, S-PLUS, Scheme, Simulink, Smalltalk, Solidity, SPARK, SPSS, Standard ML, Stata, Tcl, TypeScript, Verilog, VHDL 历史排名(1988-2018/每5年) 以下排名位次取决于 12 个月的平均值: 编程语言名人堂 历届“年度编程语言”获奖名单如下图所示,该奖项授予一年中评分最高的编程语言: 详细榜单信息可以查看 TIOBE 官网。 你用什么编程语言?

优秀的个人博客,低调大师

快递老大顺丰,首次披露自己的技术“护城河”

划重点: 顺丰上半年营收321.61亿,雷锋网对比发现比申通、韵达、中通、圆通四家上半年累计总营收多85亿,顺丰交出了一份漂亮的成绩单。 2017年上半年顺丰净利润为18.84亿元,同比增长7.31%,与此同时,2017年上半年圆通同比增速为6.29%,中通同比增速为59.48%,韵达同比增速为41.13%,申通同比增长7.31%。 顺丰的营收一路高歌,始终稳居快递行业的龙头老大,但是其净利润增长却落后于圆通、中通、韵达,与申通持平。此外,雷锋网(公众号:雷锋网)整理2016年三通一达和顺丰最新18个月的数据,其中顺丰的净利润增幅变化幅度是最大的。方方面面的考虑之下,加码科技似乎不二的选择,事实上顺丰亦大手笔地进行技术技术力量的投入。 顺丰也在上半年中,前所未有地披露自己在科技力量上投入,雷锋网进行了综合的筛选、删减、梳理出顺丰在技术上的

优秀的个人博客,低调大师

iOS: 首次使用App时,显示半透明新手指引

在很多的app,我们都会发现这样一个功能:就是app启动后进入主界面时,会有一个半透明的指引图,它会提示用户如何一步步进行操作,快速的熟悉app的使用规则,极大地方便了用户的使用,也加快了app的推广,优点不言而喻。 我主要介绍一下思路: 首先创建一个半透明的蒙版覆盖在当前整个屏幕上,然后用贝塞尔曲线绘制白色的提示框(矩形或者圆形),接着给出带箭头图标的文字提示,也即在蒙版上添加自定义的子视图控件。当然,最后给整个蒙版添加一个触摸手势,只要轻轻点击就移除蒙版、子视图、手势,恢复正常界面。 注意:新手引导只需要出现一次就够了,可以通过偏好设置来控制器只出现一次。 演示截图如下: 出现指引 点击指引消失,按照提示操作 代码如下: 颜色宏定义 // 颜色RGB #define XYQColorRGB(r, g, b) [UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b)/255.0 alpha:1.0] #define XYQColorRGBA(r, g, b, a) [UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b)/255.0 alpha:a] 新手指引 #pragma mark - 新手引导 - (void)newUserGuide { // 这里创建指引在这个视图在window上(蒙版、手势) CGRect frame = [UIScreen mainScreen].bounds; UIView * bgView = [[UIView alloc]initWithFrame:frame]; bgView.backgroundColor = XYQColorRGBA(50, 50, 50, 0.8); UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(sureTapClick:)]; [bgView addGestureRecognizer:tap]; //添加子视图控件 UILabel *textLabel = [[UILabel alloc]initWithFrame:CGRectMake(5, 320, frame.size.width-10, 50)]; textLabel.backgroundColor = [UIColor clearColor]; textLabel.text = @"“点击直接聊天,向左侧滑看报告、删除”"; textLabel.textColor = [UIColor whiteColor]; textLabel.textAlignment = NSTextAlignmentCenter; textLabel.font = fontSize_16; [bgView addSubview:textLabel]; UIImageView * imageView = [[UIImageView alloc]initWithFrame:CGRectMake(frame.size.width/2-30,115,100, 200)];; imageView.image = [UIImage imageNamed:@"CouponBoard_guid"]; [bgView addSubview:imageView]; [[UIApplication sharedApplication].keyWindow addSubview:bgView]; //create path 重点来了(这里需要添加第一个路径) UIBezierPath *path = [UIBezierPath bezierPathWithRect:frame]; // 这里添加第二个路径 (这个是矩形) [path appendPath:[[UIBezierPath bezierPathWithRoundedRect:CGRectMake(5, 64, frame.size.width-10, 50) cornerRadius:8] bezierPathByReversingPath]]; //渲染 CAShapeLayer *shapeLayer = [CAShapeLayer layer]; shapeLayer.path = path.CGPath; [bgView.layer setMask:shapeLayer]; } /** * 新手指引确定 */ - (void)sureTapClick:(UITapGestureRecognizer *)tap { UIView *guidevView = tap.view; [guidevView removeFromSuperview]; //移除蒙版 [guidevView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];//移除所有子视图 [guidevView removeGestureRecognizer:tap]; //移除手势 } 参考资料: http://www.jianshu.com/p/00d4fe5a3c1a http://www.jianshu.com/p/b83aefdc9519 欢迎关注我的github:https://github.com/xiayuanquan 程序猿神奇的手,每时每刻,这双手都在改变着世界的交互方式! 本文转自当天真遇到现实博客园博客,原文链接:http://www.cnblogs.com/XYQ-208910/p/5714352.html ,如需转载请自行联系原作者

优秀的个人博客,低调大师

自研薪酬管理系统首次曝光

作者:墨逐 人力资源管理系统是用集中的数据将几乎所有的人力资源相关的信息(组织、招聘、薪资、绩效、审批等)统一管理起来,是企业运行必不可少的管理软件。国际上知名的有Oracle PeopleSoft、SAP 和Workday HCM,世界500强公司有超过一半都在使用。国内金蝶和用友在eHR领域也有着多年的技术积累。 阿里巴巴早在06年就启用了Oracle PeopleSoft HCM 系统,是国内最早一批引进世界先进人力资源管理软件的企业之一。PeopleSoft HCM的上线为阿里带来了先进的人力和组织管理能力,支撑阿里业务和人员规模在过去这十年中成倍扩张。 如今,阿里巴巴快速成长已涵盖数十家生态公司、覆盖24个国家/地区、数万名员工,上线十年的PeopleSoft HCM在功能模块、用户体验、系统开放集成等方面已经不能满足业

优秀的个人博客,低调大师

CISA 公开“下一代恶意软件”分析系统

美国网络安全和基础设施安全局 (CISA) 宣布推出新版本的恶意软件分析系统,名为 Malware Next-Gen(下一代恶意软件),使得公众可以提交恶意软件样本和其他可疑工件以供 CISA 分析。 “Malware Next-Gen 使 CISA 能够通过自动分析新识别的恶意软件并增强网络防御工作,来更有效地支持我们的合作伙伴。” Malware Next-Gen 是一个恶意软件分析平台,用于检查恶意软件样本中是否存在可疑工件。它最初的设计目的是允许美国联邦、州、地方、部落和地区政府机构提交可疑文件并通过静态和动态分析工具接收自动恶意软件分析。 Malware Next-Gen 旨在通过在可扩展平台上提供先进可靠的分析来处理日益增长的网络威胁分析工作量,该平台具有多级遏制功能,可自动分析潜在的恶意文件或 URL。 CISA 网络安全执行助理主任 Eric Goldstein 称,Malware Next-Gen 是 CISA 致力于加强美国国家网络安全的一次重大飞跃。​​​​​​​“我们的新自动化系统使 CISA 的网络安全威胁狩猎分析师能够更好地分析、关联和丰富数据,并与合作伙伴分享网络威胁见解。它促进并支持对不断变化的网络威胁做出快速有效的反应,最终保障关键系统和基础设施的安全。” 自 2023 年 11 月以来,Malware Next-Gen 已面向有限数量的政府组织提供,并从近 400 名注册用户的 1600 个提交内容中识别出 200 个可疑或恶意文件和 URL。 CISA 鼓励所有组织、安全研究人员和个人注册并向平台提交可疑文件进行分析,这需要使用login.gov 帐户注册。提交的文件将在安全环境中结合静态和动态分析工具进行分析,结果以 PDF 和 STIX 2.1 格式提供。 对于那些希望保持匿名的人,还可以选择通过此门户网站为未注册用户提交恶意软件样本,但分析结果不会提供给他们。只有 CISA 分析师和其他经过审查的人员才能访问系统生成的恶意软件分析报告。 CISA 还警告用户不要试图滥用该系统,放弃任何隐私期望,并确保他们在平台上提交的信息不包含机密数据。

优秀的个人博客,低调大师

【公开课】Kubernetes 入门——深入浅出讲 Docker

【百度云原生导读】Kubernetes 简称 K8S,是一个开源的用于管理云平台中多个主机上的容器化的应用,让部署容器化的应用简单并且高效,Kubernetes 提供了一种应用部署、规划、更新、维护的机制。 本文是基于『云原生基础知识概述及实践』系列视频课程——『Kubernetes 入门—深入浅出讲 Docker』进行的文字梳理,视频课程: https://www.bilibili.com/video/BV19f4y1z7LR 本节课作为 K8S 入门基础课第一期,将介绍一种虚拟环境容器:Docker。 主要包括以下三大部分: 第一:容器化的简介和发展历程——主要介绍虚拟化、容器化的概念和发展历程,让同学们对 Docker 有一个宏观的认识 第二:Docker 容器的基本使用和镜像制作——了解 Docker 容器的基本使用后,还会通过实践学习到:如何启动一个 Docker 镜像,如何构建自己的 Docker 镜像,如何对镜像进行 Debug。 第三:Docker 底层核心技术——加深对 Docker 的理解。 1. 容器化的简介和发展历程 1.1 虚拟化技术介绍 简单来说,Docker 是一种虚拟化技术,虚拟化技术可以分至少3种。 第一种:硬件虚拟化,这是底层的技术实现。 第二种:软件虚拟化,比如常见的虚拟机。 第三种:就是我们今天所介绍的,容器虚拟化技术。 通俗地讲,虚拟化技术就是多个人,通过一种技术协作使用一台电脑来工作,使得每个人都觉得如同在自己的电脑上工作一样互不干扰。 为了更好的了解这三种虚拟化技术的运行机制,我们对比一下物理机、虚拟机、Docker 系统运行栈。 可以看到,无论是哪一种虚拟化技术,都是多层的。其中,蓝色部分是底层实现,黄色的部分是操作系统及以上的软件层面上的实现。层数越多,运行的开销就会更大。 物理机的系统运行栈分析: 第一层 Infrastructure:基础架构层 第二层 Host OS:操作系统层 第三层:二进制/依赖库 第四层:应用程序 虚拟机的系统运行栈分析: 底层实现上,虚拟机比物理机多了一层 Hypervisor。这是一个常用的硬件虚拟化软件,可以把底层的操作系统抽象出多个底层的硬件接口。 而在操作系统及以上的软件层面实现上,被分成了3个并行执行的虚拟机,而每一个并行运行的虚拟机和物理机相比,又多了一层 Guest OS,也就是每个虚拟机还要运行自己的操作系统,这是和物理机的一个比较大的区别。 Docker 的系统运行栈分析: 和虚拟机的结构相似,Docker 也被分为了若干个“容器”。但是和虚拟机相比,少了一层。可以直观的感受到,Docker 的运行效率要比虚拟机要高。 互联网常面临一个场景:爆发式的流量增长。在这种情况下,效率一定是第一位的。 针对以上三种虚拟化技术,从他们的部署、运行时间上,也可以对他们的运行效率简单对比: 物理机的部署,时间周期大概是以月为计算。包括建设机房,建设机架,部署机器,部署网络,部署机器的操作系统等,整个的部署周期十分长。 虚拟机:在购买之后几分钟,1个虚拟机就能创建完了。 Docker : Docker 的启动是秒级的。 从部署、运行时间上,可以看到 Docker 的效率十分高。 1.2 容器化发展简史介绍 容器化技术其实不是一个新颖的技术,早在1978年,就有对容器化的探索。下图可以清楚的看到容器化技术的简史: 1.3认识Docker 集装箱的出现改变了运输业,Docker 之于计算机行业,好比集装箱之于运输业。 2013年,Docker 对外开源,2014年6月9日正式发布,从 Docker 0.1到 Docker 1.0 短短15个月的时间,风靡全球。2017年正式宣布拥抱 K8S, 这标志着“容器管理系统之争”结束。 Docker 为什么可以广受接纳,有如下几个优势: a. 持续部署与测试的一致性 Docker 能够保持容器内部所有的配置和依赖关系始终不变。你可以从开发到产品发布的整个过程中使用相同的容器来确保没有任何差异或者人工干预。 b. 多云平台兼容 可移植性好,可以在任何拥有 Docker runtime 的环境快速部署。例如 AWS GCP BCE Azure aliyun 都支持 docker,没有迁移的成本。 c. 环境标准化和版本控制 设想某次发布因为完成一个组件的升级而导致你整个环境都损坏了,Docker 可以在几分钟内轻松地滚回到这个镜像的前一个版本。 d. 隔离性 Docker 可以确保你的应用程序与资源是分隔开的。例如依赖多个不同版本的 tomcat 的时候不会因为依赖冲突导致崩溃。同时 Docker 还能确保每个容器只使用分配给它的额定资源,不会因为某个进程影响其他容器。 e. 安全性 由于 Docker 容器是隔离的,并且资源是受限制的。所以即使你其中一个应用程序被黑,也不会影响运行在其它 Docker 容器上的应用程序。 总结起来,Docker 的优点可以概括为以下三句话: 1. 一处成功,处处成功。 横跨开发、测试、部署环境 也不用管是在实体机、虚拟机、还是在某个云上 2. 高度集成,高度一致,使用方便 创建和部署十分便捷,效率极高 流水线作业,持续构建发布(CI/CD) 3. 结合微服务,大大提升工程研发效率 App 相互隔离,解耦依赖关系,方便弹性扩展 有安全保证,接入无负担 2.Docker 容器的基本使用和镜像操作 第一部分我们对 Docker 容器有一个基本的认识。这一部分,我们将通过一些实际的演练和操作,让大家掌握 Docker 容器的基本使用和镜像操作。在这一部分正式开展前,简单“扫盲”。科普一下 Docker 里的常用名词、Docker 的环境安装及 Docker 架构。 常用名词 Docker 镜像:Docker images Docker 仓库:Docker repository Docker 容器:Docker containers Docker 宿主机:Docker host Docker守护进程:Docker daemon Docker客户端:Docker client Docker 环境安装 Centos 系统环境安装 Docker: curl-fsSL https://get.docker.com | bash-s docker OSX 系统安装 Docker: https://hub.docker.com/editions/community/docker-ce-desktop-mac Windows 系统安装D ocker: https://hub.docker.com/editions/community/docker-ce-desktop-windows 目前来说,除了 Linux 系统可以直接运行 Docker之外,其他系统都是基于虚拟机运行的。 Docker 的架构:C/S模型 Client: 与 Docker 通信的一个组件,也就是客户端。 Docker daemon : 相当于守护进程,也就是 docker 的 Server,他执行的结果是 Containers (容器) Images: 镜像。镜像和容器之间的关系。运行起来的镜像就是一个容器。 Registry: 仓库。仓库具体存放的是镜像。 2.1 Docker 核心概念和使用 Docker repository 镜像仓库 镜像仓库是集中存放管理镜像的地方。仓库有分为公有仓库(DockerHub、DockerPool)和私有仓库。有了镜像仓库,用户可以用它来: 中心化的仓库,提供上传/下载 镜像的能力。 管理仓库中的镜像,大多数仓库都提供检索和版本整理能力。 DockerHub 是 Docker 官方提供的公共仓库,可以检索官方镜像,除此之外还有很多私有 registry,例如 BCE,也可以自己动手搭建自己的 Docker image repository。 Docker Hub 地址:https://hub.docker.com DockerFile: 构建 Docker 镜像的源代码 Dockerfile 是用于生成 image 的源文件,源代码像编程一样,有自己的语法,编译方式,Dockerfile 也有自己的语法,提供一个简单的 Dockerfile 源文件地址,大家可以参考学习一下 https://github.com/docker-library/hello-world/blob/master/amd64/hello-world/Dockerfile 以下是一些例子: -FROM 基于已有的 Docker image 来生成 例如:FROM tomcat:8.0(含义:用 tomcat 这个镜像的8.0版本做为我们的基础镜像,然后将现有的镜像叠在该镜像之上) -COPY 把用户的文件 copy 到 image 去 例如:COPY index.jsp /usr/local/tomcat/webapps/ROOT (COPY 本机文件地址 镜像内文件地址) -EXPOSE 对外通过该端口提供服务 例如:EXPOSE 8080 -CMD 启动该 image 应该运行的命令 例如:CMD[ “catalina.sh”, “run”] 2.2 Docker 入门命令 入门命令1:获得帮助 Docker help [command]获取run命令的帮助。 入门命令2:镜像操作系列命令 Docker pull [name]:[tag] 拉取/更新某image Docer image ls 列举当前的Docker image Docker image rm[image ID] 删除某image Docker build-t [name]:[tag] [dockerfile path] 从本地路径寻找 Dockerfile 构建镜像,并打 tag 上 入门命令3:镜像运行系列命令 Docker run-it ubuntu bash -it:表示起一个交互终端,来 run 后面的命令 -d: 表示运行 docker 容器到后台 Docker ps 查看运行中的容器 Docker kill [container ID]终止容器 docker run -v dor1:dir2 redis 目录挂载 例如:docker run –v~:/ user-it Ubuntu bash 是把 host 的用户 home 主目录,映射为Docker实例中的/user目录。 Tips: 关于镜像的常见问题 1. 我的拉取的镜像究竟存到哪里了? 镜像有 Docker 管理,每个系统具体路径不一样。 Linux 系统存储在/var/lib/docker OSX 系统存储在: /Users/{YourUserName}/Library/Containers/com.docker.docker/Data 2. 我没有指定镜像的 tag 怎么办? 命令中没有指定镜像 tag 时会默认使用 latest 作为 tag。避免发生预期错误的方法是指定 tag。 3. 镜像删除不掉怎么办? 镜像之间可能会相互依赖(layer),添加-f可以强制删除。 2.3 如何 Debug 1.看容器 log: Docker logs [container_id] 2. Inspect 获取容器/镜像的元数据。 Docker inspect [container_id] 3. 在 Docker 实例中执行交互的shell命令。 Docker exec –it [container_id] bash Docker exec-it[container_id]s 2.4 如何构建自己的 Docker 镜像 1. 前期准备 Dockerfile 内容如下 FROM tomcat:8.0 COPY index.jsp /usr/local/tomcat/webapps/ROOT EXPOSE 8080 Index.jsp 内容如下 <%< span=""> Out. Println(“Hello World, V1”); %> 2. 构建镜像 Docker build-t mytomact:1.0 Docker run –p 8080:8080 –d mytomcat:1.0 Curl localhost:8080 Docker logs {容器 id} 2.5 镜像制作的基本操作命令总结 1. 构建 Docker 镜像 Cd node/docker Docker build –t hub.baidubce.com/bootcamp/mynode:1.0.0 2. 运行镜像 Docker run-d –p 8000:8080 hub.baidubce.com/bootcamp/mynode:1.0.0 Docker ps | grep mynode Curl localhost:8000 3. 查看执行日志 Docker ps |grep mynode Docker logs{container id} 3.Docker 底层核心技术 Docker 是容器虚拟化的相关技术的结合,它的三大技术支柱包括:Cgroup,Namespace, AUFS。下面简单介绍一下者三大技术支柱 3.1 Cgroup 全称:Linux Control Group ,又称为 Cgroup,是 Linux Kernel 的一个功能。 由 Google 工程师发起并贡献。最终合入了内核代码;作用是限制一个进程组的资源(包括内存用量,CPU用量,磁盘IO,网络IO,网络优先级等) http://man7.org/linux/man-pages/man7/cgroups.7 .html 例如:使用 Cgroup 限制一个进程资源的用量 Mkdir –p /sys/fs/cgroup/cpu/k8s_s1 Echo 50000>/cguop/cpu/k8s_s1/cpu.cfs_quota_us 将cpu.cfs_quota_us 设为50000 相当于cpu.cfs_period_us的100000是50% Echo{PID}>/cgroup/cpu/foo/tasks 3.2 Linux Namespace Namespace 是 Linux Kernel 提供的一种内核级别资源隔离的方法。又称为命名空间,它主要做访问隔离,即同一个命名空间的多个资源(memory, CPU, network, pid)可以相互看到,但是之外的看不到。 http://man7.org/linux/man_pages/man7/namespaces.7.html 目前 Namespce 种类有以下7种: 例如:使用 Namespace 隔离一个进程的资源 lSyscall. CLONE NEWPID: 隔离PID lSyscall. CLONE_NEWNET :隔离网络 3.3 AUFS 全称:Advanced Multilayered Unification File System。一种高性能分层文件系统,是Docker image的基石。可以把多个文件挂载到同一个挂载点。只有第一层(第一个文件夹层级)是可写的,其余层是只读的。增加/删除文件时都会转换为写操作写入可写层。 修改文件时,AUFS 利用 Cow 特性来修改只读层中的文件。不管修改数据的量的多少。在第一次修改时,文件都会被拷贝到可写层然后再被修改。AUFS 的 Cow 特性能够允许在多个容器之间共享分层,从而减少物理空间占用。 例如:使用AUFS创建多重挂载点 1.Mount-t aufs –o dirs.=./fruits=tw:./vegetables=rw none./mnt 2.Echo modify>> ./mnt/tomato 以上就是本期课程的全部内容。 视频课程:https://www.bilibili.com/video/BV19f4y1z7LR 重磅!云原生计算交流群成立 扫码添加小助手即可申请加入,一定要备注:名字-公司/学校-地区,根据格式备注,才能通过且邀请进群。 了解更多微服务、云原生技术的相关信息,请关注我们的微信公众号【云原生计算】!

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

用户登录
用户注册