Home >Operation and Maintenance >Docker >What is the difference between containerd and docker

What is the difference between containerd and docker

WBOY
WBOYOriginal
2021-12-29 09:53:1717973browse

Difference: 1. containerd does not need to go through dockershim, so the call chain is shorter, and docker needs to go through, so the call chain is longer; 2. docker calls cni "docker-shim", containerd calls cni "containerd- cri".

What is the difference between containerd and docker

The operating environment of this tutorial: linux7.3 system, docker-1.13.1 version, Dell G3 computer.

What is the difference between containerd and docker

When using k8s, the call chain using docker and containerd is as follows:

What is the difference between containerd and docker

It is not difficult to see that when using containerd, the call chain is shorter and there is no need to go through dockershim and docker

Data directory

I believe everyone knows that the default data directory of docker is in the /var/lib/docker directory; when switching to containerd, the data directory defaults to /var/lib/containerd

Log

When we use k8s, if docker is used as the runtime, docker is actually responsible for writing the container program logs to disk. The log files under /var/log/pod and /var/log/container will be soft-linked to the corresponding log files under /var/lib/docker. If you need to configure some parameters for the log, you can directly modify the docker configuration file. ;And if we now use containerd as the runtime, kubelet will be responsible for the placement of container logs. The log files under /var/log/container will be soft-connected to the log files under /var/log/pod. If adjustments are needed Log parameters, you need to modify the kubelet related configuration

CNI

When using docker as the runtime, the docker-shim in the kubelet is responsible for calling cni; and when using containerd as At runtime, the containerd-cri built in containerd is responsible for calling cni

[plugins."io.containerd.grpc.v1.cri".cni]       
bin_dir = "/opt/cni/bin"       
conf_dir = "/etc/cni/net.d"

Streaming service

Friends who are familiar with k8s know that commands such as kubectl exec and kubelet log need to be passed The apiserver communicates with the container, which involves streaming services. The docker API itself supports that the docker-shim in kubelet is forwarded through the docker API stream; but containerd needs to be configured separately

[plugins."io.containerd.grpc.v1.cri"]     
stream_idle_timeout = "4h0m0s"    
 stream_server_address = "127.0.0.1"    
 stream_server_port = "0"     
enable_tls_streaming = false

Recommended learning: "docker video tutorial"

The above is the detailed content of What is the difference between containerd and docker. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn