Docker镜像批量清理脚本

使用jenkins作为打包的工具,主机上的磁盘空间总是被慢慢被占满,直到jenkins无法运行。本文从几个方面来清理docker垃圾。 批量删除已经退出的容器 docker ps -a | grep "Exited" | awk '{print $1 }' | xargs docker rm 批量删除带有none字段的镜像 $3一般就是取出每一行的镜像id字段 # 方案1: 根据镜像id删除镜像 docker images| grep none |awk '{print $3 }'|xargs docker rmi # 方案2: 根据镜像名删除镜像 docker images | grep wecloud | awk '{print $1":"$2}' | xargs docker rmi 方案1,根据镜像ID删除镜像时,有写镜像虽然镜像名不同,但是镜像ID都是相同的,这是后往往会删除失败。所以根据镜像名删除镜像的效果会更好。 删除镜像定时任务脚本 #!/bin/bash # create by wangduanduan # when current free disk less then max free disk, you can remove docker images # GREEN='\033[0;32m' RED='\033[0;31m' NC='\033[0m' max_free_disk=5 # 5G....

2018-12-04 · 1 min · 王端端

Node.js 如何找出循环依赖的文件?如何解决循环依赖问题?

本文重点是讲解如何解决循环依赖这个问题。关心这个问题是如何产生的,可以自行谷歌。 如何重现这个问题 // a.js const {sayB} = require('./b.js') sayB() function sayA () { console.log('say A') } module.exports = { sayA } // b.js const {sayA} = require('./a.js') sayA() function sayB () { console.log('say B') } module.exports = { sayB } 执行下面的代码 ➜ test git:(master) ✗ node a.js /Users/dd/wj-gitlab/tools/test/b.js:3 sayA() ^ TypeError: sayA is not a function at Object.<anonymous> (/Users/dd/wj-gitlab/tools/test/b.js:3:1) at Module._compile (module.js:635:30) at Object.Module._extensions..js (module.js:646:10) at Module.load (module.js:554:32) at tryModuleLoad (module....

2018-10-29 · 2 min · 王端端

shields小徽章是如何生成的?以及搭建自己的shield服务器

shields小徽章介绍 一般开源项目都会有一些小徽章来标识项目的状态信息,并且这些信息是会自动更新的。在shields的官网https://shields.io/#/, 上面有各种各样的小图标,并且有很多自定义的方案。 起因:如何给私有部署的jenkins制作shields服务? 私有部署的jenkins是用来打包docker镜像的,而我想获取最新的项目打包的jenkins镜像信息。但是私有的jenkins项目信息,公网的shields服务是无法获取其信息的。那么如果搭建一个私有的shields服务呢? 第一步:如何根据一些信息,制作svg图标 查看shields图标的源码,可以看到这些图标都是svg格式的图标。然后的思路就是,将文字信息转成svg图标。最后我发现这个思路是个死胡同, 有个npm包叫做,text-to-svg, 似乎可以将文本转成svg, 但是看了文本转svg的效果,果断就放弃了。 最后回到起点,看了shields官方仓库,发现一个templates目录,豁然开朗。原来svg图标是由svg的模板生成的,每次生成图标只需要将信息添加到模板中,然后就可以渲染出svg字符串了。 顺着这个思路,发现一个包shields-lightweight var shields = require('shields-lightweight'); var svgBadge = shields.svg('subject', 'status', 'red', 'flat'); 这个包的确可以生成和shields一样的小徽章,但是如果徽章中有中文,那么中文就会溢出。因为一个中文字符的宽度要比一个英文字符宽很多。 所以我就fork了这个项目,重写了图标宽度计算的方式。shields-less npm install shields-less var shieldsLess = require('shields-less') var svgBadge = shieldsLess.svg({ leftText: 'npm 黄河远上白云间', rightText: 'hello 世界' }) var svgBadge2 = shieldsLess.svg({ leftText: 'npm 黄河远上白云间', rightText: 'hello 世界', style: 'square' }) var svgBadge2 = shieldsLess.svg({ leftText: 'npm 黄河远上白云间', rightText: 'hello 世界', leftColor: '#e64a19', rightColor: '#448aff', style: 'square' // just two style: square and plat(default) }) 渲染后的效果,查看在线demo: https://wdd....

2018-10-29 · 1 min · 王端端

荣耀往往冠以虚伪 正能量满满的《无耻之徒》

今年的国庆,我宅在家里,没有出去玩。因为在我们在法定节假日,最好不要出去旅游。 因为这世界本来有很多路,走的人太多了,也就没了路。 堵在高速,堵在景区,堵在厕所,堵在某个街角 在家里刷完美剧《无耻之徒》八季,说心里话:这部剧刷新我的人生观,感觉自己在七天之内重生似的 虚伪往往冠以荣耀,荣耀往往冠以虚荣 古龙小说有个特点,越是卑鄙无耻,虚荣腹黑的人,往往冠以正能量慢慢的名字,例如:小李飞刀中的总是喜欢主持正义的大侠赵正义。我觉得,古龙先生一定看过李宗吾的厚黑学,并且深有研究。 无耻之徒中的frank,也是类似赵正义这类人。 看剧过程中,几次忍不住想把frank掐死。但是某些时候,frank也会散发出一种大人物的闪光点。 居中人物看似无耻,很黄很暴力,但是整部剧给人以正能量满满的感觉。反观国产脑残电视剧,哪些动不动说什么我已经等你五千年之类的狗屁对白,让我一听就觉得piece of shit。 没有好人,也没有坏人,只是人罢了 回首往事,怎么可能没有后悔与遗憾,人生本来就没有完美的 无论如何,血缘关系是无法切断的关系

2018-10-06 · 1 min · 王端端

Express代理中间件问题与解决方案

前后端分离应用的架构 在前后端分离架构中,为了避免跨域以及暴露内部服务地址。一般来说,我会在Express这层中加入一个反向代理。 所有向后端服务访问的请求,都通过代理转发到内部的各个服务。 这个反向代理服务器,做起来很简单。用http-proxy-middleware这个模块,几行代码就可以搞定。 // app.js Object.keys(proxyTable).forEach(function (context) { app.use(proxyMiddleware(context, proxyTable[context])) }) http-proxy-middleware实际上是对于node-http-proxy的更加简便的封装。node-http-proxy是http-proxy-middleware的底层包,如果node-http-proxy有问题,那么这个问题就会影响到http-proxy-middleware这个包。 最近的bug http-proxy-middleware最近有个问题,请求体在被代理转发前,如果请求体被解析了。那么后端服务将会收不到请求结束的消息,从浏览器的网络面板可以看出,一个请求一直在pending状态。 Cannot proxy after parsing body #299, 实际上这个问题在node-http-proxy也被提出过,而且处于open状态。POST fails/hangs examples to restream also not working #1279 目前这个bug还是处于open状态,但是还是有解决方案的。就是将请求体解析的中间件挂载在代理之后。 下面的代码,express.json()会对json格式的请求体进行解析。方案1在代理前就进行body解析,所有格式是json的请求体都会被解析。 但是有些走代理的请求,如果我们并不关心请求体的内容是什么,实际上我们可以不解析那些走代理的请求。所以,可以先挂载代理中间件,然后挂载请求体解析中间件,最后挂载内部的一些接口服务。 // 方案1 bad app.use(express.json()) Object.keys(proxyTable).forEach(function (context) { app.use(proxyMiddleware(context, proxyTable[context])) }) app.use('/api', (req, res, next)=> { }) // 方案2 good Object.keys(proxyTable).forEach(function (context) { app.use(proxyMiddleware(context, proxyTable[context])) }) app.use(express.json()) app.use('/api', (req, res, next)=> { }) 总结 经过这个问题,我对Express中间件的挂载顺序有了更加深刻的认识。 同时,在使用第三方包的过程中,如果该包bug,那么也需要自行找出合适的解决方案。而这个能力,往往就是高手与新手的区别。

2018-09-30 · 1 min · 王端端

什么样的嘻哈音乐会被听众喜欢

《中国新说唱 - 第九期》四位评委一致认为会被流行的歌曲,几乎都没有流行,反观那些评分较低的嘻哈歌曲,反而在各大音乐排行版上名列前茅。 评委认为会流行的歌曲有以下特点 词要简单,不要有深度,越简单约容易流行 要中西结合,国际化更好 对于第一点,无疑是在侮辱嘻哈音乐听众的智商。 对于第二点,实际上只是在吹嘘罢了。难道山歌就一定比中英文结合的说明要层次低。 纵观网易云音乐排行榜上的比较流行的嘻哈音乐,可以发现有以下特点。 歌词有血有肉 节奏缓和,吐字清晰,容易模仿 爱情和青春主题更讨喜 对于第一点,如果你的歌词,只是再说自己有多牛逼,别人多low,那么你的歌一定火不了。 对于第二点,虽然嘻哈音乐讲究说唱的速度,但是如果你的歌曲,整片速度快的都像在高速公路上飙车,那么没有人能跟上。观众顶多会送你一个老司机牌坊,然后就没有然后了。 缓和的说唱,更容易打动人心。 爱情和青春,永恒不变的讨喜主题。

2018-09-10 · 1 min · 王端端

偷时间的人与王阳明心学

我们用自己的时间,交换到别人的快乐 关于王阳明的心学的书籍,我看过一本,但是没看完。 虽然我没看,但是我似乎已经理解了心学。 可以从我个人的角度说明 上大学时,我有段时间迷上玩英雄联盟,但是因为玩的太菜,所以不久就放弃了。但是喜欢看一些关于游戏的直播视频。 有时候看歌唱比赛,觉得人家唱的那么好听,顿生仰慕之心,进而去了解这个人 喜欢看某个电视剧,然后就追着看了 刷某个APP, 一刷就几十分钟过去了 … 做这些事情,都有一个特点,就是我们:我们用自己的时间,交换到别人的快乐,仿佛与魔鬼做了交易。 从心学的角度来说明,我们总是从外界去求取快乐,求取自我实现。 而王阳明老师交给我的是,你应该从你的内心发现快乐,不需要依赖外呼去实现内心的安静与愉悦。 自己内心的愉悦是永恒的,从外界获取愉悦是短暂的。 因为不想无聊,所以出卖自己的时间 用自己的时间去交换别人的快乐,还有另外一个原因。 就是自己的时间太无聊,因为无法忍受无聊,所以要找点乐子。 但是从深层次来讲,我们为什么会感到无聊呢? 因为你无事可做啊? 无事可做最无聊 看着手机上满屏的APP图标, 仿佛是路过青楼, 每个APP都在妩媚的招手笑道:官人进来坐坐好吗? 每个APP都希望你可以花费更多的时间在它上面, 就像是后宫剧的争宠一样, 因为时间就是流量, 流量就是金钱 我们被圈养成优秀的绵羊 屠夫一定不是最富有的,牧羊人一定是最富有的人。 屠夫杀猪,猪感觉很痛,而且猪要是被杀了,就没办法再杀了 牧羊人不一样,牧羊人有每次只褥一只的几根羊毛 绵羊丝毫感觉不到, 所以牧羊人必须驯服越来越多的绵羊 让后让每个绵羊以毛质鲜亮为美 毛质鲜亮浓密的绵羊,称为优秀的绵羊 我们都慢慢被培养成优秀的绵羊

2018-09-10 · 1 min · 王端端

负和游戏与嘻哈音乐

负和游戏 我很早就听过一个名词,叫做零和游戏,或者又叫做零和博弈。 零和博弈表示所有博弈方的利益之和为零或一个常数,即一方有所得,其他方必有所失。 维基百科 最近读的一本书 《以交易为生》,本来是耐着兴趣读下去的 没想到读到某些地方,也给我醍醐灌顶的感觉 世界上哪有零和游戏啊,都是负和游戏。 你给张三转1000块,按理说你少了1000块,张三多了1000块,1000 - 1000 = 0 和为零。 实际上呢,你转账时还需要付手续费吧。1000 - 1000 - 1 = -1 同样的情况,坐庄的人总是需要抽成的。 嘻哈音乐 去年爱奇艺的《中国有嘻哈》红遍大江南北 所以今天又搞了个第二季 任何事情,第一遍总是最好的,续集往往都不如人意。 从谷歌趋势和百度统计来看,这档节目热度在平稳降低。 另外,爱奇艺也有可能是有点心虚。以前视频下面都会写出播放量,但是现在都不显示播放量数据了,而是显示热度。 说实在的17年中国有嘻哈能火,完全是因为它能够在众多娱乐节目中给人非常特别的感觉。 但是18年中国新说唱,和其他节目有什么区别能,同质化严重。

2018-09-08 · 1 min · 王端端

JavaScript Golang 与 武侠小说

2018年的学习计划是学习Go语言, 同时读完kindle里面的300多本书。 300多本书中,有古龙的武侠小说。 在学习Go语言的时候,感觉Go语言真实到处都是规矩,一板一眼都仿佛是少林高僧般矜持。 什么出家人不打诳语啦,酒肉穿肠过… 我并不是说有规矩不好,规矩是风格,没有什么好不好的。 小孩子才说好坏,大人只说利弊。 JavaScript就有点奇技淫巧了,似乎有点像李寻欢一样 放荡不羁、忧郁伤感、被人误解 但是NodeJs横空出世,方佛像小李飞刀 没有人看出它是怎么出手的,但是它已经席卷了编程界 但是我最近兴趣却是学习Go语言 就像朱自清说的:酣眠必不可少,小睡也别有风味

2018-09-07 · 1 min · 王端端

jQuery 与IE浏览器兼容性的思考

兼容性:对,说你呢!IE! 当我们在说浏览器兼容性的时候,其实我们大多数时候在说IE浏览器的兼容性。 对,说你呢!IE! 现在jQuery的最新版已经是3.3.1, 根据jQuery的官方说明。 最新版的jQuery支持IE9+, 如果你想支持IE6-8,那么你最好去用jQuery 1.12。 Current Active Support Desktop Internet Explorer: 9+ If you need to support older browsers like Internet Explorer 6-8, Opera 12.1x or Safari 5.1+, use jQuery 1.12. 来自 Browser Support jQuery的亮点 我只想安安静静的做东西,不想和各种浏览器diss或者battle。 所以老司机总是选择一个合适的轮子,

2018-09-01 · 1 min · 王端端