Containerd é uma tecnologia de virtualização de contêiner, que foi retirada do docker e faz parte do padrão Open Container Interface (OCI).
O gerenciamento e a operação de contêineres do Docker são feitos basicamente por meio do containerd. Containerd é um tempo de execução de contêiner padrão da indústria, que enfatiza a simplicidade, robustez e portabilidade. Containerd pode gerenciar o ciclo de vida completo do contêiner no host: a transmissão e armazenamento de imagens de contêiner, a execução e gerenciamento de contêineres, armazenamento e rede, etc. Em detalhes, a Containerd é responsável pelas seguintes coisas:
• Gerenciar o ciclo de vida dos contêineres (desde a criação até a destruição do contêiner)
• Puxar / empurrar a imagem do contêiner
• Gerenciamento de armazenamento (gerenciar o armazenamento de dados de imagem e contêiner)
• Invoque runC para executar o contêiner (interagir com runC e outros tempos de execução do contêiner)
• Gerenciar interfaces e redes de rede de contêineres
Nota: O Containerd foi projetado para ser incorporado em um sistema maior, não usado diretamente por desenvolvedores ou usuários finais.
Podemos entender por que um container separado é necessário a partir dos seguintes pontos:
• Continue separando projetos do mecanismo docker geral (a ideia de projetos de código aberto)
• Pode ser usado por projetos como Kubernets CRI (generalizado)
• Estabelecer a base para uma ampla cooperação da indústria (assim como runC)
Após a instalação do docker, o containerd é instalado por padrão e o containerd contém os seguintes componentes de comando:
• Containerd: tempo de execução do contêiner de alto desempenho.
• ctr: o cliente da linha de comando do containerd.
• Runc: uma ferramenta de linha de comando para executar contêineres.
docker 、 containerd 、 docker-shim 、 runC 关系 :
docker: no que diz respeito ao próprio docker, ele inclui docker client e dockerd. dockerd é, na verdade, o encapsulamento de nível superior da API para operações relacionadas ao contêiner, voltado diretamente para os usuários operacionais.
Containerd: o que dockerd realmente chama é a interface api de containerd (implementada no modo rpc). Containerd é um componente de comunicação intermediário entre dockerd e runC.
docker-shim: um transportador para contêineres em execução real. Cada vez que um contêiner é iniciado, um novo processo docker-shim é iniciado. Ele cria um contêiner especificando três parâmetros: ID do contêiner, diretório de limite (containerd corresponde a um diretório de geração de contêiner) e binário de tempo de execução (o padrão é runC) para chamar a API de runC para criar um contêiner.
runC: Uma ferramenta de linha de comando para criar e executar contêineres de acordo com os padrões OCI.
app containerd
A imagem docker e a imagem containerd são comuns, mas o método de organização e o diretório de armazenamento são diferentes, o que torna os comandos docker e ctr incomuns, e cada um gerencia sua própria imagem e contêiner.
Além disso, o k8s também tem um comando de cliente crictl, o uso é basicamente o mesmo que docker, você pode ver o uso com crictl -h.
O arquivo de configuração padrão de containerd é /etc/containerd/config.toml, você pode usar o comando:
padrão de configuração de containerd
Configuração padrão de saída, consulte o documento https://github.com/containerd/containerd/blob/master/docs/ops.md
root = "/ var / lib / containerd" state = "/ run / containerd" oom_score = 0 ……
A chave raiz é usada para armazenar dados persistentes contidos.
A chave de estado é usada para armazenar dados temporários do containerd, e os dados são perdidos após a reinicialização do dispositivo.
Mostrar imagem de contêiner
imagens ctr sudo ls
Puxe a imagem hello-world
imagens sudo ctr pull docker.io/library/hello-world:latest
Nota: O caminho completo deve ser baixado, e a imagem hello-world padrão é baixada do dockerhub.
Execute o contêiner
sudo ctr run docker.io/library/hello-world:latestmy_hello-world sudo ctr run -t docker.io/library/busybox:latestmybusybox_demosh