首页 > 其他分享 >Containerd容器管理工具(轻量级、工业容器管理工具)

Containerd容器管理工具(轻量级、工业容器管理工具)

时间:2024-12-16 23:56:14浏览次数:6  
标签:容器 centosone ctr -- containerd 管理工具 root 轻量级

一、Containerd介绍

前言

  • 早在2016年3月,Docker 1.11的Docker Engine里就包含了containerd,而现在则是把containerd从Docker Engine里彻底剥离出来,作为一个独立的开源项目独立发展,目标是提供一个更加开放、稳定的容器运行基础设施。和原先包含在Docker Engine里containerd相比,独立的containerd将具有更多的功能,可以涵盖整个容器运行时管理的所有需求。
  • containerd并不是直接面向最终用户的,而是主要用于集成到更上层的系统里,比如Swarm, Kubernetes, Mesos等容器编排系统。
  • containerd以Daemon的形式运行在系统上,通过暴露底层的gRPC API,上层系统可以通过这些API管理机器上的容器。
  • 每个containerd只负责一台机器,Pull镜像,对容器的操作(启动、停止等),网络,存储都是由containerd完成。具体运行容器由runC负责,实际上只要是符合OCI规范的容器都可以支持。
  • 对于容器编排服务来说,运行时只需要使用containerd+runC,更加轻量,容易管理。
  • 独立之后containerd的特性演进可以和Docker Engine分开,专注容器运行时管理,可以更稳定。
    在这里插入图片描述

1.1 Containerd前世今生

2013年docker公司在推出docker产品后,由于其对全球技术产生了一定的影响力,Google公司明显感觉到自己公司内部所使用的Brog系统江湖地位受到的威胁,希望Docker公司能够与自己联合打造一款开源的容器运行时作为Docker核心依赖,但Docker公司拒绝了;接着Google公司联合RedHat、IBM等公司说服Docker公司把其容器核心技术libcontainer捐给中立社区(OCI,Open Container Intiative),并更名为runC。
为了进一步遏制Docker在未来技术市场影响力,避免在容器市场上Docker一家独大,Google公司带领导RedHat、IBM等成立了CNCF(Cloud Native Computing Fundation)基金会,即云原生计算基金会。CNCF的目标很明确,既然在容器应用领域无法与Docker相抗衡,那就做Google更有经验的技术市场------大规模容器编排应用场景,Google公司把自己内部使用的Brog系统开源------Kubernetes,也就是我们今天所说的云原生技术生态。
2016年Docker公司推出了Docker Swarm,意在一统Docker生态,让Docker既可以实现容器应用管理,也可以实现大规模容器编排,经过近1年左右时间的市场验证后,发现在容器编排方面无法独立抗衡kubernetes,所以Docker公司于2017年正式宣布原生支持Kubernetes,至此,Docker在大规模容器编排应用市场败下阵来,但是Docker依然不甘心失败,把Docker核心依赖Containerd捐给了CNCF,依此说明Docker依旧是一个PaaS平台。
2020年CNCF基金会宣布Kubernetes 1.20版本将不再仅支持Docker容器管理工具,此事的起因主要也与Docker捐给CNCF基金会的Containerd有关,早期为了实现Kubernetes能够使用Docker实现容器管理,专门在Kubernetes组件中集成一个shim(垫片)技术,用来将Kubernetes容器运行时接口(CRI,Container Runntime Interface)调用翻译成Docker的API,这样就可以很好地使用Docker了,但是随着Kubernetes在全球技术市场的广泛应用,有更多的容器管理工具的出现,它们都想能够借助于Kubernetes被用户所使用,所以就提出标准化容器运行时接口,只要适配了这个接口就可以集成到Kubernetes生态当中,所以Kubernetes取消了对shim的维护,并且由于Containerd技术的成功,可以实现无缝对接Kubernetes,所以接下来Kubernetes容器运行时的主角是Containerd。

1.2 Containerd架构

1.2.1 架构图

Containerd设计的目的是为了嵌入到Kubernetes中使用,它是一个工业级的容器运行时,不提供给开发人员和终端用户直接使用,这样就避免了与Docker产生竞争,但事实上,Containerd已经实现大多数容器管理功能,例如:容器生命周期管理、容器镜像传输和管理、容器存储与网络管理等。
在这里插入图片描述

  • Containerd 采用标准的 C/S 架构
    • 服务端通过 GRPC 协议提供稳定的 API
    • 客户端通过调用服务端的 API 进行高级的操作
  • 为了实现解耦,Containerd 将不同的职责划分给不同的组件,每个组件就相当于一个子系统(subsystem)。连接不同子系统的组件被称为模块。
  • Containerd 两大子系统为:
    • Bundle : 在 Containerd 中,Bundle 包含了配置、元数据和根文件系统数据,你可以理解为容器的文件系统。而 Bundle 子系统允许用户从镜像中提取和打包 Bundles。
    • Runtime : Runtime 子系统用来执行 Bundles,比如创建容器。

其中,每一个子系统的行为都由一个或多个模块协作完成(架构图中的 Core 部分)。每一种类型的模块都以插件的形式集成到 Containerd 中,而且插件之间是相互依赖的。

例如,上图中的每一个长虚线的方框都表示一种类型的插件,包括 Service Plugin、Metadata Plugin、GC Plugin、Runtime Plugin 等,其中 Service Plugin 又会依赖 Metadata Plugin、GC Plugin 和 Runtime Plugin。每一个小方框都表示一个细分的插件,例如 Metadata Plugin 依赖 Containers Plugin、Content Plugin 等。

1.2.2 常用插件

  • Content Plugin : 提供对镜像中可寻址内容的访问,所有不可变的内容都被存储在这里。
  • Snapshot Plugin : 用来管理容器镜像的文件系统快照。镜像中的每一个 layer 都会被解压成文件系统快照,类似于 Docker 中的 graphdriver。
  • Metrics : 暴露各个组件的监控指标。
    在这里插入图片描述

1.2.3 架构缩略图

Containerd 被分为三个大块:Storage、Metadata 和 Runtime

在这里插入图片描述

1.2.4 与其它容器运行时工具性能对比

这是使用 bucketbench 对 Docker、crio 和 Containerd 的性能测试结果,包括启动、停止和删除容器,以比较它们所耗的时间:
在这里插入图片描述

结论: Containerd 在各个方面都表现良好,总体性能优于 Docker 和 crio 。

二、Containerd安装

操作系统环境为CentOS Stream 9

2.1 YUM方式安装

2.1.1 获取YUM源

获取阿里云YUM源

[root@centosone bing]# wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo


查看YUM源中Containerd软件
[root@centosone bing]# yum list | grep containerd
containerd.io.aarch64                                 1.7.22-3.1.el9                     @docker-ce-stable

2.1.2 使用yum命令安装

安装Containerd.io软件,即可安装Containerd
[root@centosone bing]# yum -y install containerd.io

2.1.3 验证安装及启动服务

使用rpm -qa命令查看是否安装
[root@centosone bing]# rpm -qa | grep containerd
containerd.io-1.7.22-3.1.el9.aarch64

设置containerd服务启动及开机自启动
[root@centosone bing]# systemctl enable containerd
[root@centosone bing]# systemctl start containerd


查看containerd服务启动状态
[root@centosone bing]# systemctl status containerd
● containerd.service - containerd container runtime
     Loaded: loaded (/usr/lib/systemd/system/containerd.service; enabled; preset: disabled)
     Active: active (running) since Sun 2024-10-20 21:20:37 CST; 19s ago
       Docs: https://containerd.io
    Process: 9563 ExecStartPre=/sbin/modprobe overlay (code=exited, status=0/SUCCESS)
   Main PID: 9564 (containerd)
      Tasks: 7
     Memory: 46.8M
        CPU: 51ms
     CGroup: /system.slice/containerd.service
             └─9564 /usr/bin/containerd
           ......

2.1.4 验证可用性

安装Containerd时ctr命令亦可使用,ctr命令主要用于管理容器及容器镜像等。
使用ctr命令查看Containerd客户端及服务端相关信息。
[root@centosone bing]# ctr version
Client:
  Version:  1.7.22
  Revision: 7f7fdf5fed64eb6a7caf99b3e12efcf9d60e311c
  Go version: go1.22.7

Server:
  Version:  1.7.22
  Revision: 7f7fdf5fed64eb6a7caf99b3e12efcf9d60e311c
  UUID: 4b036ef4-b9de-4518-88f1-90def545af23

2.1.5 配置文件

生成默认配置文件

[root@centosone bing]# containerd config default > /etc/containerd/config.toml 

修改配置文件,主要修改三处:

# vim /etc/containerd/config.toml 
# SystemdCgroup值改为true
SystemdCgroup = false 改为 true
# 修改sandbox_image为阿里云地址
sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"
# 修改镜像拉取地址,添加如下两项
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
         [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
         #这里使用华为云的镜像仓库,阿里云的镜像仓库有些镜像仍然下载不下来
           endpoint = ["38f984b79bc74731aa380e26db50dd7c.mirror.swr.myhuaweicloud.com"]
         [plugins."io.containerd.grpc.v1.cri".registry.mirrors."registry.k8s.io"]
           endpoint = ["registry.aliyuncs.com/google_containers"]
           
                                                                             
重启containerd是配置生效                                                                                                                                                                                                                 
[root@centosone bing]# systemctl restart containerd
[root@centosone bing]# systemctl status containerd

三、Containerd容器镜像管理

3.1 Containerd容器镜像管理命令

  • docker使用docker images命令管理镜像
  • 单机containerd使用ctr images命令管理镜像,containerd本身的CLI
  • k8s中containerd使用crictl images命令管理镜像,Kubernetes社区的专用CLI工具

ctr是containerd自带的CLI命令行工具,crictl是k8s中CRI(容器运行时接口)的客户端,k8s使用该客户端和containerd进行交互

获取命令帮助
[root@centosone bing]# ctr --help
NAME:
   ctr - 
        __
  _____/ /______
 / ___/ __/ ___/
/ /__/ /_/ /
\___/\__/_/

containerd CLI


USAGE:
   ctr [global options] command [command options] [arguments...]

VERSION:
   1.7.22

DESCRIPTION:
   
ctr is an unsupported debug and administrative client for interacting
with the containerd daemon. Because it is unsupported, the commands,
options, and operations are not guaranteed to be backward compatible or
stable from release to release of the containerd project.

COMMANDS:
   plugins, plugin            Provides information about containerd plugins
   version                    Print the client and server versions
   containers, c, container   Manage containers
   content                    Manage content
   events, event              Display containerd events
   images, image, i           Manage images
   leases                     Manage leases
   namespaces, namespace, ns  Manage namespaces
   pprof                      Provide golang pprof outputs for containerd
   run                        Run a container
   snapshots, snapshot        Manage snapshots
   tasks, t, task             Manage tasks
   install                    Install a new package
   oci                        OCI tools
   sandboxes, sandbox, sb, s  Manage sandboxes
   info                       Print the server info
   deprecations               
   shim                       Interact with a shim directly
   help, h                    Shows a list of commands or help for one command

GLOBAL OPTIONS:
   --debug                      Enable debug output in logs
   --address value, -a value    Address for containerd's GRPC server (default: "/run/containerd/containerd.sock") [$CONTAINERD_ADDRESS]
   --timeout value              Total timeout for ctr commands (default: 0s)
   --connect-timeout value      Timeout for connecting to containerd (default: 0s)
   --namespace value, -n value  Namespace to use with commands (default: "default") [$CONTAINERD_NAMESPACE]
   --help, -h                   show help
   --version, -v                print the version
获取命令帮助
[root@centosone bing]# ctr images
NAME:
   ctr images - manage images

USAGE:
   ctr images command [command options] [arguments...]

COMMANDS:
   check                    check existing images to ensure all content is available locally
   export                   export images
   import                   import images
   list, ls                 list images known to containerd
   mount                    mount an image to a target path
   unmount                  unmount the image from the target
   pull                     pull an image from a remote
   push                     push an image to a remote
   delete, del, remove, rm  remove one or more images by reference
   tag                      tag an image
   label                    set and clear labels for an image
   convert                  convert an image

OPTIONS:
   --help, -h  show help

3.2 查看镜像

[root@centosone bing]# ctr images ls
REF TYPE DIGEST SIZE PLATFORMS LABELS

3.3 下载镜像

containerd支持oci标准的镜像,所以可以直接使用docker官方或dockerfile构建的镜像

[root@centosone bing]# ctr images pull --all-platforms docker.io/library/nginx:alpine

docker.io/library/nginx:alpine:                                                   resolved       |++++++++++++++++++++++++++++++++++++++|
docker.io/library/nginx:alpine:                                                   resolved       |++++++++++++++++++++++++++++++++++++++|
index-sha256:da9c94bec1da829ebd52431a84502ec471c8e548ffb2cedbf36260fd9bd1d4d3:    done           |++++++++++++++++++++++++++++++++++++++|
manifest-sha256:050385609d832fae11b007fbbfba77d0bba12bf72bc0dca0ac03e09b1998580f: done           |++++++++++++++++++++++++++++++++++++++|
layer-sha256:f2303c6c88653b9a6739d50f611c170b9d97d161c6432409c680f6b46a5f112f:    done           |++++++++++++++++++++++++++++++++++++++|
config-sha256:bef258acf10dc257d641c47c3a600c92f87be4b4ce4a5e4752b3eade7533dcd9:   done           |++++++++++++++++++++++++++++++++++++++|
layer-sha256:59bf1c3509f33515622619af21ed55bbe26d24913cedbca106468a5fb37a50c3:    done           |++++++++++++++++++++++++++++++++++++++|
layer-sha256:8d6ba530f6489d12676d7f61628427d067243ba4a3a512c3e28813b977cb3b0e:    done           |++++++++++++++++++++++++++++++++++++++|
layer-sha256:5288d7ad7a7f84bdd19c1e8f0abb8684b5338f3da86fe9ae1d7f0e9bc2de6595:    done           |++++++++++++++++++++++++++++++++++++++|
layer-sha256:39e51c61c033442d00c40a30b2a9ed01f40205875fbd8664c50b4dc3e99ad5cf:    done           |++++++++++++++++++++++++++++++++++++++|
layer-sha256:ee6f71c6f4a82b2afd01f92bdf6be0079364d03020e8a2c569062e1c06d3822b:    done           |++++++++++++++++++++++++++++++++++++++|
elapsed: 11.0s                                                                    total:  8.7 Mi (809.5 KiB/s)                                    
unpacking linux/amd64 sha256:da9c94bec1da829ebd52431a84502ec471c8e548ffb2cedbf36260fd9bd1d4d3...
done: 1.860946163s

说明:
这里ctr命令pull镜像时,不能直接把镜像名字写成nginx:alpine

查看已下载容器镜像

[root@centosone bing]# ctr images ls
REF                            TYPE                                                      DIGEST                                                                  SIZE    PLATFORMS                                                                                LABELS
docker.io/library/nginx:alpine application/vnd.docker.distribution.manifest.list.v2+json sha256:da9c94bec1da829ebd52431a84502ec471c8e548ffb2cedbf36260fd9bd1d4d3 9.7 MiB linux/386,linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64/v8,linux/ppc64le,linux/s390x -
REFTYPEDIGEST
docker.io/library/nginx:alpineapplication/vnd.docker.distribution.manifest.list.v2+jsonsha256:da9c94bec1da829ebd52431a84502ec471c8e548ffb2cedbf36260fd9bd1d4d3
SIZEPLATFORMSLABELS
9.7MiBlinux/386,linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64/v8,linux/ppc64le,linux/s390x-
指定平台下载容器镜像
[root@centosone bing]# ctr images pull --platform linux/amd64 docker.io/library/nginx:alpine

3.4 镜像挂载卸载

方便查看镜像中包含的内容。
把已下载的容器镜像挂载至当前文件系统
[root@centosone bing]# ctr images mount docker.io/library/nginx:alpine /mnt
sha256:af2fcce448e2e4451a5f4796a9bf9cb5c9b5f88e0d6d10029cada42fb9d268ac
/mnt
[root@centosone bing]# ls /mnt
bin  dev  docker-entrypoint.d  docker-entrypoint.sh  etc  home  lib  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

卸载
# umount /mnt

3.5 镜像导出

把容器镜像导出
[root@centosone bing]# ctr i export --all-platforms nginx.img docker.io/library/nginx:alpine

说明
--all-platforms,导出所有平台镜像,本版本为1.6版本,1.4版本不需要添加此选项。

查看已导出容器镜像
# ls
nginx.img

# ls -lh
总用量 196M

-rw-r--r--  1 root root  73M 2月  18 14:48 nginx.img

3.6 镜像删除

删除指定容器镜像
[root@centosone bing]# ctr image rm docker.io/library/nginx:alpine
docker.io/library/nginx:alpine

再次查看容器镜像
[root@centosone bing]# ctr images ls
REF TYPE DIGEST SIZE PLATFORMS LABELS

3.7 镜像导入

导入容器镜像
[root@centosone bing]# ctr images import nginx.img
unpacking docker.io/library/nginx:alpine (sha256:da9c94bec1da829ebd52431a84502ec471c8e548ffb2cedbf36260fd9bd1d4d3)...done

3.8 修改镜像tag

[root@centosone bing]# ctr images tag docker.io/library/nginx:alpine nginx:alpine
nginx:alpine

说明:
把docker.io/library/nginx:alpine 修改为 nginx:alpine

查看修改后的容器镜像
[root@centosone bing]# ctr images ls
REF                            TYPE                                                      DIGEST                                                                  SIZE    PLATFORMS                                                                                LABELS
docker.io/library/nginx:alpine application/vnd.docker.distribution.manifest.list.v2+json sha256:da9c94bec1da829ebd52431a84502ec471c8e548ffb2cedbf36260fd9bd1d4d3 9.7 MiB linux/386,linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64/v8,linux/ppc64le,linux/s390x -
nginx:alpine                   application/vnd.docker.distribution.manifest.list.v2+json sha256:da9c94bec1da829ebd52431a84502ec471c8e548ffb2cedbf36260fd9bd1d4d3 9.7 MiB linux/386,linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64/v8,linux/ppc64le,linux/s390x -

修改后对容器镜像做检查比对
[root@centosone bing]# ctr images check
REF                            TYPE                                                      DIGEST                                                                  STATUS         SIZE            UNPACKED
docker.io/library/nginx:alpine application/vnd.docker.distribution.manifest.list.v2+json sha256:da9c94bec1da829ebd52431a84502ec471c8e548ffb2cedbf36260fd9bd1d4d3 complete (7/7) 9.7 MiB/9.7 MiB true

nginx:alpine                   application/vnd.docker.distribution.manifest.list.v2+json sha256:da9c94bec1da829ebd52431a84502ec471c8e548ffb2cedbf36260fd9bd1d4d3 complete (7/7) 9.7 MiB/9.7 MiB true

四、Containerd容器管理

4.1 获取命令帮助

4.1.1 获取ctr命令帮助

[root@centosone bing]# ctr --help
NAME:
   ctr - 
        __
  _____/ /______
 / ___/ __/ ___/
/ /__/ /_/ /
\___/\__/_/

containerd CLI


USAGE:
   ctr [global options] command [command options] [arguments...]

VERSION:
   1.7.22

DESCRIPTION:
   
ctr is an unsupported debug and administrative client for interacting
with the containerd daemon. Because it is unsupported, the commands,
options, and operations are not guaranteed to be backward compatible or
stable from release to release of the containerd project.

COMMANDS:
   plugins, plugin            Provides information about containerd plugins
   version                    Print the client and server versions
   containers, c, container   Manage containers
   content                    Manage content
   events, event              Display containerd events
   images, image, i           Manage images
   leases                     Manage leases
   namespaces, namespace, ns  Manage namespaces
   pprof                      Provide golang pprof outputs for containerd
   run                        Run a container
   snapshots, snapshot        Manage snapshots
   tasks, t, task             Manage tasks
   install                    Install a new package
   oci                        OCI tools
   sandboxes, sandbox, sb, s  Manage sandboxes
   info                       Print the server info
   deprecations               
   shim                       Interact with a shim directly
   help, h                    Shows a list of commands or help for one command

GLOBAL OPTIONS:
   --debug                      Enable debug output in logs
   --address value, -a value    Address for containerd's GRPC server (default: "/run/containerd/containerd.sock") [$CONTAINERD_ADDRESS]
   --timeout value              Total timeout for ctr commands (default: 0s)
   --connect-timeout value      Timeout for connecting to containerd (default: 0s)
   --namespace value, -n value  Namespace to use with commands (default: "default") [$CONTAINERD_NAMESPACE]
   --help, -h                   show help
   --version, -v                print the version

4.1.2 获取创建静态容器命令帮助

[root@centosone bing]# ctr container --help
NAME:
   ctr containers - manage containers

USAGE:
   ctr containers command [command options] [arguments...]

COMMANDS:
   create                   create container
   delete, del, remove, rm  delete one or more existing containers
   info                     get info about a container
   list, ls                 list containers
   label                    set and clear labels for a container
   checkpoint               checkpoint a container
   restore                  restore a container from checkpoint

OPTIONS:
   --help, -h  show help

说明:

使用`ctr container create `命令创建容器后,容器并没有处于运行状态,其只是一个静态的容器。这个 container 对象只是包含了运行一个容器所需的资源及配置的数据结构,例如: namespaces、rootfs 和容器的配置都已经初始化成功了,只是用户进程(本案例为nginx)还没有启动。需要使用`ctr tasks`命令才能获取一个动态容器。

4.1.3 获取动态容器命令帮助

[root@centosone bing]# ctr run --help
NAME:
   ctr run - run a container

USAGE:
   ctr run [command options] [flags] Image|RootFS ID [COMMAND] [ARG...]
   
OPTIONS:
   --rm                                    remove the container after running
   --null-io                               send all IO to /dev/null
   --log-uri value                         log uri
   --detach, -d                            detach from the task after it has started execution
   --fifo-dir value                        directory used for storing IO FIFOs
   --cgroup value                          cgroup path (To disable use of cgroup, set to "" explicitly)
   --platform value                        run image for specific platform
   --cni                                   enable cni networking for the container
   --runc-binary value                     specify runc-compatible binary
   --runc-root value                       specify runc-compatible root
   --runc-systemd-cgroup                   start runc with systemd cgroup manager
   --uidmap container-uid:host-uid:length  run inside a user namespace with the specified UID mapping range; specified with the format container-uid:host-uid:length
   --gidmap container-gid:host-gid:length  run inside a user namespace with the specified GID mapping range; specified with the format container-gid:host-gid:length
   --remap-labels                          provide the user namespace ID remapping to the snapshotter via label options; requires snapshotter support
   --cpus value                            set the CFS cpu quota (default: 0)
   --cpu-shares value                      set the cpu shares (default: 1024)
   --snapshotter value                     snapshotter name. Empty value stands for the default value. [$CONTAINERD_SNAPSHOTTER]
   --snapshotter-label value               labels added to the new snapshot for this container.
   --config value, -c value                path to the runtime-specific spec config file
   --cwd value                             specify the working directory of the process
   --env value                             specify additional container environment variables (e.g. FOO=bar)
   --env-file value                        specify additional container environment variables in a file(e.g. FOO=bar, one per line)
   --label value                           specify additional labels (e.g. foo=bar)
   --mount value                           specify additional container mount (e.g. type=bind,src=/tmp,dst=/host,options=rbind:ro)
   --net-host                              enable host networking for the container
   --privileged                            run privileged container
   --read-only                             set the containers filesystem as readonly
   --runtime value                         runtime name (default: "io.containerd.runc.v2")
   --runtime-config-path value             optional runtime config path
   --tty, -t                               allocate a TTY for the container
   --with-ns value                         specify existing Linux namespaces to join at container runtime (format '<nstype>:<path>')
   --pid-file value                        file path to write the task's pid
   --gpus value                            add gpus to the container
   --allow-new-privs                       turn off OCI spec's NoNewPrivileges feature flag
   --memory-limit value                    memory limit (in bytes) for the container (default: 0)
   --device value                          file path to a device to add to the container; or a path to a directory tree of devices to add to the container
   --cap-add value                         add Linux capabilities (Set capabilities with 'CAP_' prefix)
   --cap-drop value                        drop Linux capabilities (Set capabilities with 'CAP_' prefix)
   --seccomp                               enable the default seccomp profile
   --seccomp-profile value                 file path to custom seccomp profile. seccomp must be set to true, before using seccomp-profile
   --apparmor-default-profile value        enable AppArmor with the default profile with the specified name, e.g. "cri-containerd.apparmor.d"
   --apparmor-profile value                enable AppArmor with an existing custom profile
   --rdt-class value                       name of the RDT class to associate the container with. Specifies a Class of Service (CLOS) for cache and memory bandwidth management.
   --rootfs                                use custom rootfs that is not managed by containerd snapshotter
   --no-pivot                              disable use of pivot-root (linux only)
   --cpu-quota value                       Limit CPU CFS quota (default: -1)
   --cpu-period value                      Limit CPU CFS period (default: 0)
   --rootfs-propagation value              set the propagation of the container rootfs

说明:
使用`ctr run`命令可以创建一个静态容器并使其运行。一步到位运行容器。

4.2 查看容器

container表示静态容器,可用c缩写代表container

[root@centosone bing]# ctr container ls
CONTAINER    IMAGE    RUNTIME

[root@centosone bing]# ctr c ls
CONTAINER    IMAGE    RUNTIME

4.3 查看任务

task表示容器里跑的进程, 可用t缩写代表task

[root@centosone bing]# ctr task ls
TASK    PID    STATUS

[root@centosone bing]# ctr t ls
TASK    PID    STATUS

4.4 创建静态容器

[root@centosone bing]# ctr c create docker.io/library/nginx:alpine nginx1

[root@centosone bing]# ctr container ls
CONTAINER    IMAGE                             RUNTIME
nginx1       docker.io/library/nginx:alpine    io.containerd.runc.v2

查看容器详细信息
[root@centosone bing]# ctr container info nginx1
{
    "ID": "nginx1",
    "Labels": {
        "io.containerd.image.config.stop-signal": "SIGQUIT",
        "maintainer": "NGINX Docker Maintainers \u003cdocker-maint@nginx.com\u003e"
    },
 ......

4.5 静态容器启动为动态容器

1、复制containerd连接runC垫片工具至系统
[root@centosone bing]# ls usr/local/bin/
containerd  containerd-shim  containerd-shim-runc-v1  containerd-shim-runc-v2  containerd-stress  crictl  critest  ctd-decoder  ctr
[root@centosone bing]# cp usr/local/bin/containerd-shim-runc-v2 /usr/bin/

2、启动task,即表时在容器中运行了进程,即为动态容器。
# ctr task start -d nginx1
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/

说明:
-d表示daemon或者后台的意思,否则会卡住终端

3、查看容器所在宿主机进程,是以宿主机进程的方式存在的。
[root@centosone bing]# ctr task ls
TASK      PID        STATUS    
nginx1    1607528    RUNNING

4、查看容器的进程(都是物理机的进程)
# ctr task ps nginx1
[root@centosone bing]# ctr task ps nginx1
PID        INFO
1607528    -
1607565    -
1607566    -

5、物理机查看到相应的进程
[root@centosone bing]# ps -ef | grep 1607528
root     1607528 1607487  0 00:06 ?        00:00:00 nginx: master process nginx -g daemon off;
101      1607565 1607528  0 00:06 ?        00:00:00 nginx: worker process
101      1607566 1607528  0 00:06 ?        00:00:00 nginx: worker process
root     1608553 1591861  0 00:09 pts/0    00:00:00 grep --color=auto 1607528

4.6 进入容器操作

# ctr task exec --exec-id 1 nginx1 /bin/sh

ifconfig 查看网卡信息
lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

curl 127.0.0.1 访问本地提供的web服务
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>
100   615  100   615    0     0   429k      0 --:--:-- --:--:-- --:--:--  600k

说明:
为exec进程设定一个id,可以随意输入,只要保证唯一即可,也可使用$RANDOM变量。

4.7 直接运行一个动态容器

[root@centosone bing]# ctr c ls
CONTAINER    IMAGE                             RUNTIME                  
nginx2       docker.io/library/nginx:latest    io.containerd.runc.v2   

说明:
* -d 代表dameon,后台运行
* --net-host 代表容器的IP就是宿主机的IP(相当于docker里的host类型网络)

2、查看已运行容器
[root@centosone bing]# ctr c ls
CONTAINER    IMAGE                             RUNTIME                  
nginx2       docker.io/library/nginx:latest    io.containerd.runc.v2   

3、查看已运行容器中运行的进程,既tasks
[root@centosone bing]# ctr t ls
TASK      PID        STATUS    
nginx2    1591758    RUNNING

4、进入容器
# ctr task exec --exec-id 1 -t nginx2 /bin/sh

/ # ifconfig 
ens33     Link encap:Ethernet  HWaddr 00:0C:29:B1:B6:1D
          inet addr:10.211.55.5  Bcast:10.255.255.255  Mask:255.0.0.0
          inet6 addr: fe80::2b33:40ed:9311:8812/64 Scope:Link
          inet6 addr: fe80::adf4:a8bc:a1c:a9f7/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:55360 errors:0 dropped:0 overruns:0 frame:0
          TX packets:30526 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:53511295 (51.0 MiB)  TX bytes:2735050 (2.6 MiB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:68 errors:0 dropped:0 overruns:0 frame:0
          TX packets:68 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:5916 (5.7 KiB)  TX bytes:5916 (5.7 KiB)

virbr0    Link encap:Ethernet  HWaddr 52:54:00:E9:51:82
          inet addr:10.211.55.5  Bcast:10.255.255.255  Mask:255.0.0.0
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

5、为容器中运行的网站添加网站文件
[root@centosone bing]# ctr task exec --exec-id 1 -t nginx2 /bin/bash
root@centosone:/# echo "nginx2" > /usr/share/nginx/html/index.html                                                                
root@centosone:/# exit
exit

6、在宿主机上访问网站
[root@centosone bing]# curl 10.211.55.5
nginx2

4.8 暂停容器

查看容器状态
[root@centosone bing]# ctr tasks ls
TASK      PID     STATUS
nginx2    1591758    PAUSED

暂停容器
[root@centosone bing]# ctr tasks pause nginx2

再次查看容器状态,看到其状态为PAUSED,表示停止。
[root@centosone bing]# ctr tasks ls
TASK      PID     STATUS
nginx2    1591758    PAUSED

[root@centosone bing]# curl http://10.211.55.5
在宿主机访问,发现不可以访问到网站

4.9 恢复容器

使用resume命令恢复容器
[root@centosone bing]# ctr tasks resume nginx2

查看恢复后状态
[root@centosone bing]# ctr tasks ls
TASK      PID     STATUS
nginx2    1591758    RUNNING

在宿主机上访问容器中提供的服务
[root@centosone bing]# curl http://10.211.55.5
nginx2

4.10 停止容器

[root@centosone bing]# ctr tasks --help
NAME:
   ctr tasks - manage tasks

USAGE:
   ctr tasks command [command options] [arguments...]

COMMANDS:
   attach                   attach to the IO of a running container
   checkpoint               checkpoint a container
   delete, del, remove, rm  delete one or more tasks
   exec                     execute additional processes in an existing container
   list, ls                 list tasks
   kill                     signal a container (default: SIGTERM)
   pause                    pause an existing container
   ps                       list processes for container
   resume                   resume a paused container
   start                    start a container that has been created
   metrics, metric          get a single data point of metrics for a task with the built-in Linux runtime

OPTIONS:
   --help, -h  show help


使用kill命令停止容器中运行的进程,既为停止容器
[root@centosone bing]# ctr tasks kill nginx2

查看容器停止后状态,STATUS为STOPPED
[root@centosone bing]# ctr tasks ls
TASK      PID        STATUS    
nginx2    1591758    RUNNING
nginx1    1607528    RUNNING

4.11 删除容器

[root@centosone bing]# ctr tasks delete nginx2
必须先停止tasks或先删除task,再删除容器

查看静态容器,确认其还存在于系统中
[root@centosone bing]# ctr container ls
CONTAINER    IMAGE                             RUNTIME
nginx2       docker.io/library/nginx:alpine    io.containerd.runc.v2

删除容器
[root@centosone bing]# ctr container delete nginx2

参考

https://github.com/containerd/containerd/blob/main/docs/getting-started.md

标签:容器,centosone,ctr,--,containerd,管理工具,root,轻量级
From: https://blog.csdn.net/qq_36037795/article/details/144485209

相关文章

  • converge许可管理工具和软件的选择
    随着企业数字化转型的步伐加快,团队协作和许可管理变得越来越重要。在众多许可管理工具和软件中,如何选择最适合您的Converge许可管理工具和软件呢?本文将为您提供一些指导建议,帮助您做出明智的选择。一、明确需求与目标在选择Converge许可管理工具和软件之前,首先要明确您的需求和......
  • 微服务之容器
    微服务容器化的优势环境一致性:容器为微服务提供了一个独立且隔离的运行环境。无论在开发、测试还是生产环境,微服务及其依赖项都可以打包在容器中。这意味着,从开发人员的本地环境到生产服务器,微服务都能在相同的操作系统环境、软件库版本等条件下运行。例如,一个使用特定版本的P......
  • 容器与虚拟机的区别与关系
    本文分享自天翼云开发者社区《容器与虚拟机的区别与关系》,作者:small倩什么是虚拟机技术?传统的虚拟机技术(VMware)将一组硬件虚拟化,在其上安装并运行一个完整的操作系统,然后在该系统上运行所需的应用进程;虚拟机就像一台主机。什么是容器?容器是一个应用层面的抽象,用于将代码和依赖......
  • LameUI:轻量级嵌入式图形用户界面的绝佳选择
    在信息技术迅猛发展的今天,嵌入式系统逐渐成为各种智能设备的核心。这些系统往往面临资源有限的挑战,因此在开发用户界面时,使用轻量级、易于实现的库显得尤为重要。在这种背景下,LameUI应运而生。作为一个轻量级且平台无关的图形用户界面库,LameUI旨在为开发者提供简便的UI解决方......
  • 《Docker - Docker Container(容器)之容器实战》
    一、引言Docker是一种开源的容器化平台,它可以将应用程序及其依赖项打包到一个可移植的容器中,从而实现快速部署、可扩展性和隔离性。在Docker中,容器是运行应用程序的基本单元,它提供了一种轻量级、高效的方式来管理应用程序的运行环境。本文将介绍Docker容器的实战应用,包......
  • 如何让img自动适应div容器大小?
    在前端开发中,要使图像(<img>)自动适应其包含的<div>容器的大小,你可以使用CSS的一些属性。下面是一些常见的方法:1.使用max-width和height:auto你可以将图像的max-width设置为100%,这样它就不会超过其容器的宽度。同时,将height设置为auto可以保持图像的原始纵横比。......
  • Adobe Lightroom Classic(LRC)专业的照片编辑和管理工具WIN下载安装
    LRC下载链接链接:https://pan.baidu.com/s/1JUsISssUwJycn5gXDIpK2w?pwd=ss2a提取码:ss2a 一、功能介绍1.1照片导入与管理AdobeLightroomClassic允许用户轻松导入和组织照片。用户可以从不同来源(如相机、存储卡、硬盘等)导入照片,并将其分类到不同的收藏夹中。LRC支持......
  • 盛水最多的容器
    给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i,0) 和 (i,height[i]) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。说明:你不能倾斜容器。示例1:输入:[1,8,6,2,5,4,8,3......
  • 大数据之信创MySQL替代_国产数据库_OceanBase数据库005_在centos7.9上_安装部署OceanB
    dk是简略的写法: 然后我们再来看一下如何使用dk来部署一下OceanBase官网也很详细.首先去systemctlstartdk 启动dk启动dk以后,然后去拉取镜像可以看到我们电脑中本来就有很多镜像,先全部关掉dk stop'dk ps-qa'......
  • 【大数据】大数据 Hadoop 管理工具 Apache Ambari(HDP)
    一、概述ApacheAmbari是Hortonworks贡献给Apache开源社区的顶级项目,它是一个基于web的工具,用于安装、配置、管理和监视Hadoop集群。Ambari目前已支持大多数Hadoop组件,包括HDFS、MapReduce、Hive、Pig、Hbase、Zookeper、Sqoop和Hcatalog等。ApacheAmbari支持H......