區別:1、containerd不需要經過dockershim,所以調用鏈更短,docker需要經過所以調用鏈更長;2、docker調用cni是“docker-shim”,containerd調用cni是“containerd- cri」。
本教學操作環境:linux7.3系統、docker-1.13.1版、Dell G3電腦。
containerd與docker的差異是什麼
#在使用k8s時,使用docker和containerd的呼叫鏈如下所示:
不難看出,使用containerd時,呼叫鏈更短,不再需要經過dockershim和docker
資料目錄
##相信大家都知道docker的資料目錄預設是在/var/lib/docker目錄下;而切換到containerd時,資料目錄預設為/var/lib/containerd##日誌當我們在使用k8s時,如果使用了docker作為運行時,其實容器程式日誌的落盤是由docker來負責的。 /var/log/pod和/var/log/container下的日誌檔案會軟連接到/var/lib/docker下對應的日誌文件,如果還需要對日誌做一些參數配置,直接修改docker設定檔即可;而如果我們現在使用containerd作為運行時,則容器日誌的落盤將由kubelet來負責,/var/log/container下的日誌文件會軟連接到/var/log/pod下的日誌文件,如果需要調整日誌參數,則需要修改kubelet相關配置
CNI當使用docker作為運行時時,kubelet中的docker-shim負責呼叫cni;而當使用containerd作為執行時間時,containerd中內建的containerd-cri負責呼叫cni
[plugins."io.containerd.grpc.v1.cri".cni] bin_dir = "/opt/cni/bin" conf_dir = "/etc/cni/net.d"串流服務
熟悉k8s的朋友都知道,kubectl exec 和kubelet log等指令需要通過apiserver與容器通信,這其中就牽涉到了流服務。而docker API本身支持,kubelet中的docker-shim透過docker API流轉送;但containerd卻要對此進行單獨配置
[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
推薦學習:《
docker視訊教學以上是containerd與docker的差別是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!