1. Introdução ao contêiner Podman
Podman (Pod Manager) é uma ferramenta de gerenciamento de contêineres lançada pela RedHat, posicionada como um substituto do Docker, e seu uso é semelhante ao do Docker. O Podman originou-se do projeto CRI-O, que pode acessar diretamente a implementação do OCI (como runC), e o processo é mais curto que o docker.
Podman é um projeto de tempo de execução de contêiner de código aberto disponível na maioria das plataformas Linux. O Podman fornece uma funcionalidade muito semelhante ao Docker. Ele não requer nenhum daemon para ser executado no sistema e também pode ser executado sem privilégios de root. O Podman pode gerenciar e executar qualquer contêiner e imagem de contêiner que esteja em conformidade com a especificação OCI (Open Container Initiative). O Podman fornece um front-end de linha de comando compatível com Docker para gerenciar imagens do Docker.
2. A diferença entre Podman e Docker
No link de gerenciamento de contêiner, a implementação do Docker Engine é o dockerd daemon, que precisa ser executado como root no Linux, dockerd chama containerd, containerd chama containerd-shim e, em seguida, pode chamar runc. Como o nome indica, o shim atua como um "shim", impedindo que o processo pai saia e afete a operação do contêiner.
O podman invoca diretamente o tempo de execução OCI (runc) e usa o common como ferramenta de gerenciamento para processos de contêiner, mas não requer o dockerd, um processo daemon que é executado como root.
No sistema podman, existe um processo daemon chamado comum, cujo caminho de execução é geralmente /usr/libexec/podman/conmon, que é o processo pai de cada processo de contêiner, cada contêiner tem um, e o pai de comum geralmente é processo número 1. O comum no podman é realmente equivalente ao containerd-shim no sistema docker.
O que está refletido na figura acima é que o podman não requer um processo daemon, enquanto o docker requer um processo daemon. O Podman resolve os problemas acima interagindo diretamente com o Image Registry, Image e Container, em vez de por meio do processo daemon. Além disso, o Podman permite que os usuários executem contêineres sem privilégios de root completos. Mais importante, ele também fornece comandos compatíveis com o Docker, permitindo que os usuários alternem facilmente dos comandos originais do Docker para o Podman.
3. Comandos comuns do contêiner Podman
3.1 Comandos relacionados ao contêiner
podman run #创建并启动容器
podman start #启动容器
podman ps #查看容器
podman stop #终止容器
podman restart #重启容器
podman attach #进入容器
podman exec #进入容器
podman export #导出容器
podman import #导入容器快照
podman rm #删除容器
podman logs #查看日志
podman system migrate #为用户停止所有容器并终止暂停进程
3.2 Comandos relacionados ao espelhamento
podman search #检索镜像
docke pull #获取镜像
podman images #列出镜像
podman image Is #列出镜像
podman rmi #删除镜像
podman image rm #删除镜像
podman save #导出镜像
podman load #导入镜像
podmanfile #定制镜像(三个)
podman build #构建镜像
podman run #运行镜像
podmanfile #常用指令(四个)
• COPY #复制文件
• ADD #高级复制
• CMD #容器启动命令
• ENV #环境变量
• EXPOSE #暴露端口
4. Implantar e usar contêineres Podman
4.1 Instalação do Podman
4.1.1 Instalação pelo yum
//安装podman
yum -y install podman
//仓库配置
vim /etc/containers/registries.conf
[registries.search]
registries = ['registry.access.redhat.com', 'registry.redhat.io', 'docker.io'] unqualified-search-registries = ["registry.fedoraproject.org", "registry.access.redhat.com", "registry.centos.org", "docker.io"]
4.1.2 Instalação do código-fonte
git clone https://github.com/containers/podman/cd podman
make BUILDTAGS="selinux seccomp"
sudo make install PREFIX=/usr
4.2 Uso do Podman
Verifique se a instalação foi bem-sucedida
executar contêiner podman
podman run -d --name httpd docker.io/library/httpd
podman images
listar contêineres em execução
podman ps
Observação: o Podman mostrará todos os contêineres se você adicionar -a ao comando ps.
Verifique os contêineres em execução
Você pode "inspecionar" os metadados e os detalhes de um contêiner em execução. Podemos até usar o subcomando de inspeção para ver o endereço IP atribuído ao contêiner. Como o contêiner está sendo executado no modo sem raiz, nenhum endereço IP é atribuído e o valor será listado como "Nenhum" na saída da inspeção.
Observação: -l é um argumento de conveniência para o contêiner mais recente. Você também pode usar o ID do contêiner em vez de -l.
podman inspect -l | grep IPAddress
Exibir os logs de um contêiner em execução
podman logs --latest
Visualize o uso de recursos do processo em um contêiner em execução
podman top <container_id>
Parar um contêiner em execução
podman stop --latest
excluir um contêiner
podman rm --latest