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-25
Agora 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",