Docker和containerd是现代容器技术中的两个重要组件,它们之间有着紧密的关系,但也存在一些关键的区别。
Docker与containerd的关系:
- containerd是Docker的一部分:containerd最初是Docker引擎的一部分,用于管理容器的生命周期。随着容器技术的发展,containerd在2017年被捐赠给了云原生计算基金会(CNCF)进行独立发展。
- Docker使用containerd:在Docker的早期版本中,containerd作为Docker引擎的一个组件运行,负责底层的容器运行时管理。
Docker与containerd的区别:
-
定位和功能:
- Docker:Docker是一个完整的容器平台,提供了容器构建(通过Dockerfile)、容器镜像管理、容器运行时等功能。Docker还包括Docker Hub这样的容器镜像仓库服务。
- containerd:containerd是一个轻量级的容器运行时,专注于容器运行时和容器镜像管理。它不包括容器构建等高级功能。
-
架构:
- Docker:Docker包含客户端(Docker CLI)和守护进程(Docker daemon)。守护进程负责管理容器的生命周期,而客户端用于与守护进程通信。
- containerd:containerd设计上更为简洁,通常嵌入到系统中,由系统的init进程直接管理,不需要守护进程。
-
复杂性:
- Docker:相对复杂,因为它提供了广泛的工具和功能,包括网络管理、存储卷管理等。
- containerd:更加专注于运行时功能,去除了Docker的一些额外特性,使得它更轻量级。
-
命令行工具:
- Docker:Docker CLI提供了广泛的命令,如
docker run
、docker build
、docker pull
、docker push
等,用于管理容器的整个生命周期。 - containerd:containerd的命令行工具
ctr
主要用于调试和低级操作,功能不如Docker CLI全面。
- Docker:Docker CLI提供了广泛的命令,如
-
社区和生态:
- Docker:拥有庞大的社区和生态系统,提供了大量的预构建镜像和自动化工具。
- containerd:由CNCF托管,也得到了广泛的社区支持,尤其是在Kubernetes生态系统中。
-
兼容性:
- Docker:虽然Docker支持OCI(Open Container Initiative)标准,但它有一些特定的扩展和特性。
- containerd:原生支持OCI标准,并且与Kubernetes的CRI(Container Runtime Interface)兼容,这使得它在Kubernetes等容器编排系统中更受欢迎。
总的来说,containerd可以看作是Docker的一个更精简、专注于运行时的版本,而Docker则是一个更全面的容器平台。随着容器技术的成熟,containerd等轻量级运行时在云原生应用和Kubernetes等容器编排系统中的使用越来越普遍。
安装部署containerd
1、网络源安装
docker-ce镜像_docker-ce下载地址_docker-ce安装教程-阿里巴巴开源镜像站
root@node01:~/bin# apt-cache madison containerd
containerd | 1.7.12-0ubuntu2~20.04.1 | http://mirrors.aliyun.com/ubuntu focal-updates/main amd64 Packages
containerd | 1.6.12-0ubuntu1~20.04.3 | http://mirrors.aliyun.com/ubuntu focal-security/main amd64 Packages
containerd | 1.3.3-0ubuntu2 | http://mirrors.aliyun.com/ubuntu focal/main amd64 Packages
root@node01:~/bin# apt install -y containerd=1.7.12-0ubuntu2~20.04.1
root@node01:~/bin# systemctl start containerd
root@node01:~/bin# systemctl status containerd
root@node01:~/bin# systemctl enable containerd
root@node01:~/bin# cat /etc/containerd/config.toml |grep sandbox_image
sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"
2、源码安装
root@node01:~# tar zxfv containerd-1.7.21-linux-amd64.tar.gz
bin/
bin/ctr
bin/containerd
bin/containerd-shim-runc-v2
bin/containerd-shim-runc-v1
bin/containerd-shim
bin/containerd-stress
root@node01:~# cp bin/containerd /usr/local/bin/
root@node01:~# cp bin/ctr /usr/local/bin/
root@node01:~# containerd config default > /etc/containerd/config.toml
root@node01:~# nohup containerd &
containerd常用命令
USAGE:
ctr [global options] command [command options] [arguments...]
COMMANDS:
version Print the client and server versions
images, image, i Manage images
namespaces, namespace, ns Manage namespaces
run Run a container
tasks, t, task Manage tasks
info Print the server info
help, h Shows a list of commands or help for one command
1、查看版本信息
2、列出镜像列表
3、列出命名空间
4、创建命名空间
5、查看指定命名空间的镜像列表
ctr --namespace=命名空间 images ls
6、拉取镜像
ctr -n 命名空间 images pull 镜像仓库/镜像名
7、删除镜像
ctr -n 命名空间 images rm 镜像名
8、导出镜像
ctr -n 命名空间 images export 文件名.tar 镜像名
9、导入镜像
ctr -n 命名空间 images import 文件名.tar
10、打标签
ctr -n 命名空间 images tag 源名:标签 新名:标签
11、导入docker保存的镜像
Docker导出的镜像通常是一个压缩的tar文件,包含了镜像层和元数据。containerd的ctr
工具可以解压这个tar文件并将其作为镜像导入。
12、运行容器并查看当前运行中容器的task任务
ctr -n 命名空间 run -d 镜像名 工作名
ctr -n 命名空间 task ls
13、进入task任务
ctr -n 命名空间 task exec --exec-id 分配唯一id -t taskid /bin/bash
14、停止task
ctr -n 命名空间 task kill --signal 9 工作名
--signal 9
指定发送给任务的信号,在这里是信号9(SIGKILL),它会立即终止任务而不会给任务任何清理的机会。
15、删除task
ctr -n 命名空间 task rm -f task名
16、列出容器
17、删除容器
ctr -n 命名空间 containers rm 容器名
命令对比
功能 | Docker命令 | containerd命令 |
---|---|---|
拉取镜像 |
|
|
列出镜像 |
|
|
运行容器 |
|
|
列出容器 |
|
|
停止容器 |
|
|
删除容器 |
|
|
删除镜像 |
|
|
进入容器 |
|
|
导出容器镜像 |
|
|
导入容器镜像 |
|
|