Red Hat Training

A Red Hat training course is available for RHEL 8

11.2. runc

A RunC é uma implementação leve e portátil da Iniciativa de Contêineres Abertos (OCI), especificação de tempo de funcionamento de contêineres. O runC reúne muitas das características de baixo nível que tornam possível a utilização de contêineres em funcionamento. Ele compartilha muito código de baixo nível com o Docker, mas não depende de nenhum dos componentes da plataforma Docker.

runc suporta namespaces Linux, migração ao vivo, e tem perfis de desempenho portáteis. Ele também fornece suporte total para recursos de segurança Linux como SELinux, grupos de controle (cgroups), seccomp, e outros. Você pode construir e executar imagens com o runc, ou pode executar imagens compatíveis com o OCI com o runc.

11.2.1. Contêineres com runc

Com runc, os recipientes são configurados utilizando fardos. Um pacote para um contêiner é um diretório que inclui um arquivo de especificação chamado config.json e um sistema de arquivos raiz. O sistema de arquivos raiz contém o conteúdo do contêiner.

Para criar um pacote, execute:

Especificações de $ runc

Este comando cria um arquivo config.json que contém apenas uma estrutura de ossos nus que você precisará editar. Mais importante ainda, você precisará alterar o parâmetro args para identificar o executável a ser executado. Por padrão, args está configurado para sh.

    "args": [
      "sh"
    ],

Como exemplo, você pode baixar a imagem base do Red Hat Enterprise Linux (ubi8/ubi) usando o podman e depois exportá-la, criar um novo pacote para ela com o runc e editar o arquivo config.json para apontar para essa imagem. Você pode então criar a imagem do contêiner e executar uma instância dessa imagem com o runc. Use os seguintes comandos:

# podman pull registry.redhat.io/ubi8/ubi
# podman export $(podman create registry.redhat.io/ubi8/ubi) > rhel.tar
# mkdir -p rhel-runc/rootfs
# tar -C rhel-runc/rootfs -xf rhel.tar
# runc spec -b rhel-runc
# vi rhel-runc/config.json   Change any setting you like
# runc create -b rhel-runc/ rhel-container
# runc start rhel-container
sh-4.2#

Neste exemplo, o nome da instância do recipiente é rhel-container. Executando esse recipiente, por padrão, inicia-se uma concha, para que você possa começar a olhar ao redor e executar comandos a partir do interior daquele recipiente. Digite exit quando estiver pronto.

O nome de uma instância de recipiente deve ser único no anfitrião. Para iniciar uma nova instância de um contêiner:

# runc start <container_name>

Você pode fornecer o diretório do pacote usando a opção -b. Por padrão, o valor para o pacote é o diretório atual.

Você precisará de privilégios de raiz para iniciar recipientes com runc. Para ver todos os comandos disponíveis para o runc e sua utilização, execute runc --help.