containerd ist „nur“ die Laufzeit & Daemon für Container. Man kann Container nicht direkt damit verwalten, sondern über Clients/CLIs oben drauf. Die wichtigsten sind:
Docker verwendet „under the hood“ ebenfalls containerd. By default verwendet containerd runc als container runtime. Eine noch tiefere Schicht: das eigentliche OCI Runtime Tool, das Container Prozesse direkt mit Linux Linux Namespaces und cgroups startet. (containerd ruft runc auf, um Containerprozesse zu starten.)
# containerd installieren sudo apt-get install -y containerd # Standardkonfiguration erzeugen sudo mkdir -p /etc/containerd containerd config default | sudo tee /etc/containerd/config.toml >/dev/null # systemd-cgroups aktivieren (wichtig, damit kubelet + containerd zusammenpassen) sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml # Dienst aktivieren sudo systemctl enable --now containerd
# Image holen nerdctl pull nginx:alpine # Container starten (Name, Port, Hintergrund) nerdctl run -d --name web -p 8080:80 nginx:alpine # Auflisten nerdctl ps # laufende nerdctl ps -a # alle # Logs & Shell nerdctl logs -f web nerdctl exec -it web sh # Stoppen/Starten/Entfernen nerdctl stop web nerdctl start web nerdctl rm web # Images/Volumes/Netze nerdctl images nerdctl volume ls nerdctl network ls
# nerdctl compose benötigt "nerdctl full" bzw. cni/plugins installiert nerdctl compose up -d nerdctl compose down
# Image holen sudo ctr images pull docker.io/library/nginx:alpine # Container erstellen + starten sudo ctr run -d --net-host docker.io/library/nginx:alpine web # Auflisten sudo ctr containers ls sudo ctr tasks ls # Logs gibt es so nicht direkt -> in den Container oder stdout umleiten sudo ctr tasks exec --exec-id sh -t web sh # Stoppen & entfernen sudo ctr tasks kill -s SIGTERM web sudo ctr tasks rm web sudo ctr containers rm web # Namespace beachten sudo ctr namespaces ls sudo ctr --namespace k8s.io containers ls