@[TOC]
前言
解决报错的方法在文章末尾
docker与containerd的关系
Docker:
Docker是一个开源的容器化平台,用于开发、打包和运行应用程序。它提供了一整套工具和平台,使得容器的创建、部署和管理变得简单和高效。Docker引擎(Docker Engine)是Docker平台的核心部分,负责管理容器的生命周期,包括创建、运行、停止和删除容器等操作。在Docker Engine中,包含了很多组件,其中的一个核心组件就是containerd。
containerd:
containerd是一个开源的容器运行时(container runtime),它负责管理容器的生命周期,如启动、停止和删除容器。containerd最初是作为Docker引擎中的一个子项目,后来成为了一个独立的项目,并被广泛地用于各种容器平台和工具中。
关系说明:
Docker Engine包含了多个组件,其中之一就是containerd。
具体来说,Docker Engine使用containerd来执行容器相关的底层操作,如镜像管理、容器生命周期管理等。
Docker Engine提供了更高层次的抽象和功能,例如Docker CLI(命令行工具)和Docker Compose(用于多容器应用的编排工具)。这些工具使得开发者可以方便地进行容器的构建、编排和管理。
containerd则是Docker Engine中负责执行容器运行时职责的底层组件,它和Linux操作系统的内核(如cgroups和namespace)交互,实现了容器的隔离和资源管理。
镜像获取
docker的镜像获取
Docker使用Docker Hub作为默认的镜像仓库,其中包含了大量的公共镜像供开发者使用。
获取Docker镜像通常通过docker pull命令来完成
例如
获取nginx的最新镜像(如果没有标签则默认为latest)
docker pull nginx
containerd的镜像获取
containerd并没有默认的镜像仓库,它更多地关注容器运行时的底层操作。
如果需要获取镜像,一般通过ctr images pull命令来获取
需要注意的是: containerd获取镜像需要写上镜像仓库获取路径。
例如
获取Docker官方仓库中nginx的最新镜像
ctr images pull docker.io/library/nginx:latest
注; latest不能省略
镜像导出
Docker的镜像导出
Docker的镜像导出一般通过docker save -o 命令来实现
例如
将本地的nginx:latest镜像打包成nginx.tar
docker save -o nginx.tar nginx:latest
containerd的镜像导出
containerd的镜像导出与docker基本一样,通过ctr images export 命令来实现
例如
将docker.io/library/nginx.latest这个镜像打包成nginx.tar
ctr images export nginx.tar docker.io/library/nginx:latest
镜像导入
docker的镜像导入
docker的镜像导入一般通过docker load -i 命令来实现
例如
将刚刚打包好的nginx.tar导入(记得提前删除本地镜像)
docker load -i nginx.tar
containerd的镜像导入
containerd的镜像导入一般通过 ctr images import 命令来实现
跟docker区别在于,containerd的镜像导入需要在后面加上 --platform linux/amd64 用于指定要构建或运行的镜像适用的平台架构,不然就会报错
报错信息如下
ctr: content digest sha256:64211d1abd8afd2ac0f49ce2c13a6f978b2f8d5b22fd9a1aee0bdf5575c2ac47: not found
正确举例
将刚刚打包好的nginx.tar导入(记得提前删除本地镜像)
ctr images import nginx.tar --platform linux/amd64