Containerd初体验

一:Containerd初体验

1:Containerd概述

Containerd(containerd Daemon)是一个开源的容器运行时,它提供了一种标准化的方式来管理容器的生命周期。该项目最初是由Docker开发团队创建的,并在后来成为一个独立的项目,被纳入了Cloud Native Comouting Foundation (CNCF)的孵化项目中。

2:Containerd的特点和功能

  • 容器生命周期管理

        Containerd管理容器的生命周期,包括容器的创建,运行,暂停,恢复,停止和销毁操作。

  • 标准化接口

        Containerd提供了一个标准化的容器运行时接口,使得它可以与多个容器编排系统和工具集成,例如Kubernetes,Docker Compose。

  • 镜像管理

        它支持容器镜像的拉取,推送,保存和加载等操作。Containerd使用OCI(Open Container Initiative)规范定义容器镜像的格式。        

  • 插件体系结构

Containerd具有可扩展的插件体系结构,允许用户通过插件来扩展其功能,例如网络存储驱动,网络插件等。

  • 跨平台支持

        Containerd 可以在不同的操作系统上运行,从而提供了跨平台的支持。

  • Kubernetes集成

        Conrainerd作为Kubernetes的默认容器运行时,与Kubernetes紧密集成,为容器工作负载的管理提供了良好的支持。

  • 安全性和隔离

        Containerd 实现了严格的容器隔离和安全性措施,确保容器之间的隔离性以及对主机系统的安全性。

2:Containerd 的起源与背景

Docker最初作为一个开源项目推出,旨在简化应用程序的打包、分发和部署过程。Docker引入了容器的概念,将应用程序和其依赖项打包到一个容器中,个使得应用在不同环境中可以一致地运行。

  • Docker架构拆分:Docker从单一的大型引擎拆分为一系列小型、可复用的组件。这种拆分的目标是提高可维护性、模块化和可扩展性。
  • Containerd作为核心运行时:在Docker架构拆分后,containerd被定位为Docker的核心容器运行时。它负责管理容器的生命周期、镜像操作和基本运行时功能。
  • 贡献给cNcF:为了推动Containerd的发展,Docker团队将containerd的代码捐赠给了Cloud Native Computing Foundation(CNcF),使其成为CNF的孵化项目。
  • 容器生态系统的标准化:Containerd的设计遵循Open Container Initiative(开放容器倡议0cI)规范,这是一个关注容器运行时和镜像格式标准化的开放标准组织。这意味着containerd可以与符合OCI规范的其他容器工具和运行时进行互操作。
  • 独立的容器运行时:containerd不仅仅局限于Docker,它可以作为独立的容器运行时,与多个容器编排系统和工具集成,从而为用户提供更多选择。
  • 总体而言,containerd的起源是为了简化容器运行时的管理,并为容器生态系统提供一个开放、标准化的基础。其发展不仅服务于Docker生态系统,还为整个容器领域提供了一个通用的、可扩展的容器运行时。

二:Containerd架构

1.核心组件解析

Containerd组件大致分为Storage、Metadata和Runtime这三个主要方面。 

Storage(存储)

Content(内容)
功能:Content存储了容器镜像的实际数据。这包括文件系统层和元数据,用于创建和管理容器的基础
文件系统。
Snapshot(快照)
功能:
Snapshot存储容器的快照数据。每个容器都可以有一个或多个快照,允许它们共享相同的文件系统层,提高效率。
Diff(差异)
功能:Diff存储容器文件系统层之间的差异。当容器运行时需要修改文件系统时,会在已有的文件系统层上创建一个差异层,以保存变更。

Metadata(元数据)

Images(镜像)
功能:Images存储容器镜像的元数据,包括镜像的标签、大小、创建时间等信息。Metadata中的Images
组件允许容器对镜像进行管理和操作。
Containers(容器)

功能:Containers存储容器的元数据,包括容器的状态、配置信息、网络设置等。这部分元数据使得容器能够有效地管理容器的生命周期。

Runtime(运行时)

Tasks(任务)
功能:Tasks包含容器内的进程组。每个容器运行时都有关联的Task,它负责管理容器内的所有进程。Tasks与Shim一起工作,维护容器的状态。
Events(事件)
功能:Events组件记录了容器的各种事件,如容器的创建、启动、停止等。这些事件可以用于监控和日志记录,帮助用户了解容器系统的运行状况。

三:安装配置Containerd

1.安装Containerd

配置好阿里的基础镜像源

rm -rf /etc/yum.repos.d/*
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
yum clean all

# step 1: 安装必要的一些系统工具 sudo yum install -y yum-utils device-mapper-persistent-data lvm2

# Step 2: 添加软件源信息 sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# Step 3 sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo

#列出可用版本
yum list containerd.io  --showduplicates
#安装containerd
yum -y install containerd.io

2.配置Containerd

(1)生成配置文件

mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml

 sudo tee /etc/containerd/config.toml:tee命令通常用来读取标准输入,并将其内容写入文件和输出到终端。
/etc/containerd/,config.toml是containerd的配置文件路径,这里指定了配置文件的具体位置。
使用containerd config default命令获取containerd的默认配置信息;
通过管道|将这些配置信息传递给tee命令;
使用sudo tee/etc/containerd/config.toml以管理员权限创建或覆盖/etc/containerd,/config.toml文件,并将之前获取的配置信息写入其中。
(2)配置镜像加速

#使用Vi打开配置文件

vim /etc/containerd/config.toml

#找到[plugins."io.containerd.grpc.vl.cri".registry.mirrors]在下面添加
#添加阿里云的镜像源

      [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
        [plugins."io.containerd.grpc.v1.cri".registry.config."docker.io"]
          endpoint = ["https://registry.cn-hangzhou.aliyuncs.com" ,"https://registry-1.docker.io"]

(3)启动服务 

systemctl enable containerd
systemctl start containerd

#查看版本
[root@localhost ~]ctr version

 四:Containerd基本操作

1:镜像类操作

(1)拉取镜像
使用ctr images pull命令可以下载镜像
命令格式:
ctr images pul1镜像名称:[镜像标签]

[root@localhost ~]ctr images pull hub.atomgit.com/amd64/nginx:1.25.2-perl

(2)查看镜像
查看本地有哪些镜像可以使用ctr images ls

[root@localhost ~]ctr images ls

(3)检测本地镜像
主要查看其中的STATUS,complete表示镜像是完整可用的状态。
命令格式:
ctr images check

(4)重新打标签
命令格式:
ctr images tag  当前镜像名称  新镜像名称

(5)删除镜像
命令格式:
ctr images rm   镜像名称:[镜像标签]

(6)镜像挂载到主机目录
Containerd可以把镜像直接挂载到宿主机的某个目录
命令格式:
ctr images mount   镜像挂载点

(7)镜像从主机目录卸载
用于将挂载到宿主机的镜像卸载下来
命令格式:
ctr images unmount挂载点

(8)镜像导出
该命令主要用于把镜像保存成文件
命令格式:
ctr images export-all-platforms 文件名镜像名称:[镜像标签]

(9)镜像导入
该命令主要用于把文件加载为镜像
命令格式:
ctr images import  文件名

2:容器类操作

Containerd本身并没有直接支持端口映射的功能。端口映射通常是由容器运行时(比如Docker、CRI-0)负责的,而不是容器的底层运行时(Containerd)。

(1)创建容器

#基于docker.io/1 ibrary/nginx:latest镜像创建一个叫nginx的容器
[root@localhost ~]ctr containers create nginx:v1 nginx

(2)列出容器
[root@localhost ~]ctr containers ls
(3)查看容器的详细信息
[root@localhost ~]ctr containers info nginx
(4)删除容器

[root@localhost ~]ctr containers rm nginx

3:任务类操作

我们通过container create命令创建的容器,并没有处于运行状态,只是一个静态的容器(仅仅只
是一个创建容器的声明)。一个container对象只是包含了运行一个容器所需的资源及相关配置数据,表示namespaces、rootfs和容器的配置都已经初始化成功了,只是用户进程还没有启动。一个容器真正运行起来是由Task任务实现的。

(1)启动容器

#-d放入后台
[root@localhost ~]ctr task start -d nginx

(2)查看容器
[root@localhost ~]ctr task ls

(3)进入容器里面
#进入到容器里面
#不过这里需要注意必须要指定--exec-id参数,这个id可以随便写,只要唯一就行
[root@localhost ~]ctr task exec --exec-id 0 -t nginx sh

(4)暂停容器
[root@localhost ~]ctr task pause nginx
(5)恢复容器
[root@localhost ~]ctr task resume nginx
(6)杀死容器
#杀死容器,ctr没有stop容器的功能,只能暂停或者杀死容器
[root@localhost ~]ctr task kill nginx
(7)删除任务
[root@localhost ~ctr task rm nginx

(8)删除容器
[root@localhost ~]ctr task kill nginx
[root@localhost ~]ctr container rm nginx
注意:
删除容器后快照也就没有了

  • 12
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值