Introdução a Contêiner na prática
Instrutor: Caio Flausino
Previsto para o dia 26 de agosto, das 8h30 às 11h30 (Horário de Brasília).
Introdução à contêiner na prática
O minicurso previsto para o dia 26 de agosto, das 8h30m às 11h30m, abordará como os contêineres Linux funcionam nos níveis mais baixos do sistema operacional Linux, explorando questões de desempenho e segurança. Além disso, também serão feitas diversas demonstrações das funcionalidades, dessa forma, o aluno conseguirá compreender como contêineres são formados e os impactos nas aplicações. O curso é recomendado para aqueles que queriam conhecer as aplicações de contêineres ou queriam se aprofundar no assunto entendendo os mecanismos existentes que são utilizados para essa tecnologia.
Configuração e instalação do ambiente
Requisitos
O minicurso não irá abordar uma ferramenta específica (docker, podman, ...), mas os conceitos vistos no curso podem ser aplicados a maioria delas, já que elas na maior parte simplesmente utilizam a API do kernel Linux para a criação dos contêineres e possuem comandos com sintaxe similares. O principal requisito é possuir um sistema Linux:
Pode ser tanto nativo quanto virtualizado (WSL2 é uma opção válida). Atenção, existe uma diferença entre WSL e WSL2, sendo o 2 uma máquina virtual e a alternativa recomendada
Instalação:
É importante que o aluno esteja com todas as ferramentas instaladas para que possa acompanhar e realizar os experimentos, portanto, agora será explicado os procedimentos de instalação e verificação.
A princípio, a maioria dos programas que serão utilizados neste minicurso vem por padrão na grande parte das distribuições Linux, sendo necessário apenas instalar o *podman* (mesmo assim, é importante verificar que estão presentes no sistema)
Comandos bash para instalação e verificação:
Podman
sudo apt install podman
sudo dnf install podman
Verificação (todos os programas devem ter uma saída de versão ou não apresentar erros)
podman --version &&
systemd-run --version &&
unshare --version &&
ls --version &&
echo 'esta na maquina!' &&
prlimit --version
Guia do minicurso
Contêineres Linux
O que é um contêiner?
Virtualização a nível de sistema operacional
União de tecnologias
Isolamento e distribuição
Imagens de contêineres
O problema do "funciona na minha máquina" (não é tão simples assim)
Namespaces
O que são?
Como utilizar?
Contêiner root e rootless
O efeito do namespace de usuário nas permissões de sistema
SECCOMP
Filtragem de chamadas de sistema a nível de kernel
Por que filtrar chamadas de sistema?
libseccomp
Cgroups
Controle de uso de recursos de grupos de processos
Diferença para o rlimit
OverlayFS
Sistema de arquivos em camada
Como isso permite o uso de imagens?
Mão na massa
Testes com namespaces (*unshare*)
Testes com SECCOMP (*systemd-run*)
Demonstração rápida de *cgroups*
Testes com contêineres completos (*podman*)
Links de apoio
Namespaces https://man7.org/linux/man-pages/man7/namespaces.7.html
Cgroups https://man7.org/linux/man-pages/man7/cgroups.7.html
SECCOMP https://man7.org/linux/man-pages/man2/seccomp.2.html
OverlayFS https://docs.kernel.org/filesystems/overlayfs.html
Capabilities https://man7.org/linux/man-pages/man7/capabilities.7.html
Podman https://www.redhat.com/pt-br/topics/containers/what-is-podman
systemd-run https://manpages.ubuntu.com/manpages/xenial/man1/systemd-run.1.html
unshare program https://manpages.ubuntu.com/manpages/xenial/man1/systemd-run.1.html
prlimit https://man7.org/linux/man-pages/man1/prlimit.1.html