containerd作为轻量级容器运行时,被认为是最热门的Docker替代方案,目前已在阿里云、腾讯云等多家云商得到了支持,相信未来会有非常不错的发展前景。
在前面的文章已对产品的功能架构进行了介绍,本文我们将更进一步,来学习containerd的部署与使用。
01
—
部署containerd
1. 下载二进制文件
$ wget https://github.com/containerd/containerd/releases/download/v1.6.12/containerd-1.6.12-linux-amd64.tar.gz
2. 解压文件到/usr/local
$ sudo tar Cxzvf /usr/local containerd-1.6.12-linux-amd64.tar.gz
bin/
bin/ctr
bin/containerd
bin/containerd-shim
bin/containerd-stress
bin/containerd-shim-runc-v2
bin/containerd-shim-runc-v1
3. 下载containerd.service文件,用于启动服务
$ wget https://raw.githubusercontent.com/containerd/containerd/main/containerd.service
$ sudo mv containerd.service /usr/lib/systemd/system
4. 启动服务
$ systemctl daemon-reload
$ systemctl enable --now containerd
$ sudo systemctl restart containerd
5. 安装runc
$ wget https://github.com/opencontainers/runc/releases/download/v1.1.4/runc.amd64
$ sudo install -m 755 runc.amd64 /usr/local/sbin/runc
6. 安装cni插件
$ wget https://github.com/containernetworking/plugins/releases/download/v1.2.0/cni-plugins-linux-amd64-v1.2.0.tgz
$ mkdir -p /opt/cni/bin
$ tar Cxzvf /opt/cni/bin cni-plugins-linux-amd64-v1.2.0.tgz
OK,现在我们可以开始使用了。
02
—
使用containerd
如果你对Docker熟悉的话,那么在使用containerd时应该不会有太多问题。但有一点需要注意,containerd支持namespace的概念,这里的功能与Kubernetes中的namespace相似。namespace可以看成是隔离域,一个namespace中的镜像和容器,在其他namespace中是被无法看到的。
containerd支持的客户端工具包括 ctr、nerdctl 和 crictl 三款,它们都是可以通过命令行方式来管理和操作容器,下面我们来学习一下它们的使用方式。
1. ctr
ctr 是 containerd 的自带客户端工具,可以用于管理本地和远程的容器。ctr相对于docker客户端而言,在功能上没有那么丰富,能够实现创建、删除、运行、停止、暂停等容器基本操作。
使用示例:
- 查看namespace
$ ctr namespace ls
NAME LABELS
default
注:默认情况下,ctr 下载的镜像和启动容器都会放到default的namesapce中。
- 拉取镜像
$ ctr image pull docker.io/library/nginx:latest
注:使用ctr拉取Docker官方镜像时,需要添加docker.io的完整路径,否则会报错。
- 创建并启动容器
$ ctr run -d docker.io/library/nginx:latest nginx
注:ctr没有--name的选项,因此在最后指定容器名,此处创建了一个名称为nginx的容器。
- 查看容器
$ ctr containers ls
CONTAINER IMAGE RUNTIME
nginx docker.io/library/nginx:latest io.containerd.runc.v2
注:如果要查看其他namespace的容器,可以加上 -n,如:ctr -n k8s.io containers ls。
- 停止容器
$ ctr task kill nginx
注:由于ctr没有stop的子命令,所以只能通过杀掉容器进程的方式来进行停止。
- 删除容器
$ ctr container rm nginx
更多命令可以通过 ctr --help 命令查看。
2. nerdctl
nerdctl是一款第三方工具,需要单独安装。它出现的目的是为了兼容docker客户端命令,因此在使用上提供了类似的体验。nerdctl 目前处于活跃开发阶段,部分命令和功能可能还不够稳定。
安装nerdctl
$ wget https://github.com/containerd/nerdctl/releases/download/v1.2.1/nerdctl-1.2.1-linux-amd64.tar.gz
$ tar -zxvf nerdctl-1.2.1-linux-amd64.tar.gz
$ mv nerdctl /usr/local/bin/
使用示例:
- 拉取镜像
$ nerdctl pull nginx
- 创建容器
$ nerdctl run -d --name nginx nginx
- 查看容器
$ nerdctl ps
- 停止容器
$ nerdctl stop nginx
- 删除容器
$ nerdctl rm nginx
更多命令可以通过 nerdctl --help 命令查看。
3. crictl
crictl 是 Kubernetes CRI(容器运行时接口)的命令行工具,支持通过 CRI 标准管理容器。与 ctr 和 nerdctl 不同的是,crictl 不能直接管理 containerd 守护进程,而是通过 CRI 接口与容器运行时通信,所以通常在Kubernetes的环境中才会使用。
使用示例:
- 拉取镜像
$ crictl pull nginx
- 基于配置文件在Pod中创建容器
$ vi od-config.json
{
"metadata": {
"name": "nginx-sandbox",
"namespace": "default",
"attempt": 1,
"uid": "hdishd83djaidwnduwk28bcsb"
},
"log_directory": "/tmp",
"linux": {
}
}
$ vi container-config.json
{
"metadata": {
"name": "busybox"
},
"image":{
"image": "busybox"
},
"command": [
"top"
],
"log_path":"busybox.0.log",
"linux": {
}
}
$ crictl run container-config.json pod-config.json
- 查看容器
$ crictl ps
- 查看Pod
$ crictl pods
- 停止容器
$ crictl stop <CONTAINER_ID>
- 删除容器
$ crictl rm <CONTAINER_ID>
ctr、nerdctl 和 crictl 都是用于管理和操作容器的命令行工具,可以根据需要选择适合自己的工具。对于需要与 Kubernetes 集成的用户,crictl 是不错的选择;而对于更多的容器开发者和运维人员,ctr 和 nerdctl 提供了更多的功能和控制。
标签:bin,容器,ctr,Containerd,nerdctl,nginx,containerd,轻量级 From: https://blog.51cto.com/u_64214/7132196