K8s弃用Docker后,我们如何用Containerd+nerdctl重建熟悉的Docker工作流?

Kubernetes Containerd ctr、crictl、nerdctl -容器和镜像操作命令工具 k8s 镜像和容器的操作工具的命令工具的使用详解 阅读详情

从Docker到Containerd:用nerdctl无缝迁移容器工作流

当Kubernetes宣布逐步弃用Docker支持时,许多开发者感到不安——不是担心技术演进,而是忧虑那些已经融入肌肉记忆的Docker命令该如何替代。作为容器生态的核心引擎,Containerd虽然轻量高效,但其原生客户端ctr的命令体系与Docker CLI差异显著。本文将揭示如何通过nerdctl工具重建熟悉的操作体验,并分享我们在生产环境中的实战经验。

1. 为什么需要Containerd兼容工具?

在Kubernetes 1.20版本后,默认运行时转向Containerd已成定局。这个由Docker分离出来的核心组件,经过CNCF的孵化已发展成云原生基石。但技术转型的阵痛真实存在:

  • 认知成本 :ctr命令需要指定namespace(如 -n k8s.io ),镜像和容器管理方式与Docker不同
  • 功能缺失 :原生Containerd不支持镜像构建(docker build)、容器网络管理等高频功能
  • 生态割裂 :CI/CD流水线中大量基于Docker CLI的脚本需要重构

我们团队在早期迁移时,曾因ctr的以下特性导致效率下降:

# 对比命令差异
$ docker ps -a  # 查看所有容器
$ ctr -n k8s.io containers ls  # 仅显示运行中容器
$ ctr -n k8s.io tasks ls  # 查看实际运行的task

2. nerdctl:Docker CLI的完美替身

作为Containerd的友好前端,nerdctl(v0.22+)实现了90%的Docker命令兼容性。安装只需三个步骤:

# 在Linux系统安装最新版
wget https://github.com/containerd/nerdctl/releases/download/v1.2.0/nerdctl-1.2.0-linux-amd64.tar.gz
tar Cxzvvf /usr/local nerdctl-1.2.0-linux-amd64.tar.gz
ln -s /usr/local/containerd/bin/nerdctl /usr/bin/nerdctl

2.1 核心功能对比

操作类型 Docker命令 nerdctl命令 ctr命令
镜像管理 docker images nerdctl images ctr -n k8s.io images ls
容器运行 docker run nerdctl run ctr -n k8s.io run
构建镜像 docker build nerdctl build 不支持
容器网络 docker network nerdctl network 不支持
日志查看 docker logs nerdctl logs crictl logs

注意 :nerdctl默认使用 k8s.io 命名空间,与Kubernetes运行时保持统一,无需额外指定参数

3. 关键场景迁移指南

3.1 镜像构建方案

虽然Containerd原生不支持构建,但nerdctl通过集成BuildKit实现了完美替代。以下是我们的CI流水线改造示例:

# 传统Docker方式
docker build -t myapp:1.0 .
docker push my-registry.com/myapp:1.0

# 迁移后方案
nerdctl build --buildkit-host=unix:///run/buildkit/buildkitd.sock -t my-registry.com/myapp:1.0 .
nerdctl push my-registry.com/myapp:1.0

若需更复杂的构建控制,可搭配buildctl直接操作BuildKit:

buildctl build \
  --frontend dockerfile.v0 \
  --local context=. \
  --local dockerfile=. \
  --output type=image,name=my-registry.com/myapp:1.0,push=true

3.2 容器网络管理

nerdctl支持CNI网络插件,能创建与Docker兼容的bridge网络:

# 创建自定义网络
nerdctl network create my-bridge --driver=bridge --subnet=10.15.0.0/16

# 运行容器并接入网络
nerdctl run -d --name web --network my-bridge nginx:alpine

# 验证网络连通性
nerdctl exec web ping db.my-bridge

4. 生产环境进阶实践

4.1 多架构镜像支持

在ARM与x86混合集群中,nerdctl的buildx扩展表现出色:

nerdctl buildx build \
  --platform linux/amd64,linux/arm64 \
  -t myapp:multi-arch \
  --push .

4.2 与Kubernetes的深度集成

通过配置 /etc/containerd/config.toml 实现镜像自动同步:

[plugins."io.containerd.grpc.v1.cri".registry]
  [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
    [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
      endpoint = ["https://registry-1.docker.io"]

4.3 性能调优建议

我们在压测中发现以下配置可提升20%容器启动速度:

# 调整containerd运行时参数
sudo systemctl edit containerd
[Service]
ExecStartPre=/sbin/modprobe overlay
ExecStart=
ExecStart=/usr/bin/containerd --config /etc/containerd/config.toml \
  --log-level info \
  --metrics-interval=0 \
  --snapshotter=overlayfs

5. 常见问题解决方案

Q:如何查看容器详细配置?
A:使用 nerdctl inspect 替代 docker inspect ,或通过crictl获取CRI格式数据:

nerdctl inspect web | jq .[0].Config
crictl inspect 容器ID

Q:容器日志如何持久化?
A:修改containerd配置启用日志轮转:

[plugins."io.containerd.grpc.v1.cri".containerd]
  [plugins."io.containerd.grpc.v1.cri".containerd.runtimes]
    [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
      [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
        SystemdCgroup = true

迁移过程中,我们总结出三个关键检查点:

  1. 确认 nerdctl version 显示与containerd版本兼容
  2. 测试 nerdctl run --rm alpine ping -c 1 google.com 验证基础功能
  3. 对比 docker stats 与 nerdctl stats 的输出格式差异
nerdctl:与 Docker 兼容的 containerd CLI nerdctl 是一个用于容器管理的命令行工具,它旨在提供与 Docker CLI 相似的用户体验,但却是为 containerd 这样的低级容器运行时设计的。containerd 是一个行业标准的容器运行时,被广泛用作 Kubernetes 等容器编排平台的一部分。nerdctl 通过简化 containerd 的使用来填补了直接操作 containerd 和使用更高级别抽象(如 Docker)之间的差距。nerdctl 在成为 containerd 的一个子项目,并于 2022 年发布了 v1.0。 阅读详情

相关推荐

containerd 镜像构建工具 -- nerdctl 和 buildkit

containerd 镜像构建工具 -- nerdctl 和 buildkit

以梦为马|越骑越傻 4765

K8s弃用Docker后,我们如何用Containerd+nerdctl找回熟悉的Docker体验?

本文探讨了Kubernetes弃用Docker后,如何通过Containerd和nerdctl重建高效的容器工作流。详细介绍了nerdctl的安装配置、日常操作实践以及镜像管理技巧,帮助开发者在保持Containerd技术优势的同时,获得类似Docker的便捷体验。

cuangu9341的博客 366

告别第三方插件:官方Fused Library如何重塑Android库的合并与发布流程

本文详细介绍了Android官方推出的Fused Library如何替代第三方fat-aar插件,优化Android库的合并与发布流程。通过原生支持、智能依赖管理等优势,Fused Library解决了版本兼容性、依赖传递等核心痛点,提供了更稳定高效的开发体验。文章还提供了迁移实操指南和工程实践建议,帮助开发者顺利过渡到官方方案。

weixin_42561040的博客 245

k8s 抛弃弃用docker

K8s决定在 1.20 开始放弃 Docker,并在1.21完全抛弃 Docker 的支持。2020 年 12 月,Kubernetes 社区决定着手移除仓库中 Dockershim 相关代码,对于k8s和 Docker 两个社区来说都意义重大。 如上图所示,Kubernetes节点代理 Kubelet为了访问Docker提供的服务需要先经过社区维护的 Dockershim,Dockershim 会将请求转发给管理容器的 Docker 服务。Kubernetes 通过下面的一系列接口为不同模块提供扩展性:

神棍之路 4632

分享一下使用Xilinx FPGA驱动MIPI DSI LCD屏的心路历程

分享一下调试用Xilinx FPGA驱动MIPI DSI LCD屏的心路历程,看到的朋友们,可以避免继续踩坑。

haoxingheng的专栏 5006

实体对齐(Entity Alignment)相关论文与数据集整理

实体对齐(Entity Alignment)、知识图谱融合方法总结整理 年份 模型 主要思想 博文推荐 论文 代码 2019 Entity Alignment between Knowledge Graphs Using Attribute Embeddings 实体对齐数据集整理 名称 — DBpe-dia(DBP) LinkedGeoData(LGD) Geonames(GEO) YAGO ...

bjxxkjdxcdd的博客 1万+

弃用 Docker 后!哪几种超好用的容器工具能替代?

2020 年底,Kubernetes 发布了公告,官方宣布从 v1.24 开始停止对 Docker 的支持。然而,Kubernetes 弃用 docker 对我们的影响不应过于恐慌。有以下几种工具可以替代 Docker?并且相比 Docker 都有哪些优点?

LinkSLA的博客 1万+

Rokid眼镜高精度图像识别的五大工程破局点

图像识别是AR交互的基础能力,其核心在于将现实图像映射为可计算的数字特征,并通过几何建模解算空间姿态。在专用AR眼镜场景中,该过程面临光学畸变、传感器时序错位、低延迟跟踪与人因适配等复合挑战。尤其在工业现场,Rokid Max系列的鱼眼镜头畸变、IMU-视觉异步采样、窄FOV下快速眼动等物理约束,使传统基于AR Foundation或OpenCV的识别方案失效。本文聚焦真实部署中的关键瓶颈,涵盖实时反畸变纹理渲染、原生SDK直调优化、端侧轻量CNN模型(TinyImageNet-Rokid)、IMU-视觉紧

weixin_33681778的博客 693

k8s1.20 搭建-抛弃docker使用containerd

前言: k8s动不动就要抛弃docker,好吧,让我们体验一下没有docker的k8s。 1.环境准备 【所有节点上执行】 1.1 关闭无用服务 关闭selinux # sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/sysconfig/selinux # sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config 关闭交换分区 # sed -i "/s.

架构+开发+运维 3391

Zephyr RTOS -- 学习笔记总述

文章目录摘要1. 开发基础部分2. 内核服务入门 本笔记基于 Zephyr 版本 2.6.0-rc2 摘要 1. 开发基础部分 2. 内核服务入门 2.1 线程简介 2.2 线程 2.3 工作队列线程 2.4 调度 2.5 中断 2.6 轮询 API 2.7 信号量

思想给了我们太多的自由,而我们拖累了思想...... 4812

VTK在QT与非QT环境下使用的区别

VTK可以在QT框架内使用,也可以独立于QT使用,这两种使用方式在架构、交互和渲染方面有显著差异。

深之JohnChen的专栏 622

Kubernetes将弃用 Docker替代品是什么

Docker是微软,谷歌,红帽,IBM等巨头重要产品的基础。 OCI (Open Container Initiative开放式集装箱倡议),巨头们一起逼着Docker公司把Docker的商业产品变成标准。最重要的image格式和运行环境已经标准化。Registry API标准化还没有完成。 Docker公司把containerd和runc拆出来变成了开源项目; 红帽先收购了Docker的竞争产品rkt,又搞了和Docker命令行/API兼容的podman。 k8s早就通过CRI接口支持不同的容器运

qq_25986067的博客 4836

Labview项目01:标准可配置序列测试框架

摘要:本文介绍了一个基于LabVIEW2020开发的通用测试框架系统。该系统采用模块化设计,包含主界面、调试界面、设置界面和登录界面。主功能包括:1)可配置测试序列,支持延时、预定值输出、随机值输出等操作;2)单步测试功能自主添加;3)界面支持测试序列编辑和权限管理。系统采用队列机制处理事件和测试流程,通过CSV文件存储测试序列,支持参数化配置。用户可自定义测试VI(A_.vi和N_.vi格式),并通过调试界面验证测试序列。最终测试结果在主界面显示,提供整体判断功能。该系统既可作为学习参考,也可用于实际测试

weixin_38637405的博客 1549

K8S 1.20 弃用 Docker 评估之 Docker CLI 的替代产品

title: K8S 1.20 弃用 Docker 评估之 Docker CLI 的替代产品 tags: Docker K8S OCI 容器 最佳实践 RedHat Skopeo Buildah Podman DevOps containerd nerdctl CLI excerpt: K8S 弃用 Docker 评估之:Docker CLI 替代品。 banner_img: >- https://pic-cdn.ewhisper.cn/img/2021/11/07/267c7fdfcfa4435

east4ming的博客 1191

鸿蒙开发之hdc命令行

hdc(HarmonyOS Device Connector)是HarmonyOS为开发人员提供的用于调试的命令行工具,通过该工具可以在windows/linux/mac系统上与真实设备进行交互。

xiangzhihong8的专栏 5808

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

k8s安装nerdctl和buildctl,配置containerd镜像加速

buildkitd 作为服务端,连接容器运行时,目前支持 runc(or crun)和 containerd 作为镜像构建环境,默认是 runc。因为我的项目已经安装了Containerd、CNI、runc,这个笔记里记录的是安装nerdctl和BuildKit,GitHub上的下载速度比较慢,我是用迅雷下载后,通过FileZilla上传云服务器的。buildkitd(服务端),目前支持runc和containerd作为镜像构建环境,默认是runc,可以更换containerd。

terryzxy的博客 3918

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

在centos下使用containerd管理容器:5分钟从docker转型到containerd

在 Kubernetes 的早期,我们只支持一个容器运行时。那个运行时是 Docker 引擎。那时,并没有太多其他的选择,而 Docker 是处理容器的主要工具,所以这不是一个有争议的选择。最终,我们开始添加更多的容器运行时,比如 rkt 和 hypernetes,很明显 Kubernetes 用户希望选择最适合他们的运行时。因此,Kubernetes 需要一种方法来允许集群操作员灵活地使用他们选择的任何运行时。发布了容器运行时接口(CRI) 以实现这种灵活性。

ahuang1202的专栏 2189

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

k8s弃用docker后的使用

K8s 1.24版本开始不再维护docker-shim,也就是删除了kubelet中关于与docker集成的代码,方便接入其他容器方案。但是底层用的还是containerd,调用链短了,k8s性能更好。如果还想像以前一样在k8s中使用docker,需要单独安装cri-docker(由docker公司开发,方便接入k8s)适配器,但是会影响k8s性能。docker构建的镜像同样适用于containerd。

weixin_41687660的博客 1941

K8S 1.20 弃用 Docker 评估之 Docker CLI 的替代产品 nerdctl

背景 2020 年 12 月初,Kubernetes 在其最新的 Changelog 中宣布,自 Kubernetes 1.20 之后将弃用 Docker 作为容器运行时。 弃用 Docker 带来的,可能是一系列的改变,包括不限于: 容器镜像构建工具 容器 CLI 容器镜像仓库 容器运行时 专题文章《K8S 1.20 弃用 Docker 评估》会从多方面分析由此带来的变动和影响。 《K8S 1.20 弃用 Docker 评估之 Docker 和 OCI 镜像格式的差别》 主要介绍 镜像格式的变化 《

east4ming的博客 904

【containerd】Containerd高阶命令行工具nerdctl

对于习惯了使用docker cli的用户来说,containerd的命令行工具ctr使用起来不是很顺手,此时别慌,还有另外一个命令行工具项目nerdctl可供我们选择。nerdctl是一个与docker cli风格兼容的containerd的cli工具。

margu_168的博客 3604

docker、crictl、ctr及nerdctl命令对比【containerd管理命令】

使用docker作为容器运行时需要经过多层转换(kubelet <-> dockershim <-> docker <-> containerd),这会导致连接不稳定和性能下降。K8s从v1.24版本开始,不再支持docker容器运行时,而是默认使用containerd使用k8s自带的crictl命令。crictl是一个符合CRI接口规范的命令行工具,可以用它来检查和管理kubelet节点上的容器运行时和镜像。使用containerd自带的ctr命令。

weixin_41558221的博客 4115

Containerd详解和使用说明

Containerd 不支持 docker API 和 docker CLI,但是 containerd 可以通过以下这几种命令实现类似的功能。ctr这个是 containerd 官方的命令行工具,功能相对简单,但是拉取镜像和创建容器等基础功能都有。需要注意的是:ctr 支持选择 namespace,这个 namespace 不是 kubernetes 中的 namespace,而是 containerd 中的 namespace,不过这两种 namespace 在概念上是差不多的。

petermis的博客 3680

如何快速上手Nerdctl:Docker兼容的终极Containerd命令行工具

想要摆脱Docker守护进程的束缚,体验更轻量、更高效的容器管理方案吗?Nerdctl正是你需要的终极containerd命令行工具!作为Docker兼容的CLI,nerdctl让你能够无缝迁移现有的Docker工作流,同时享受containerd带来的性能优势。 ## 什么是Nerdctl?为什么选择它? **Nerdctl** 是一个专为containerd设计的Docker兼容命令行工具

gitblog_00290的博客 1149

nerdctl - 兼容 Docker 语法 的 containerd 命令行界面

Nerdctl 是一个专为 containerd 环境设计的容器运行时工具,它与 Docker 语法兼容,提供了类似的命令行接口,但专注于更高效的容器管理。nerdctl 是 containerd 的一个非核心子项目。

cuiwin的专栏 1433

容器一些概念:k8s docker dockershim Containerd runC CRI OCI理解 1.23弃用docker - 含docker containerd通用工具 nerdctl

K8s 是通过 docker-shim 作为桥接服务,将 CRI 转换为 Docker API,然后与 Dokcer 进行通信的。OCI(Open Container Initiative),可以看做是「容器运行时」的一个标准,Ta 使用 Linux 内核系统调用(例如:cgroups 与命名空间)生成容器,按此标准实现的「容器运行时」有 runC 和 gVisor。实际对容器的操作最终还是要交给 OCI,CRI 也只是个中转。nerdctl通用容器ctl工具

yuezhilangniao的博客 1411

从Docker无缝迁移到Containerd:用nerdctl保留你的CLI肌肉记忆

本文详细介绍了如何从Docker无缝迁移到Containerd,并利用nerdctl工具保留熟悉的CLI操作体验。nerdctl作为Containerd的前端工具,完美兼容Docker CLI命令结构,支持compose、镜像管理等核心功能,同时提供延迟镜像拉取、镜像加密等高级特性,帮助开发者和运维团队实现零学习成本的运行时迁移。

weixin_30879833的博客 864
上一篇: 别再折腾Nginx了!用ZLMediaKit+PHPStudy在Windows上5分钟搞定本地视频流服务器
下一篇: EZ-CUBE3仿真器深度体验:除了烧录RA芯片,它还能为你的瑞萨开发带来什么?
cuangu9341
博客等级 码龄11年 4粉丝 113原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值