The parent process issue

Why did containerd create containerd ship in Docker? Containerd is not the parent process of containerd ship, but systemid is the parent process of containerd ship

What is containerd ship? Do you mean containerd-shim? That is required to be an intermediate layer between the container runtime (runc) and containerd. It is not made for Docker but for containerd. Runc is used to create the container but after that the shim pocess becomes the parent during the lifecycle of the container. Containerd is the daemon that provides an API so a client can communicate with it, but I guess this way containerd could be restarted while your acrtual containers are still running.