Red Hat Training
A Red Hat training course is available for RHEL 8
Capítulo 3. Trabalhando com recipientes e cápsulas
Os contêineres representam um processo em execução ou parado gerado a partir dos arquivos localizados em uma imagem de contêiner descompactada. As ferramentas para operar os recipientes e trabalhar com eles são descritas nesta seção.
3.1. Contêineres em funcionamento
Quando você executa um comando podman run, você essencialmente gira e cria um novo recipiente a partir de uma imagem de recipiente. O comando que você passa para a linha de comando podman run vê o interior do contêiner como seu ambiente de funcionamento, portanto, por padrão, muito pouco pode ser visto do sistema hospedeiro. Por padrão, por exemplo, o aplicativo em execução vê:
- O sistema de arquivo fornecido pela imagem do contêiner.
- Uma nova tabela de processos do interior do contêiner (nenhum processo do hospedeiro pode ser visto).
Se você quiser disponibilizar um diretório do host para o container, mapear as portas de rede do container para o host, limitar a quantidade de memória que o container pode usar, ou expandir as partes da CPU disponíveis para o container, você pode fazer essas coisas a partir da linha de comando podman run. Aqui estão alguns exemplos de linhas de comando podman run que permitem diferentes características.
EXAMPLE #1 (Run a quick command): Este comando podman executa o comando cat /etc/os-release para ver o tipo de sistema operacional utilizado como base para o contêiner. Depois que o recipiente executa o comando, o recipiente sai e é excluído (--rm).
# podman run --rm registry.redhat.io/ubi8/ubi cat /etc/os-release NAME="Red Hat Enterprise Linux" VERSION="8.2 (Ootpa)" ID="rhel" ID_LIKE="fedora" VERSION_ID="8.2" PLATFORM_ID="platform:el8" PRETTY_NAME="Red Hat Enterprise Linux 8.2 (Ootpa)" ANSI_COLOR="0;31" CPE_NAME="cpe:/o:redhat:enterprise_linux:8.2:GA" HOME_URL="https://www.redhat.com/" BUG_REPORT_URL="https://bugzilla.redhat.com/" REDHAT_BUGZILLA_PRODUCT="Red Hat Enterprise Linux 8" REDHAT_BUGZILLA_PRODUCT_VERSION=8.2 REDHAT_SUPPORT_PRODUCT="Red Hat Enterprise Linux" REDHAT_SUPPORT_PRODUCT_VERSION="8.2" ...
EXAMPLE #2 (View the Dockerfile in the container): Este é outro exemplo de execução de um comando rápido para inspecionar o conteúdo de um contêiner a partir do host. Todas as imagens em camadas que a Red Hat fornece incluem o Dockerfile a partir do qual elas são construídas em /root/buildinfo. Neste caso, você não precisa montar nenhum volume a partir do host.
podman run --rm \
registry.redhat.io/rhel8/rsyslog \
ls /root/buildinfo
Dockerfile-rhel8-rsyslog-8.2-25Agora que você sabe como se chama o Dockerfile, você pode listar seu conteúdo:
# podman run --rm registry.redhat.io/rhel8/rsyslog \
cat /root/buildinfo/Dockerfile-rhel8-rsyslog-8.2-25
FROM sha256:eb205f07ce7d0bb63bfe560...
LABEL maintainer="Red Hat, Inc."
RUN INSTALL_PKGS="\
rsyslog \
rsyslog-gnutls \
rsyslog-gssapi \
rsyslog-mysql \
rsyslog-pgsql \
rsyslog-relp \
" && dnf -y install $INSTALL_PKGS && rpm -V --nosize
--nofiledigest --nomtime --nomode $INSTALL_PKGS && dnf clean all
LABEL com.redhat.component="rsyslog-container"
LABEL name="rhel8/rsyslog"
LABEL version="8.2"
...
EXAMPLE #3 (Run a shell inside the container): A utilização de um recipiente para lançar uma concha bash permite olhar dentro do recipiente e mudar o conteúdo. Isto define o nome do contêiner para mybash. O -i cria uma sessão interativa e o -t abre uma sessão terminal. Sem -i, a concha se abriria e depois sairia. Sem -t, a concha ficaria aberta, mas você não seria capaz de digitar nada na concha.
Uma vez executado o comando, você é apresentado com um prompt de shell e pode começar a executar comandos de dentro do recipiente:
# podman run --name=mybash -it registry.redhat.io/ubi8/ubi /bin/bash [root@ed904b8f2d5c/]# yum install procps-ng [root@ed904b8f2d5c/]# ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 00:46 pts/0 00:00:00 /bin/bash root 35 1 0 00:51 pts/0 00:00:00 ps -ef [root@49830c4f9cc4/]# exit
Embora o container não esteja mais funcionando uma vez que você saia, o container ainda existe com o novo pacote de software ainda instalado. Use podman ps -a para listar o contêiner:
# podman ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES IS INFRA 1ca061b47bd7 .../ubi8/ubi:latest /bin/bash 8 minutes ago Exited 12 seconds ago musing_brown false ...
Você poderia recomeçar esse recipiente usando podman start com as opções -ai. Por exemplo:
# podman start -ai mybash [root@ed904b8f2d5c/]#
EXAMPLE #4 (Bind mounting log files): Uma maneira de disponibilizar mensagens de registro do interior de um contêiner para o sistema hospedeiro é ligar o dispositivo hospedeiro /dev/log dentro do contêiner. Este exemplo ilustra como executar uma aplicação em um contêiner RHEL chamado log_test que gera mensagens de log (apenas o comando logger neste caso) e direciona essas mensagens para o dispositivo /dev/log que é montado no contêiner a partir do host. A opção --rm remove o contêiner após a sua execução.
# podman run --name="log_test" -v /dev/log:/dev/log --rm \
registry.redhat.io/ubi8/ubi logger "Testing logging to the host"
# journalctl -b | grep Testing
Nov 12 20:00:10 ubi8 root[17210]: Testing logging to the host
EXAMPLE #5 (Run a service as a daemon with a static IP address): O exemplo a seguir apresenta um serviço rsyslog como um processo daemon, portanto, ele funciona continuamente em segundo plano. Ele também diz a podman para configurar a interface da rede de contêineres para um determinado endereço IP (por exemplo, 10.88.0.44). Depois disso, você pode executar o comando podman inspect para verificar se o endereço IP foi configurado corretamente:
# podman run -d --ip=10.88.0.44 registry.access.redhat.com/rhel7/rsyslog
efde5f0a8c723f70dd5cb5dc3d5039df3b962fae65575b08662e0d5b5f9fbe85
# podman inspect efde5f0a8c723 | grep 10.88.0.44
"IPAddress": "10.88.0.44",