containerd的作用以及跟docker的区别

Containerd是一个用于管理容器生命周期的开源项目。它最初是从Docker项目中分离出来的,现在已经成为了一个独立的项目。它可以用作容器镜像管理工具和容器运行时。它具有以下主要作用:

  1. 帮助管理容器镜像。它可以下载,上传,删除容器镜像,并对镜像进行分类和标记。

  2. 负责容器的生命周期管理。它可以启动,停止和销毁容器,以及监控容器的运行状态。

  3. 安全性。Containerd对容器运行的安全性进行了加强。

相比之下,Docker是一个完整的容器解决方案,包括构建镜像和管理容器,而Containerd只是一个容器运行时和镜像管理工具。Docker可以轻松快速的构建、部署和管理应用程序和服务,而Containerd主要关注于运行容器的安全性和稳定性,更适合用于大规模生产环境。此外,Docker对开发人员和管理员的用户体验更为友好,而Containerd更加适合高级用户和专业人士的使用。

环境准备

系统:rocky9.2


部署流程

1.安装下载工具

dnf -y install wget

2.获取阿里云yum源

wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

3.安装containerd

dnf -y install containerd.io

4.生成containerd配置文件

containerd config default > /etc/containerd/config.toml

5.编辑配置文件更改为国内镜像源

vim /etc/containerd/config.toml

61     sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"
# 将61行"registry.k8s.io/pause:3.6" 改为"registry.aliyuncs.com/google_containers/pause:3.9"这里指定获取镜像的源为国内镜像源,如果为国外的镜像源可能无法获取镜像 125 SystemdCgroup = true
# 将125行“false”改为“true”这里允许使用SystemdCgroup控制组进行管理

6.立即启动containerd并加入自启

systemctl enable containerd.service --now

7.查看containerd是否部署成功

ctr images ls


containerd使用

1.拉取镜像

ctr i pull docker.io/library/nginx:{镜像版本号}

2.查看成功拉取的镜像

ctr i ls

3.导入镜像

ctr i import /root/{镜像名称}.tar

4.导出镜像

ctr i export {文件名}.tar docker.io/library/nginx:latest{镜像名称}

5.删除镜像

ctr i remove docker.io/library/nginx:latest

6.修改镜像tag

ctr images tag docker.io/library/nginx:latest nginx:latest

测试环节

1.拉取nginx镜像

ctr i pull docker.io/library/nginx:latest

2.创建容器

ctr c create docker.io/library/nginx:latest nginx

# 创建       指定镜像名                   自定义的创建的的容器的名字

上面我们通过 container create 命令创建的容器,并没有处于运行状态,只是一个静态的容器。一个 container 对象只是包含了运行一个容器所需的资源及相关配置数据,表示 namespaces、rootfs 和容器的配置都已经初始化成功了,只是用户进程还没有启动。

一个容器真正运行起来是由 Task 任务实现的,Task 可以为容器设置网卡,还可以配置工具来对容器进行监控等。

Task 相关操作可以通过 ctr task 获取,如下我们通过 Task 来启动容器:

3.启动和查看镜像启动状态

ctr task start -d nginx
ctr task ls

4.查看已经创建的容器

ctr containerd ls

5.删除创建的容器

ctr c delete nginx

6.进入容器内的镜像

ctr task exec --exec-id 0 -t nginx /bin/bash
# -exec-id参数后面的值随便写,只要唯一就行 -t 指定镜像名字

7.暂停容器

ctr task pause nginx

# 暂停后状态变为PAUSED

8.恢复容器

ctr task resume nginx

9.杀死容器

ctr task kill nginx
ctr task rm nginx # 杀死容器后,就无法再使用了,可以通过 rm 命令删除,containerd没有stop功能,只能暂停和杀死容器,杀死后状态为STOPPED # 如果 ctr task kill nginx 命令没有杀死容器,也可以直接使用 kill -9 杀死容器的 PID 号,该方法也可杀死容器 kill -9 23792

10.重启容器

ctr task metrics nginx

请注意,不能仅通过重新启动镜像来恢复之前运行的应用程序状态,因为容器资源是临时性的,并在容器任务停止时被删除。要继续使用之前的容器状态,请备份和还原容器数据,或使用类似 Kubernetes 这样的编排工具来管理容器。

11.将镜像导出为压缩包

ctr i export nginx:latest.tar  docker.io/library/nginx:latest

12.将压缩包导入containerd容器

ctr i import nginx:latest.tar

containerd支持命名空间的概念

Containerd 使用 Linux 命名空间来隔离容器和其资源。在 containerd 中,每个容器都有自己的命名空间,包括:

  • PID 命名空间:确保每个容器内的进程只能看到自己的 PID 空间,从而防止冲突和干扰。
  • Network 命名空间:将每个容器隔离到自己的网络命名空间中,从而允许容器拥有自己的网络配置、IP 地址和网络接口,避免了与主机系统的网络冲突。
  • Mount 命名空间:允许每个容器有自己的文件系统视图和挂载点,而不会与其他容器或主机系统冲突。
  • IPC 命名空间:确保容器内的进程只能与其自身及同一容器内的进程通信,从而保护容器内部的通信安全性。

使用命名空间隔离容器和其中的资源,提高了容器的安全性、稳定性和可靠性。它可以防止容器资源之间的冲突和干扰,并提供了额外的安全层,确保容器应用程序仅访问被授权的资源。同时,通过隔离容器的资源,可以使容器更加移植和可部署,因为它们不需要依赖于主机系统的配置和环境。

总体而言,命名空间是 containerd 实现轻量级虚拟化和容器化的重要功能,它使 containerd 可以创建和管理隔离的容器环境,提供了更高的应用程序安全性和可扩展性。

1.列举已有的命名空间

ctr ns ls

2.查看指定的命名空间底下的镜像

ctr -n default i ls

3.创建和删除命名空间

ctr ns create test
ctr ns rm test

containerd高级命令配置

Containerd 高级命令行工具 nerdctl - taotaozh - 博客园 (cnblogs.com)

containerd在线部署的更多相关文章

  1. 实战docker,编写Dockerfile定制tomcat8镜像,实现web应用在线部署

    最初在tomcat上部署web应用的方式,是通过maven的maven-compiler-plugin插件先打成war包,再将war包复制到tomcat的webapps目录下,后来用上了tomcat7 ...

  2. 实战docker,编写Dockerfile定制tomcat镜像,实现web应用在线部署

    最初在tomcat上部署web应用的方式,是通过maven的maven-compiler-plugin插件先打成war包,再将war包复制到tomcat的webapps目录下,后来用上了tomcat7 ...

  3. 基于containerd二进制部署k8s-v1.23.3

    文章目录 前言 k8s 组件 环境准备 创建目录 关闭防火墙 关闭selinux 关闭swap 开启内核模块 分发到所有节点 启用systemd自动加载模块服务 配置系统参数 分发到所有节点 加载系统 ...

  4. minikube国内在线部署体验

    问题描述: 快速学习k8s的各个组件的作用及yml的编写,minikube很适合. how to install Minikube, a tool that runs a single-node Ku ...

  5. Anno微服务Viper(控制面板) 支持在线部署

    1.Anno简介? Anno是一个微服务框架引擎.入门简单.安全.稳定.高可用.全平台可监控.依赖第三方框架少.可在线升级部署. 2.Viper简介 Viper 是一个基于Anno微服务引擎开发的Da ...

  6. 基于Containerd安装部署高可用Kubernetes集群

    转载自:https://blog.weiyigeek.top/2021/7-30-623.html 简述 Kubernetes(后续简称k8s)是 Google(2014年6月) 开源的一个容器编排引 ...

  7. 在 Kubernetes 集群在线部署 KubeSphere

    https://github.com/kubesphere/ks-installer/blob/master/README_zh.md https://kubesphere.com.cn/docs/i ...

  8. K8S在线部署含Dashborad

    参考文章 https://www.kubernetes.org.cn/5462.html 前言 Kubernetes作为容器编排工具,简化容器管理,提升工作效率而颇受青睐.很多新手部署Kubernet ...

  9. tomcat在线部署且查看堆栈状态

    配合ab压测tomcat站点的并发量,适当调整JVM参数,堆栈,连接数 00.修改conf/tomcat-user.xml 1. 在$Tomcat_Home/conf/tomcat-users.xml ...

  10. Kubeadm部署高可用K8S集群

    一 基础环境 1.1 资源 节点名称 ip地址 VIP 192.168.12.150 master01 192.168.12.48 master02 192.168.12.242 master03 1 ...

随机推荐

  1. 一次STM32进入HardFault_Handler 的解决情况

    STM32进入HardFault_Handler调试 --- title: STM32进入HardFault_Handler调试 date: 2020-06-18 10:26:48 categorie ...

  2. python基础-集合set { }

    集合的定义和操作 集合的特性: 元素数量 支持多个 元素类型 任意 下标索引 支持 重复元素 不支持 可修改性 支持 数据有序 否 使用场景 不可重复的数据记录场景 # 定义集合 my_set = { ...

  3. docker部署微服务之注册中心

    1.首先要对对应服务的pom.xml文件进行修改,添加如下配置. 2.在微服务的pom.xml目录下建立Dockerfile文件 3.在Dockerfile当前目录下执行mvn clean insta ...

  4. mermaid语法画图

    mermaid 脚本语言 graph TB 从上到下 graph BT 从下到上 graph RL 从右到左 graph LR 从左到右 graph LR; A001-->B001; graph ...

  5. java中的基准测试框架JMH

    JHM是openJDK开发的一个benchmark框架.它是一个Maven依赖,所以创建一个Maven项目,引入下面两个依赖: <dependency> <groupId>or ...

  6. Java开发常见问题分析和处理方案

    程序Bug的产生,通常分为三种类型 逻辑漏洞: 低级错误,程序执行后无法达到想要效果. 越界访问: 访问了非法区域,造成程序崩溃. 条件考虑不全面: 你以为你万无一失,但你永远都不知道输入参数究竟是什 ...

  7. Java反射机制原理详解

    什么是反射? Java反射机制的核心是在程序运行时动态加载类并获取类的详细信息,从而操作类或对象的属性和方法.本质是JVM得到class对象之后,再通过class对象进行反编译,从而获取对象的各种信息 ...

  8. Java中字符串去除空格

    1. str.trim(); 去掉首尾空格 2. str.replace(" ", ""); 去掉所有空格,包括首尾.中间 String str = " ...

  9. 使用pyqt5制作简单计分桌面应用

    这是一个自己写的使用pyqt5制作简单计分桌面应用的实例,希望对大家有所帮助.制作这个小程序的起因是因为有个艺术类比赛需要设计这个一个桌面程序,方便统分. (此程序尚存在部分小bug,请慎用,公开代码 ...

  10. [oeasy]python0020换行字符_feed_line_lf_反斜杠n_B语言_安徒生童话

    ​ 换行字符 回忆上次内容 struct包可以让我们使用封包格式 把数字封包到字节里 pack函数负责封包 unpack函数负责解封 我们通过封到不同的字节状态 遍历了一次ascii码 ​ 编辑 还是 ...