如果您想了解Docker向全面集成containerd又迈进一步的相关知识,那么本文是一篇不可错过的文章,我们将对docker集成部署进行全面详尽的解释,并且为您提供关于AzureDockerCont
如果您想了解Docker 向全面集成 containerd 又迈进一步的相关知识,那么本文是一篇不可错过的文章,我们将对docker集成部署进行全面详尽的解释,并且为您提供关于Azure Docker Container – 如何将启动命令传递给docker run?、CentOS 8 安装 docker 报错 containerd.io >= 1.2.2-3、Containerd 1.0.0 发布,Docker Engine 的核心组件、Containerd 1.5 发布:重磅支持 docker-compose!的有价值的信息。
本文目录一览:- Docker 向全面集成 containerd 又迈进一步(docker集成部署)
- Azure Docker Container – 如何将启动命令传递给docker run?
- CentOS 8 安装 docker 报错 containerd.io >= 1.2.2-3
- Containerd 1.0.0 发布,Docker Engine 的核心组件
- Containerd 1.5 发布:重磅支持 docker-compose!
Docker 向全面集成 containerd 又迈进一步(docker集成部署)
Docker 在刚刚发布的 Docker Desktop 4.12.0 中,加入了实验特性:进一步集成 containerd,使用 containerd 来管理和存储镜像。
为什么说是“进一步集成”?这就要翻翻 Docker 和 containerd 的历史了。
containerd 的诞生
containerd 最早出现在 Docker Engine 中,后来为了将 Docker Engine 做得更加轻量、快速和健壮,在 2016 年 Docker 将 containerd 从 daemon(dockerd
) 中独立出来,并完成了与 daemon 的集成。独立出来的 containerd 全面支持 OCI(Open Container Initiative)资源的启动和生命周期的管理,也因此 containerd 可以支持 runc(前身是 Docker 中的 libcontainer,后来捐赠给 LF)以外的其他 OCI 实现。2017 年 Docker 将 containerd 捐献给 CNCF;2019 年 2 月,containerd 毕业。
containerd 独立出来之后,发送到 Docker Engine 的请求:
- Docker daemon 完成镜像管理的操作(拉取、更新镜像)
- daemon 会为创建容器进行准备工作(创建 OCI bundles):镜像的信息和运行时的信息。
- daemon 调用 containerd 的 API。
- 收到请求的 containerd 不会直接去操作容器(不直接作为容器的父进程,防止 containerd 挂掉影响容器),而是先创建一个 container-shim 进程。
- container-shim 调用 runc cli 来运行容器,并启动 Unix domain socket 暴露 API 提供给 containerd进行容器的管理。
随着 containerd 的不断演进,除了容器创建和容器声明周期管理以外,从 1.1 开始 containerd 加入了 CRI(Container Runtime Interface)的支持。
CRI
在《源码解析 kubectl port-forward 工作原理》 中层提到 kubelet 会调用 rumtime service 的 gRPC 接口,除了用于 portforward 流的 stream server以外,其实还有实现 CRI 接口 RuntimeService
和 ImageService
的 RuntimeServiceServer
和 ImageServiceServer
。
RuntimeServiceServer
用于接收并处理容器及其生命周期相关的操作,而 ImageServiceServer
则是用来处理镜像相关的操作。containerd 提供了镜像拉取、删除、检查、存储等功能。
既然 containerd 可以进行镜像的管理,而且 Docker 已经在使用,Docker 也没有必要自己继续维护一套相同的功能。
切换到 containerd 的镜像管理
在 Docker Desktop 的设置中启动 containerd 管理镜像后,运行 docker info
会发现存储的驱动从原来的 overlay2
变成了 containerd 的 stargz
。
切换前:
切换后:
既然使用了 containerd 的 snapshotters 来管理存储(挂在容器的根文件系统),就可以支持多种 snapshotters,比如 stargz 的延迟拉取。
此外,得益于 containerd 原生支持多平台镜像的存储,还是因为 snapshotters 的原因,可以使用 docker 来构建多平台的镜像了。
#切换前
docker buildx build -t demo --no-cache --platform linux/amd64,linux/arm64 .
[+] Building 0.0s (0/0)
error: multiple platforms feature is currently not supported for docker driver. Please switch to a different driver (eg. "docker buildx create --use")
总结
使用 containerd 作为 Docker 的镜像管理目前还处于实验性阶段,必可避免会存在问题,使用时请谨慎对待。
随着 Docker Swarm 在容器编排之战中的落败,Kubernetes 的话语权也越来越强。在 Kubernetes 1.24.0 中移除了 docker shim 代码,看起来更像是 containerd 取代了 Docker 曾经的地位,而 Docker 也越来越名声不显。从趋势来看,Docker 未来将会完全集成 containerd。
参考
- Extending Docker’s Integration with containerd
- Docker containerd integration
- Learning Containers From The Bottom Up
文章统一发布在公众号
云原生指北
Azure Docker Container – 如何将启动命令传递给docker run?
面对这个屏幕,我已经设法在docker容器应用程序服务上轻松地将rails应用程序部署到azure,但是记录它是一个痛苦,因为他们访问日志的唯一方法是通过FTP.
有没有人想出一个在azure中运行docker run命令的好方法,所以它基本上接受任何参数.
在这种情况下,它试图简单地登录到远程服务,如果任何人还有其他建议检索除FTP之外的日志,将大量欣赏.
TLDR除了需要在容器中运行的命令外,您无法将任何启动参数传递给Linux WebApp.让我们说你想使用PROD标签运行名为MYPYTHON的容器并运行一些python代码,你会做这样的事情
Startup Command = /usr/bin/python3 /home/code/my_python_entry_point.py
这将被附加(仅在非常结束)到实际的docker命令:
docker run -t username/MYPYTHON:PROD /usr/bin/python3 /home/code/my_python_entry_point.py
CentOS 8 安装 docker 报错 containerd.io >= 1.2.2-3
在更新或者安装 docker 容器的时候,提示下面的错误:
Problem: package docker-ce-3:19.03.13-3.el7.x86_64 requires containerd.io >= 1.2.2-3
上面的问题如何解决。
解决
根据提示的内容,上面已经说得比较明确了。
就是需要使用 containerd.io 的版本要升级下。
你可以访问 docker 官方的链接有关 CentOS 的安装部分:
Install Docker Engine on CentOS
首先你需要设置仓库:
sudo yum install -y yum-utils
sudo yum-config-manager
--add-repo
https://download.docker.com/linux/centos/docker-ce.repo
然后执行命令
sudo yum install docker-ce docker-ce-cli containerd.io
就可以解决上面的问题了。
https://www.ossez.com/t/centos-8-docker-containerd-io-1-2-2-3/548
Containerd 1.0.0 发布,Docker Engine 的核心组件
在经历 7 个 alpha 版、4 个 beta 版以及 1 个 RC 版后,containerd 1.0.0 正式发布了。1.0.0 改进了稳定性和 API,以及一些增强。containerd 为管理正在运行的容器提供守护进程,是一个工业标准的容器运行时。
新的 containerd 专为基于容器的系统而设计,如 Docker 和 Kubernetes。它提供了对操作系统的最小抽象。
与 0.2 版本相比,有以下更新:
基于任务和容器的新运行时模型
端到端的事件系统
基于快照的容器存储系统
内容寻址的映像存储系统
与容器对象关联的任意元数据存储
可扩展的命名空间 GRPC API
丰富的 API 客户端(入门和 godoc)
此外,0.2 版本已被标记为"End of Life"状态,这说明它的生命周期已结束。
详细更细内容和下载地址请点此查看。
Containerd 1.5 发布:重磅支持 docker-compose!
2021 年 5 月 4 日,Containerd 1.5 正式发布[1],该版本默认启用了 OCIcrypt
解密功能,并引入了对 NRI
、zstd
和 FreeBSD jails
的支持,同时还简化了对 Containerd 的贡献流程。下面就来看看具体更新了哪些功能吧。
默认 OCIcrypt 解密
Containerd 从 1.3 开始就支持从加密的镜像中运行容器,但没有作为默认启用的选项,直到 1.5 版本才默认启用,具体用法请参考文档[2]。
需要注意的是,必须安装二进制文件 ctd-decoder
才能解密 OCIcrypt 镜像,该二进制文件包含在 cri-containerd-cni-1.5.0-linux-amd64.tar.gz[3] 中,但不包含在 containerd-1.5.0-linux-amd64.tar.gz
中。另外,OCIcrypt
并不适用于 Docker,因为 Docker 目前并没有使用 Containerd 来管理镜像。
NRI: Node Resource Interface
NRI(Node Resource Interface)[4] 即节点资源接口,类似于 CRI
,但 NRI
可用于非网络资源,例如 GPU 调度限制和内存配额。具体用法可参考 NRI 示例代码[5]。
zstd 压缩算法
除了 gzip 之外,Containerd 现在还支持 zstd[6] 镜像压缩算法,压缩速度比 gzip
快好几倍,具体通过 github.com/klauspost/compress/zstd[7] 来实现。关于 zstd 的性能测试结果请参考zstd 官方文档[8]。
支持 FreeBSD
Containerd 从 1.5 版本开始实验性地支持 FreeBSD 操作系统,可以使用 FreeBSD jails[9] 运行一个兼容的 OCI
运行时,例如 runj[10]。同时还支持 ZFS
的快照管理,未来版本可能也会支持 unionfs[11]。

简化贡献流程
CRI 插件仓库[12] 现已合并到 Containerd 主仓库[13]中,对用户来说没有明显变化,只是简化了开发者对 Containerd 的贡献流程。
nerdctl
nerdctl[14] 是一个与 Docker 兼容的 CLI,例如:
$ nerdctl run -d --name nginx -p 8080:80 --restart=always nginx
但 nerdctl
的目标并不是单纯地复制 docker 的功能,它还实现了很多 docker 不具备的功能,例如延迟拉取镜像(lazy-pulling[15])、镜像加密(imgcrypt[16])等。
nerdctl 在上个月作为非核心子项目加入了 Containerd 组织,详情请参考终于可以像使用 Docker 一样丝滑地使用 Containerd 了!
现在 nerdctl 还推出了一个爆炸性功能:直接兼容 docker-compose 的语法!也就是说,可以直接通过 docker-compose.yaml 启动容器:
$ nerdctl compose -f docker-compose.yaml up
求 Docker 此时内心的阴影面积。。
本来 Docker 在 Kubernetes
社区的地位就在急剧下滑,现在 Containerd 易用性的空缺也被 nerdctl
填补上了,连 docker-compose 也能兼容了,如今 Docker 就更不受待见了。虽说廋死的骆驼比马大,但 Docker 的辉煌时代终究一去不复返了。
脚注
Containerd 1.5 正式发布: https://github.com/containerd/containerd/releases/tag/v1.5.0
[2]参考文档: https://github.com/containerd/containerd/blob/v1.5.0-rc.2/docs/cri/decryption.md
[3]cri-containerd-cni-1.5.0-linux-amd64.tar.gz: https://github.com/containerd/containerd/releases
[4]NRI(Node Resource Interface): https://github.com/containerd/nri
[5]NRI 示例代码: https://github.com/containerd/nri#sample-plugin
[6]zstd: https://github.com/containerd/containerd/pull/4809
[7]github.com/klauspost/compress/zstd: https://github.com/klauspost/compress/tree/master/zstd
[8]zstd 官方文档: https://github.com/klauspost/compress/blob/master/zstd/README.md
[9]FreeBSD jails: https://en.wikipedia.org/wiki/FreeBSD_jail
[10]runj: https://github.com/samuelkarp/runj
[11]unionfs: https://www.freebsd.org/cgi/man.cgi?query=unionfs&sektion=8&manpath=freebsd-release-ports
[12]CRI 插件仓库: https://github.com/containerd/cri
[13]Containerd 主仓库: https://github.com/containerd/cri
[14]nerdctl: https://github.com/containerd/nerdctl
[15]lazy-pulling: https://github.com/containerd/nerdctl/blob/master/docs/stargz.md
[16]imgcrypt: https://github.com/containerd/nerdctl/blob/master/docs/ocicrypt.md
你可能还喜欢
点击下方图片即可阅读
云原生是一种信仰
关注公众号
后台回复◉k8s◉获取史上最方便快捷的 Kubernetes 高可用部署工具,只需一条命令,连 ssh 都不需要!

点击 "阅读原文" 获取更好的阅读体验!
发现朋友圈变“安静”了吗?
本文分享自微信公众号 - 云原生实验室(cloud_native_yang)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
今天关于Docker 向全面集成 containerd 又迈进一步和docker集成部署的分享就到这里,希望大家有所收获,若想了解更多关于Azure Docker Container – 如何将启动命令传递给docker run?、CentOS 8 安装 docker 报错 containerd.io >= 1.2.2-3、Containerd 1.0.0 发布,Docker Engine 的核心组件、Containerd 1.5 发布:重磅支持 docker-compose!等相关知识,可以在本站进行查询。
本文标签: