Red Hat Training

A Red Hat training course is available for RHEL 8

2.11. Inspeção de imagens locais

Depois de puxar uma imagem para seu sistema local e antes de executá-la, é uma boa idéia investigar essa imagem. As razões para investigar uma imagem antes de executá-la incluem:

  • Entendendo o que a imagem faz
  • Verificar que software está dentro da imagem

Procedimento

O comando podman inspect exibe informações básicas sobre o que uma imagem faz. Você também tem a opção de montar a imagem em seu sistema host e usar ferramentas do host para investigar o que está na imagem. Aqui está um exemplo de como investigar o que a imagem de um container faz antes de executá-la.

  1. Inspect an image: Execute podman inspect para ver qual comando é executado quando você executa a imagem do recipiente, assim como outras informações. Aqui estão exemplos de como examinar as imagens do recipiente ubi8/ubi e rhel8/rsyslog (com apenas trechos de informações mostradas aqui):

    # podman pull registry.redhat.io/ubi8/ubi
    # podman inspect registry.redhat.io/ubi8/ubi | less
    ...
       "Cmd": [
           "/bin/bash"
       ],
       "Labels": {
           "License": "GPLv3",
           "architecture": "x86_64",
           "authoritative-source-url": "registry.redhat.io",
           "build-date": "2018-10-24T16:46:08.916139",
           "com.redhat.build-host": "cpt-0009.osbs.prod.upshift.rdu2.redhat.com",
           "com.redhat.component": "rhel-server-container",
           "description": "The Red Hat Enterprise Linux Base image is designed to be a fully supported...
    ...
    # podman pull registry.redhat.io/rhel8/rsyslog
    # podman inspect registry.redhat.io/rhel8/rsyslog
       "Cmd": [
         "/bin/rsyslog.sh"
       ],
       "Labels": {
         "License": "GPLv3",
         "architecture": "x86_64",
    ...
         "install": "podman run --rm --privileged -v /:/host -e HOST=/host -e IMAGE=IMAGE -e NAME=NAME IMAGE /bin/install.sh",
    ...
         "run": "podman run -d --privileged --name NAME --net=host --pid=host -v /etc/pki/rsyslog:/etc/pki/rsyslog -v /etc/rsyslog.conf:/etc/rsyslog.conf -v /etc/sysconfig/rsyslog:/etc/sysconfig/rsyslog -v /etc/rsyslog.d:/etc/rsyslog.d -v /var/log:/var/log -v /var/lib/rsyslog:/var/lib/rsyslog -v /run:/run -v /etc/machine-id:/etc/machine-id -v /etc/localtime:/etc/localtime -e IMAGE=IMAGE -e NAME=NAME --restart=always IMAGE /bin/rsyslog.sh",
         "summary": "A containerized version of the rsyslog utility
    ...

    O recipiente ubi8/ubi executará a concha do bash, se nenhum outro argumento for dado quando você o iniciar com podman run. Se um Ponto de Entrada fosse definido, seu valor seria usado em vez do valor Cmd (e o valor de Cmd seria usado como argumento para o comando Ponto de Entrada).

    No segundo exemplo, a imagem do contêiner rhel8/rsyslog tem rótulos embutidos em install e run. Essas etiquetas dão uma indicação de como o recipiente deve ser instalado no sistema (instalar) e executado (rodar).

  2. Mount a container: Usando o comando podman, monte um recipiente ativo para investigar melhor seu conteúdo. Este exemplo executa e lista um container rsyslog em execução, depois exibe o ponto de montagem a partir do qual você pode examinar o conteúdo de seu sistema de arquivos:

    # podman run -d registry.redhat.io/rhel8/rsyslog
    # podman ps
    CONTAINER ID IMAGE             COMMAND         CREATED        STATUS      PORTS NAMES
    1cc92aea398d ...rsyslog:latest /bin/rsyslog.sh 37 minutes ago Up 1 day ago      myrsyslog
    # podman mount 1cc92aea398d
    /var/lib/containers/storage/overlay/65881e78.../merged
    # ls /var/lib/containers/storage/overlay/65881e78*/merged
    bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

    Após o podman mount, o conteúdo do recipiente é acessível a partir do diretório listado no host. Use ls para explorar o conteúdo da imagem.

  3. Check the image’s package list: Para verificar os pacotes instalados no container, diga ao comando rpm para examinar os pacotes instalados no ponto de montagem do container:

    # rpm -qa --root=/var/lib/containers/storage/overlay/65881e78.../merged
    redhat-release-server-7.6-4.el7.x86_64
    filesystem-3.2-25.el7.x86_64
    basesystem-10.0-7.el7.noarch
    ncurses-base-5.9-14.20130511.el7_4.noarch
    glibc-common-2.17-260.el7.x86_64
    nspr-4.19.0-1.el7_5.x86_64
    libstdc++-4.8.5-36.el7.x86_64