Blog

重学容器04: containerd的高阶命令行工具nerdctl

📅 2021-05-06

对于用惯了docker cli的用户来说,containerd的命令行工具ctr使用起来不是很顺手,此时别慌,还有另外一个命令行工具项目nerdctl可供我们选择。 nerdctl是一个与docker cli风格兼容的containerd的cli工具。 nerdctl已经作为子项目加入了containerd项目,它的github地址是https://github.com/containerd/nerdctl,而且从最近的nerdctl 0.8开始,nerdctl直接兼容了docker compose的语法(不包含swarm), 这很大提高了直接将containerd作为本地开发、测试和单机容器部署使用的体验。本来k8s后续将不再支持dockershim,docker在k8s社区的地位急剧下降,现在单机直接使用containerd易用性也不断被完善,也许docker的辉煌已经远去了。

...

重学容器03: 使用CNI为Containerd容器添加网络能力

📅 2021-04-28

在第2节中,我们部署了containerd,配置好了ctr和crictl这两个命令行工具,并且使用ctr启动了一个用于测试的redis容器,但是这个容器还不具备网络能力,只能在容器内部自己玩耍。 本节我们将尝试手工配置containerd与cni插件的集成,为容器加入基本的网络能力。

...

重学容器02: 部署容器运行时Containerd

📅 2021-04-27

1.Containerd启动容器涉及的模块 #

前面我们梳理了docker、k8s、containerd、runc之间的渊源,Containerd早已脱离Docker成为了一个稳定可靠的容器运行时。

单从containerd的角度来看启动一个容器的过程大致是下图所示的流程:

...

重学容器01: Docker、Containerd、Kubernetes之间的渊源

📅 2021-04-26

话说Kubernetes都要弃用Dockershim了,因此是时候学习Containerd了。 本文先简单整理一下Kubernetes、Docker、Containerd之间的渊源和纠葛。

1.Docker, OCI和Containerd #

这里略过早期Docker的发展历史,大概就是在docker如日中天的时候,社区要搞容器化标准,成立了OCI(Open Container Initiaiv),OCI主要包含两个规范,一个是容器运行时规范(runtime-spec),一个是容器镜像规范(image-spec)。 docker的公司也在OCI中,这里略过在推动标准化过程中各大厂各自心里的"小算盘"和"利益考虑",docker在这个过程中由一个庞然大物逐渐拆分出了containerdrunc等项目, docker公司将runc捐赠给了OCI,后来将containerd捐赠给了CNCF。

...

Go 1.15新特性学习笔记

📅 2020-08-16

Go 1.15继1.14 6个月后发布,主要是在工具链、运行时和类库上的改进,改版本继续保持对Go 1.x版本的兼容性。

Go 1.15值得关注的变化 #

Go 1.15中一些值得关注的地方:

  • 对Go链接器的实质性改进
  • 改进了对高核心计数的小对象的分配
  • X.509 CommonName弃用
  • GOPROXY支持跳过返回错误的代理
  • 新增了一个time/tzdata
  • 核心库的一些改进

从这些变化上可以看出,这个版本变化不太大,其实在工具链和运行时上也不需要过多关注,直观的体验是编译的二进制文件大小确实比1.14小了一点点。

...

理解Go语言struct的内存对齐

📅 2020-08-10

1.为什么要内存对齐? #

先来看一下字长的概念。字长是CPU的主要技术指标之一,指的是CPU一次能并行处理的二进制位数,通常CPU的字长为4字节(32位)、8字节(64位)。 CPU在访问内存时,并不是逐个字节访问的,而是以字长为单位访问。这么做的目的是为了减少CPU访问内存的次数,例如对于64位CPU,一次读取16字节数据只需要读取2次。

...

rust语言基础学习: 并发中的原子操作和rus标准库中的原子类型

📅 2020-07-29

原子类型和原子操作 #

原子操作(atomic operation)是指不可分割且不可中断的一个或一系列操作,在并发编程中需要由CPU层面做出一些保证,让一系列操作成为原子操作。 一个原子操作从开始到结束可以是一个操作步骤,也可以包含多个操作步骤,这些步骤的顺序不可以被打乱,执行过程也不会被其他机制打断。

...

rust语言基础学习: 闭包

📅 2020-07-28

今天来学习rust中的闭包。

rust中的闭包实际上是一个匿名函数,这个匿名函数可以被赋值给一个变量,可以作为参数传递给函数,可以作为函数返回值被返回,也可以为它实现某个trait,使其表现出其他行为。 在rust中可以在一个地方创建闭包,然后在不同的上下文中执行闭包运算。不同于函数,闭包允许捕获调用者作用域中的变量。

...

rust语言基础学习: 写时克隆智能指针Cow

📅 2020-07-27

昨天学习了Rust中与借用数据相关的三个trait: Borrow, BorrowMutToOwned。 理解了这三个trait之后,今天来学习Rust中能够实现写时克隆的智能指针Cow<'a B>

1.Cow的定义 #

Cow是Rust提供的用于实现写时克隆(Clone on write)的智能指针。

...

rust语言基础学习: 与借用数据相关的三个trait Borrow, BorrowMut, ToOwned

📅 2020-07-26

今天学习Rust中与借用数据相关的三个trait: Borrow, BorrowMutToOwned。 这三个trait在Rust标准库module std::borrow中。

std:borrow是Rust标准库中用于处理借用数据的moudle。这个module中除了Borrow, BorrowMut, ToOwned三个trait 外,还有一个Cow enum。不过今天我们先只学习这三个trait。

...

© 2024 青蛙小白 | 总访问量 | 总访客数