Containerd 简介

Containerd 是一个工业级标准的容器运行时,它强调简单性、健壮性和可移植性。Containerd 可以在宿主机中管理完整的容器生命周期:容器镜像的传输和存储、容器的执行和管理、存储和网络等。详细点说,Containerd 负责干下面这些事情:

Containerd 被设计成嵌入到一个更大的系统中,而不是直接由开发人员或终端用户使用。

Containerd 被设计成嵌入到一个更大的系统中,而不是直接由开发人员或终端用户使用。所以 containerd 具有宏大的愿景(此图来自互联网):

里提到了通过,他们将 containerd 设计成了 snapshotter 的模式,这也使得 containerd 对于 overlay 文件系、snapshot 文件系统的支持比较好。

》。

,当前的最新版本为 v1.1.0。

$ -C /usr/local -xf containerd-..linux-amd64..gz

$ /etc/> /etc/containerd/config.toml

$ /lib/systemd/system/containerd.service

[Unit] Description=containerd container runtime Documentation=https://containerd.io After=network.target

[Service]
ExecStartPre=/sbin/modprobe overlay
ExecStart=/usr/local/bin/containerd
Delegate=yes
KillMode=process
LimitNOFILE=1048576

Having non-zero Limit*s causes performance problems due to accounting overhead

in the kernel. We recommend using cgroups to do container-local accounting.

LimitNPROC=infinity
LimitCORE=infinity

[Install]
WantedBy=multi-user.target

$ systemctl daemon- systemctl status containerd.service

import (
<span style="color: #800000">"<span style="color: #800000">log<span style="color: #800000">"
<span style="color: #800000">"<span style="color: #800000">github.com/containerd/containerd<span style="color: #800000">"<span style="color: #000000">
)

func main() {
<span style="color: #0000ff">if err := redisExample(); err !=<span style="color: #000000"> nil {
log.Fatal(err)
}
}

func redisExample() error {
client,err := containerd.New(<span style="color: #800000">"<span style="color: #800000">/run/containerd/containerd.sock<span style="color: #800000">"<span style="color: #000000">)
<span style="color: #0000ff">if err !=<span style="color: #000000"> nil {
<span style="color: #0000ff">return<span style="color: #000000"> err
}
defer client.Close()
<span style="color: #0000ff">return<span style="color: #000000"> nil
}

ctx := namespaces.WithNamespace(context.Background(),)

image,err := client.Pull(ctx, err !=

container,err := err !=

task,err := err !=

》一文中介绍的 "created"。这意味着 namespaces、rootfs 和容器的配置都已经初始化成功了,只是用户进程(这里是 redis-server)还没有启动。在这个时机,我们可以为容器设置网卡,还可以配置工具来对容器进行监控等。

time.Sleep( *<span style="color: #0000ff">if err := task.Kill(ctx,syscall.SIGTERM); err !=<span style="color: #000000"> nil {
<span style="color: #0000ff">return
<span style="color: #000000"> err
}

status := <-<span style="color: #000000">exitStatusC
code,exitedAt,err :=<span style="color: #000000"> status.Result()
<span style="color: #0000ff">if err !=<span style="color: #000000"> nil {
<span style="color: #0000ff">return<span style="color: #000000"> err
}
fmt.Printf(<span style="color: #800000">"<span style="color: #800000">redis-server exited with status: %d\n<span style="color: #800000">",code)

status,err := task.Delete(ctx)

。下面编译 demo 代码并运行:

/main

相关文章

Docker是什么Docker是 Docker.Inc 公司开源的一个基于 LXC技...
本文为原创,原始地址为:http://www.cnblogs.com/fengzheng...
镜像操作列出镜像:$ sudo docker imagesREPOSITORY TAG IMA...
本文原创,原文地址为:http://www.cnblogs.com/fengzheng/p...
在 Docker 中,如果你修改了一个容器的内容并希望将这些更改...
在Docker中,--privileged 参数给予容器内的进程几乎相同的权...