Primeros pasos con podman

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
    复制代码

    imagen.png

    docker inicia un demonio llamado dockerd.

  • servidor podman

    ps -aux | grep podman
    复制代码

    imagen.png

    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

  1. 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
      复制代码

      imagen.png

      Se puede encontrar que si no agrega sudo, no tiene permiso para operar la ventana acoplable.

    • servidor podman

      # 切换到demo用户
      # su - demo  // 需要使用 - ,不然会出现权限问题
      # podman version
      复制代码

      imagen.png

      Puede operar podman sin agregar sudo.

  2. 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
      复制代码

      imagen.png

      • 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
      复制代码

      imagen.png

      • Después de salir del contenedor, mire los permisos nuevamente
      # sudo cat /etc/sudoers
      复制代码

      imagen.png

      Puede ver el contenido de este archivo, esto no es muy seguro.

    • servidor podman

      • Verifique los permisos del usuario de demostración antes de crear el contenedor.
      # sudo cat /etc/sudoers
      复制代码

      imagen.png

      • 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
      复制代码

      imagen.png

      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
      复制代码

      imagen.png

      imagen.png

      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
    复制代码

    imagen.png

Cuarto, usa podman

  • Ver ayuda:podman --help imagen.png

    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=podmanpara 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 imagen.png

  • Inicie el contenedor:podman run -it busybox sh imagen.png

  • Ventana acoplable de comandos de mapeo:alias docker=podman imagen.png

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.

Referencias

Supongo que te gusta

Origin juejin.im/post/6990279582255579150
Recomendado
Clasificación