Usando Podman, uma forma "mais segura" de rodar conteiners
O podman é o concorrente do docker para gestão de ambientes em conteiners. O seu grande diferencial está na segurança porque com ele é possível iniciar conteineres sem permissões de superusuário (rootless).
Caso você ainda não sabia o Docker executa todos os conteiners a partir de um processo de nível root (root daemon), ou seja, com alto nível de permissão de acesso. O Podman em contrapartida é daemonless, ele dá ao systemd a responsabilidade de gerenciar o início ou não das aplicações e permite que conteiners sejam executados com usuários de baixa permissão (usuários não-root, rootless).
O que isso significa na prática?
Se um conteiner rodando em Docker tiver alguma vulnerabilidade de segurança e for invadido por alguém mal intencionado, ele poderá ter acesso root ao sistema hospedeiro, ou seja, tomar totalmente o controle da máquina e de todos os conteiners, não apenas o vulnerável.
Rodando conteiners rootless com podman
# Instale o podman
sudo apt install podman
# Verifique se o libpam-systemd está instalado, para permitir o user lingering (systemd a nivel de usuário) functionar via ssh
sudo apt install libpam-systemd
# Carregar a variável de ambiente correta após o login de cada usuário
sudo sh -c "echo 'export XDG_RUNTIME_DIR=/run/user/\$UID' >> /etc/skel/.profile"
# Criar o diretório (pasta) ~/.config/systemd/user/ para cada novo usuário
sudo sh -c "echo 'mkdir -p ~/.config/systemd/user/' >> /etc/skel/.profile"
# Crie um usuário não superusuário para rodar o conteiner
sudo useradd -m -s /bin/bash usuario-conteiner
# Habilite o user lingering para o usuário
sudo loginctl enable-linger usuario-conteiner
# Entre com o usuário
sudo su - usuario-conteiner
# Crie um conteiner do nginx
# Expõe porta 80 do conteiner nginx para a porta 8080 do sistema hospedeiro
podman run -d --restart unless-stopped -p 8080:80 --name my-nginx docker.io/library/nginx
# Teste a porta 8080 curl localhost:8080
# Crie o arquivo systemd
podman generate systemd my-nginx > ~/.config/systemd/user/container-my-nginx.service
# Habilitando o serviço automaticamente após reboot
systemctl --user enable container-my-nginx.service
# Parando o conteiner
systemctl --user stop container-my-nginx.service
# Iniciando o conteiner
systemctl --user start container-my-nginx.service
# Verificando logs do conteiner usando systemd
systemctl --user status container-my-nginx.service
# Verificando logs do conteiner usando journalctl em tempo real
journalctl --user -f -u container-my-nginx
# Verificando logs do conteiner usando podman
podman logs my-nginx
# Verificando logs do conteiner em tempo real usando podman
podman logs -f my-nginx
Referências
Gerando systemd para o podman rootless
https://github.com/containers/podman/blob/main/docs/source/markdown/podman-generate-systemd.1.md
Tutorial do systemd
Usando o systemd no Linux – Como criar seus próprios serviços e daemons no Linux?