摘要:
# 前言 有这样一个工具, 可以对镜像进行扫描, 拿出其中包含的软件包、lib库(pip包等)、危险文件等, 并能够识别出哪些包是存在漏洞的. 比如`trivy`工具. 那么他们是如何做到这件事情的呢? 正好最近在研究这块, 索性就简单谈一谈(其实原理很简单). # 获取包含内容 对于镜像的存储, 阅读全文
摘要:
# 前言 在[之前的文章](https://hujingnb.com/archives/899)中有说过容器目录的隔离机制. 今天来分析一下镜像的文件系统. Docker 已经用了很久了, 也知道镜像存储的时候是分层存储的(从`docker pull`时分层下载就能看出), 但是具体是如何将多层进行 阅读全文
摘要:
# 前言 在k8s中, pod是编排的最小单位, 在同一个pod中, 容器之间能够共享`hostname` `network` 等内容. 共享`network`, 简单说就是同一个pod中的容器, 可以通过访问`localhost`互相访问, 且端口占用会冲突. 在之前的介绍中提到过, 容器的隔离是 阅读全文
摘要:
# 前言 就我目前的对容器的了解, 使用`namespace`技术实现隔离, 使用`cgroups`技术实现资源限制. 但是具体是如何实现却从未深究过. 闲来无事, 挑其中的`Mount Namespace`来康康, 容器是如何实现目录隔离的. # 目录隔离 在[耗子叔的这篇文章中](https:/ 阅读全文
摘要:
前言 先提出问题, 再说明原因. 有如下一段代码: 当执行go test测试时, 会报如下错误: main.test /var/folders/55/47pl3jxx6rg7m0r6xvn4f7wr0000gn/T/go-build2769402238/b001/_testmain.go:13:8: 阅读全文
摘要:
是什么 什么是零拷贝呢? 这个词想必听过不止一次了吧, 但一直没有认真的研究一下这到底是个什么玩意. 在很久之前, 一次IO 操作的流程大致是这样的: 假设, 这里的 IO 设备是磁盘, 那么磁盘的一次read操作流程如下: CPU向磁盘发起 IO 请求 磁盘将数据放入磁盘控制器缓冲区(上图步骤1) 阅读全文
摘要:
前言 在Go中, map这个结构使用的频率还是比较高的. 其实在所有的语言中, map使用的频率都是很高的. 之前在使用中, 一直都知道map的内存在元素删除的时候不会回收, 但一直没有仔细的研究为什么. 今天就来好好揣摩揣摩. func main() { m := make(map[int][12 阅读全文
摘要:
前言 如果我们的应用在启动的时候需要对数据库进行初始化(比如建表等), 可以通过读取.sql文件内容直接执行. 但是, 这样会带出一个问题: 在发送可执行文件的时候, 需要连带着附件文件, 并且相对路径还不能出错. 这样太麻烦了 有时我们并不希望附件的内容被使用者看到 处于种种原因, 我们不希望这部 阅读全文
摘要:
前言 在日常开发中, 经常会使用chan来进行协程之间的通信. 对chan的操作也无外乎读写关. 而本次, 就是从chan的关闭而来. 假设我们对外提供的方法如下: type Chan struct { ch chan int } func (c *Chan) Close() { close(c.c 阅读全文
摘要:
我们应该遇到过很多次类似的题目了吧: 如何将一个递归函数使用非递归的方式实现.. 今天突然想到一个通用解, 就是可以在循环中模拟函数调用的方式来实现. 调用栈 以计算 1~n 的和举例, 递归实现如下(Python为例): def add_up(n): if n <= 1: return n ret 阅读全文