1. ¿Qué es podman?
1. concepto podman
Podman es una herramienta nativa de Linux de código abierto y sin demonios diseñada para facilitar que los contenedores y las imágenes encuentren, ejecuten, creen, compartan e implementen aplicaciones utilizando Open Containers Initiative (OCI). Podman proporciona una interfaz de línea de comandos (CLI) con la que cualquiera que haya usado el motor de contenedor Docker puede comenzar rápidamente. La mayoría de los usuarios pueden simplemente crear un alias de Podman a Docker (alias Docker = Podman) sin ningún problema. Al igual que otros motores de contenedores comunes (Docker, CRI-O, containerd), Podman se basa en tiempos de ejecución de contenedores compatibles con OCI (runc, cron, runv, etc.) para interactuar con el sistema operativo y crear contenedores en ejecución. Esto hace que un contenedor en ejecución creado por Podman sea casi indistinguible de un contenedor creado por cualquier otro motor de contenedores de propósito general.
2 、 podman 官 网 :podman.io/getting-sta…
En segundo lugar, la diferencia entre podman y docker.
La experiencia de usar Podman es Docker
similar, la diferencia es que Podman no tiene un demonio. Al usar Docker CLI antes, Docker CLI diría "Quiero iniciar un contenedor" a Docker Engine a través de la API de gRPC, y luego Docker Engine lo hará. pase el tiempo de ejecución del contenedor OCI (el valor predeterminado es runc) para iniciar un contenedor. Esto significa que el proceso del contenedor no puede ser un proceso secundario de la CLI de Docker, sino un proceso secundario de Docker Engine.
Podman es relativamente simple y rudo. No usa Daemon, pero inicia el contenedor directamente a través del tiempo de ejecución de OCI (también se ejecuta de forma predeterminada), por lo que el proceso del contenedor es el proceso secundario de podman. Esto se parece más al modelo fork/exec de Linux, mientras que Docker usa un modelo C/S (cliente/servidor). Comparado con el modelo C/S, el modelo fork/exec tiene muchas ventajas, tales como:
- Los administradores del sistema pueden saber quién inició un proceso de contenedor.
- Si usa
cgroup
algunas restricciones en podman, todos los contenedores creados estarán restringidos. - Si coloca el comando podman en un
systemd
archivo de unidad, el proceso contenedor puede devolver una notificación a través de podman de que el servicio está listo para recibir tareas. - Las conexiones se pueden
socket
pasar de systemd a podman y a procesos de contenedores para poder usarlas.
1. podman no tiene ningún proceso daemon
-
servidor acoplable
ps -aux | grep docker 复制代码
docker inicia un demonio llamado dockerd.
-
servidor podman
ps -aux | grep podman 复制代码
Se puede ver que no hay información sobre el proceso de podman en absoluto.
2. Los permisos de usuario de Podman son diferentes a los de Docker
- Derechos de usuario ordinario
-
Crear una demostración de usuario común
# useradd demo # passwd demo // 设置密码 # su demo 复制代码
-
servidor acoplable
# docker version # sudo docker version // 需要提前将 demo 用户加入 /etc/sudoers 复制代码
Se puede encontrar que si no agrega sudo, no tiene permiso para operar la ventana acoplable.
-
servidor podman
# 切换到demo用户 # su - demo // 需要使用 - ,不然会出现权限问题 # podman version 复制代码
Puede operar podman sin agregar sudo.
-
- Permisos para alojar archivos dentro del contenedor docker
Docker siempre ha tenido un problema. Si el usuario de demostración se une al grupo de usuarios de Docker, el usuario de demostración puede crear un contenedor. Si el usuario de demostración no tiene permiso para asignar el archivo al contenedor, el archivo se puede modificar y ver en el envase. Entonces, ¿podman también tiene este problema?
-
servidor acoplable
- Asigne un grupo de usuarios al usuario de demostración:
usermod -g docker demo
- Eliminar los privilegios sudo del usuario de demostración
# vim /etc/sudoers # 删除 demo 那一行 复制代码
- Verificar permisos:
# su - demo # sudo cat /etc/sudoers 复制代码
- Cree un contenedor con docker y asigne el archivo /etc/sudoers al contenedor
# run 一个容器 # docker run -it -v /etc/sudoers:/home/sudoers busybox sh # 进入容器后修改 /etc/sudoers 的文件内容,将 demo 的权限添加进去 # vi /home/sudoers 复制代码
- Después de salir del contenedor, mire los permisos nuevamente
# sudo cat /etc/sudoers 复制代码
Puede ver el contenido de este archivo, esto no es muy seguro.
- Asigne un grupo de usuarios al usuario de demostración:
-
servidor podman
- Verifique los permisos del usuario de demostración antes de crear el contenedor.
# sudo cat /etc/sudoers 复制代码
- Intenta ejecutar un contenedor en el camino de la ventana acoplable
# podman run -it -v /etc/sudoers:/home/sudoers busybox sh # 进入容器后会发现 /home/sudoers 文件为空,并且提示没有权限 # cat /home/sudoers 复制代码
De esta manera, no hay forma de modificar este archivo sin permiso, entonces, ¿por qué el archivo está asignado y por qué no se puede cambiar el archivo?
-
Vista del proceso del contenedor
En Linux, los contenedores existen en el sistema en forma de procesos (si está interesado, puede verificar la información usted mismo, y no entraremos en detalles aquí). El proceso en podman es diferente al de docker, por lo que aunque podman mapea archivos con permisos de root, no se puede modificar.
- Contenedor de ejecución de daemon
# docker 服务器 # docker run -it -d --name=busybox -v /etc/sudoers:/home/sudoers busybox # podman 服务器 # podman run -it -d -v /etc/sudoers:/home/sudoers busybox --name busybox 复制代码
- Ver proceso por ID de contenedor
# docker 服务器 # docker ps # ps -aux | grep 46f121aff161 # podman 服务器 # podman ps # ps -aux | grep 240842862d24 复制代码
En comparación, se encuentra que cuando podman se ejecuta con el usuario de demostración, el usuario utilizado por el proceso es de demostración, por lo que en el contenedor, cuando se utiliza el usuario de demostración para acceder al archivo de permisos raíz, se le indicará que no hay permiso. .
-
3. Instalar podman
-
Documentación de instalación: podman.io/getting-sta…
-
CentOS
# Centos 7 curl -L -o /etc/yum.repos.d/devel:kubic:libcontainers:stable.repo https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/CentOS_7/devel:kubic:libcontainers:stable.repo yum -y install podman # Centos 8 sudo dnf -y module disable container-tools sudo dnf -y install 'dnf-command(copr)' sudo dnf -y copr enable rhcontainerbot/container-selinux sudo curl -L -o /etc/yum.repos.d/devel:kubic:libcontainers:stable.repo https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/CentOS_8/devel:kubic:libcontainers:stable.repo sudo dnf -y install podman 复制代码
Cuarto, usa podman
-
Ver ayuda:
podman --help
Se puede encontrar que se puede decir que la forma de uso es la misma que la de docker.No se preocupe por cambiar de docker a podman. Si no está acostumbrado a usar el comando podman, puede usar
alias docker=podman
para asignar el comando docker. -
Configure la dirección de aceleración:
vim /etc/containers/registries.conf
... # does not curate, patch or maintain container images from the docker.io registry. # PS:在增加加速地址时,不能有http或者https [registries.search] registries = ['registry.access.redhat.com', 'registry.redhat.io', 'docker.io', 'xxx.mirror.aliyuncs.com'] ... 复制代码
-
Saca la imagen:
podman pull busybox
-
Inicie el contenedor:
podman run -it busybox sh
-
Ventana acoplable de comandos de mapeo:
alias docker=podman
V. Resumen
- podman puede reemplazar a docker como herramienta de administración de contenedores. Dado que no hay un proceso daemon, consume menos recursos del sistema que cuando se usa Docker.
- Podman no usa los permisos de usuario raíz de docker, por lo que se siente más seguro que docker.
- La forma de usar podman es exactamente la misma que la de docker, y no hay problema para transferir directamente desde docker.