Ferramentas de Linha de Comando do Containerd

I. Visão Geral das Ferramentas

O containerd não suporta a API ou a CLI do Docker. No entanto, é possível realizar operações semelhantes através de diversas ferramentas de linha de comando.

1.1 ctr

Esta é a ferramenta de linha de comando oficial do containred. Possui um conjunto de funcionalidades relativamente básico, mas cobre operações essenciais como baixar imagens e criar contêineres.

Ponto importante: O ctr trabalha com namespaces do containerd. Estes são conceitualmente semelhantes aos namespaces do Kubernetes, mas referenciam-se a isolações de recursos dentro do próprio daemon do containerd. Imagens e contêineres dentro de um namespace não são visíveis em outro.

Por padrão, as operações ocorrem no namespace default. Os recursos do cluster Kubernetes (imagens, contêineres) residem no namespace k8s.io. Para interagir com eles, utilize a flag -n k8s.io. É possível listar todos os namespaces com ctr namespace ls.

1.2 crictl

O crictl é parte do projeto cri-toolsFoi desenvolvido especificamente para o gerenciamento de recursos (Pods, contêineres, imagens) quando o containerd atua como runtime do Kubernetes.

Atenção: O crictl só enxerga recursos criados no contexto do Kubernetes. Por exemplo, um contêiner iniciado com ctr run no namespace padrão não será listado pelo crictl. Para operar recursos do Kubernetes com o ctr, é necessário especificar explicitamente o namespace k8s.io.

1.3 nerdctl

Para quem está habituado à interface do Docker, o ctr pode parecer limitado. O nerdctl surge como uma alternativa, pois é uma CLI compatível com a sintaxe do Docker para o containerd. Tornou-se um subprojeto oficial do containerd. A partir da versão 0.8, oferece compatibilidade com o docker compose (exceto swarm), facilitando muito o uso do containerd em ambientes de desenvolvimento e testes.

Requisito: Para funcionalidades de rede como mapeamento de portas, o nerdctl necessita da instalação das ferramentas e plugins do CNI, pois o containerd não implementa essa camada nativamente.

Assim como o ctr, o nerdctl também aceita a flag -n para especificar um namespace.

II. Exemplos de Uso Prático

2.1 Listando Imagens

# Imagens no namespace padrão
ctr image ls

# Imagens do cluster Kubernetes (namespace k8s.io)
ctr -n k8s.io image ls

# Usando o nerdctl
nerdctl images

# Usando o crictl (imagens do Kubernetes)
crictl images

2.2 Baixando Imagens

# ctr requer o caminho completo da imagem
ctr image pull docker.io/library/nginx:latest

# Para registros HTTP (não HTTPS), use --plain-http
ctr image pull registry.example.com:5000/app/busybox:latest --plain-http

# Baixando imagem para o namespace do Kubernetes
ctr -n k8s.io image pull docker.io/library/nginx:latest

# nerdctl: sintaxe mais simples
nerdctl image pull nginx

# Para registros HTTP com nerdctl, use --insecure-registry
nerdctl --insecure-registry image pull registry.example.com:5000/app/busybox:latest

# crictl: baixa a imagem do Docker Hub por padrão
crictl pull nginx

2.3 Removendo Imagens

# ctr
ctr image rm docker.io/library/nginx:latest

# nerdctl (sintaxe abreviada)
nerdctl rmi nginx

# crictl (sintaxe abreviada)
crictl rmi nginx

2.4 Listando Contêineres

No ctr, existe uma distinção importante: um container é uma definição estática, enquanto uma task representa uma instância em execução.

# Listar definições de contêineres (ctr)
ctr container ls

# Listar tarefas em execução (ctr)
ctr task ls

# nerdctl: lista todos os contêineres
nerdctl ps -a

# crictl: lista todos os contêineres
crictl ps -a

2.5 Iniciando Contêineres

# ctr: processo em duas etapas
# 1. Criar a definição do contêiner
ctr container create docker.io/library/nginx:latest meu_container
# 2. Iniciar a tarefa (contêiner em execução)
ctr task start -d meu_container

# ctr: atalho (combina as duas etapas)
ctr run -d docker.io/library/nginx:latest meu_container

# nerdctl: sintaxe similar ao Docker
nerdctl run -d --name meu_nginx nginx

# crictl: requer configs de sandbox e contêiner
# crictl run container-config.json sandbox-config.json

2.6 Parando e Removendo Contêineres

# ctr: primeiro encerra a task, depois remove o container
ctr task kill meu_container
ctr container rm meu_container

# nerdctl
nerdctl stop meu_nginx
nerdctl rm meu_nginx

# crictl
crictl stop CONTAINER_ID
crictl rm CONTAINER_ID

2.7 Gerenciando Pods com crictl

O crictl é a ferramenta primária para gerenciar Pods (sandboxes) e seus contêineres associados no runtime do Kubernetes.

# Criar um pod (sandbox)
cat sandbox-config.json
{
    "metadata": {
        "name": "nginx-sandbox",
        "namespace": "default",
        "attempt": 1,
        "uid": "hdishd83djaidwnduwk28bcsb"
    },
    "linux": {}
}
crictl runp sandbox-config.json

# Criar e iniciar um contêiner dentro de um pod
cat container-config.json
{
  "metadata": {"name": "busybox"},
  "image": {"image": "busybox"},
  "command": ["top"],
  "linux": {}
}
crictl create POD_ID container-config.json sandbox-config.json
crictl start CONTAINER_ID

2.8 Tabela Comparativa de Comandos

A tabela abaixo resume os comandos equivalentes entre as ferramentas. Lembre-se que ctr e nerdctl operam no namespace default por padrão. Adicione -n k8s.io para interagir com recursos do Kubernetes.

Ação Docker crictl (K8s) ctr nerdctl
Listar contêineres docker ps crictl ps ctr task ls nerdctl ps
Detalhes do contêiner docker inspect crictl inspect ctr task inspect nerdctl inspect
Logs do contêiner docker logs crictl logs N/A nerdctl logs
Executar comando docker exec crictl exec ctr task exec nerdctl exec
Anexar ao contêiner docker attach crictl attach ctr task attach N/A
Estatísticas de recursos docker stats crictl stats N/A N/A
Criar contêiner docker create crictl create ctr container create N/A
Iniciar contêiner docker start crictl start ctr task start nerdctl start
Executar contêiner docker run crictl run ctr run nerdctl run
Parar contêiner docker stop crictl stop ctr task kill nerdctl stop
Remover contêiner docker rm crictl rm ctr container rm nerdctl rm
Listar imagens docker images crictl images ctr image ls nerdctl images
Baixar imagem docker pull crictl pull ctr image pull nerdctl pull
Remover imagem docker rmi crictl rmi ctr image rm nerdctl rmi
Listar Pods N/A crictl pods N/A N/A
Iniciar Pod N/A crictl runp N/A N/A
Parar Pod N/A crictl stopp N/A N/A

2.9 Recursos Adicionais

  • nerdctl: Documentação oficial e referência de comandos disponível no repositório do projeto.
  • ctr / crictl: A ajuda detalhada pode ser obtida diretamente no terminal com ctr -h e crictl -h, respectivamente. A documentação do cri-tools também fornece um mapeamento útil entre os comandos do crictl e os do docker.

Tags: containerd crictl nerdctl ctr kubernetes

Publicado em 6-21 04:36