Como usar o comando docker container exec para executar comandos em um container em execução

DockerBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá como usar efetivamente o comando docker container exec para executar comandos dentro de um container Docker em execução. Começaremos por iniciar um container para execução, depois exploraremos como executar um único comando em um container em execução e como iniciar um shell interativo para interações mais complexas.

Além disso, este laboratório abordará como personalizar o ambiente de execução, definindo variáveis de ambiente e especificando o diretório de trabalho para o processo exec, fornecendo as habilidades necessárias para gerenciar e interagir com seus containers em execução.

Iniciar um container para execução

Nesta etapa, você aprenderá como iniciar um container Docker e executar um comando dentro dele. Containers Docker são unidades leves, portáteis e autossuficientes que encapsulam uma aplicação e suas dependências.

Primeiro, vamos baixar a imagem ubuntu do Docker Hub. Esta imagem contém um ambiente mínimo do sistema operacional Ubuntu.

docker pull ubuntu:latest

Você deve ver uma saída indicando que a imagem está sendo baixada. Uma vez que o download estiver completo, você pode iniciar um container baseado nesta imagem e executar um comando simples. Usaremos o comando echo para imprimir uma mensagem.

docker run ubuntu:latest echo "Hello from Docker container!"

Vamos detalhar este comando:

  • docker run: Este é o comando para criar e iniciar um novo container.
  • ubuntu:latest: Isso especifica a imagem a ser usada para o container. ubuntu é o nome da imagem, e latest é a tag, indicando a versão mais recente.
  • echo "Hello from Docker container!": Este é o comando que será executado dentro do container.

Você deve ver a saída Hello from Docker container! impressa no seu terminal. Isso confirma que o container foi iniciado e o comando foi executado com sucesso.

Executar um comando no container em execução

Na etapa anterior, iniciamos um container e executamos um comando que foi executado e, em seguida, o container foi encerrado. Nesta etapa, aprenderemos como executar um comando dentro de um container que já está em execução. Isso é útil para inspecionar o estado de um container em execução ou realizar tarefas administrativas.

Primeiro, vamos iniciar um container que continuará em execução. Usaremos a imagem ubuntu novamente e executaremos um comando que mantém o container ativo, como sleep infinity.

docker run -d ubuntu:latest sleep infinity

Vamos analisar as opções usadas:

  • -d: Esta opção executa o container em modo detached (desacoplado), o que significa que ele é executado em segundo plano e não bloqueia seu terminal.
  • sleep infinity: Este comando dentro do container fará com que ele durma indefinidamente, mantendo o container em execução.

Agora, vamos obter o ID do Container do container em execução. Você pode usar o comando docker ps para listar os containers em execução.

docker ps

Você deve ver uma saída semelhante a esta, mostrando seu container em execução:

CONTAINER ID   IMAGE          COMMAND           CREATED         STATUS         PORTS     NAMES
<container_id>   ubuntu:latest   "sleep infinity"   About a minute ago   Up About a minute             <container_name>

Copie o CONTAINER ID da saída. Agora, podemos usar o comando docker exec para executar um comando dentro deste container em execução. Substitua <container_id> pelo ID real que você copiou.

docker exec / < container_id > ls

Este comando executará ls / dentro do container especificado, listando o conteúdo do diretório raiz dentro do sistema de arquivos do container. Você deve ver uma lista de diretórios e arquivos, semelhante ao que você veria em um sistema Linux.

Isso demonstra como executar um comando em um container em execução sem pará-lo ou reiniciá-lo.

Executar um shell interativo no container em execução

Na etapa anterior, executamos um único comando em um container em execução. Frequentemente, você pode precisar interagir com um container em execução de forma mais extensa, talvez para depurar um problema ou explorar seu sistema de arquivos. Nesta etapa, você aprenderá como abrir uma sessão de shell interativa dentro de um container em execução.

Continuaremos a usar o container ubuntu que você iniciou na etapa anterior. Se o container não estiver em execução, você pode iniciá-lo novamente usando o comando da etapa anterior:

docker run -d ubuntu:latest sleep infinity

Obtenha o ID do Container do seu container ubuntu em execução usando docker ps:

docker ps

Agora, use o comando docker exec com as opções -it para abrir uma sessão de terminal interativa dentro do container. Substitua <container_id> pelo ID real do seu container em execução.

docker exec -it < container_id > bash

Vamos analisar as novas opções:

  • -i: Esta opção mantém o STDIN aberto mesmo que não esteja anexado. Isso é necessário para sessões interativas.
  • -t: Esta opção aloca um pseudo-TTY, que é necessário para uma sessão de shell.
  • bash: Este é o comando a ser executado dentro do container, neste caso, o shell Bash.

Após executar este comando, o prompt do seu terminal deve mudar, indicando que você agora está dentro do shell Bash do container. Agora você pode executar comandos dentro do ambiente do container. Por exemplo, tente listar os arquivos no diretório atual:

ls

Você agora está interagindo diretamente com o sistema de arquivos e o ambiente do container. Para sair do shell do container e retornar ao terminal da sua máquina host, basta digitar exit:

exit

Você deve estar de volta à sua sessão de terminal original. Este acesso ao shell interativo é uma ferramenta poderosa para depurar e gerenciar seus containers.

Definir variáveis de ambiente para o processo exec

Nesta etapa, você aprenderá como definir variáveis de ambiente especificamente para o comando que está sendo executado com docker exec. Isso permite que você passe configurações ou outras informações para o processo em execução dentro do container sem modificar permanentemente o ambiente do container.

Continuaremos a usar o container ubuntu em execução das etapas anteriores. Se ele não estiver em execução, inicie-o com:

docker run -d ubuntu:latest sleep infinity

Obtenha o ID do Container do seu container ubuntu em execução usando docker ps:

docker ps

Agora, vamos executar um comando dentro do container e definir uma variável de ambiente para essa execução específica. Usaremos o comando printenv para exibir as variáveis de ambiente. Substitua <container_id> pelo ID do seu container.

docker exec -e MY_VARIABLE="Hello from LabEx" MY_VARIABLE < container_id > printenv

Vamos analisar a nova opção:

  • -e MY_VARIABLE="Hello from LabEx": Esta opção define uma variável de ambiente chamada MY_VARIABLE com o valor "Hello from LabEx" para o comando printenv que está sendo executado.

Você deve ver a saída Hello from LabEx impressa no seu terminal. Isso confirma que a variável de ambiente foi definida com sucesso para o processo printenv.

Para demonstrar que essa variável de ambiente é definida apenas para o processo exec e não para o processo principal do container, vamos executar printenv MY_VARIABLE novamente sem a opção -e:

docker exec MY_VARIABLE < container_id > printenv

Desta vez, você não deve ver nenhuma saída, ou potencialmente um erro indicando que a variável não está definida. Isso mostra que a variável de ambiente estava disponível apenas para o comando executado com a flag -e.

Definir variáveis de ambiente com docker exec -e é uma maneira conveniente de passar configurações dinâmicas para processos em execução dentro de seus containers.

Definir o diretório de trabalho para o processo exec

Nesta etapa final, você aprenderá como definir o diretório de trabalho para o comando que está sendo executado com docker exec. Por padrão, docker exec executa comandos no diretório de trabalho configurado do container (frequentemente /). Você pode substituir isso usando a opção -w.

Continuaremos a usar o container ubuntu em execução. Se ele não estiver em execução, inicie-o com:

docker run -d ubuntu:latest sleep infinity

Obtenha o ID do Container do seu container ubuntu em execução usando docker ps:

docker ps

Agora, vamos executar um comando que imprime o diretório de trabalho atual dentro do container. Usaremos o comando pwd. Substitua <container_id> pelo ID do seu container.

docker exec < container_id > pwd

Você deve ver / como a saída, que é o diretório de trabalho padrão na imagem ubuntu.

Agora, vamos executar o comando pwd novamente, mas desta vez definiremos o diretório de trabalho para /tmp usando a opção -w.

docker exec -w /tmp < container_id > pwd

Vamos analisar a nova opção:

  • -w /tmp: Esta opção define o diretório de trabalho para o comando pwd como /tmp dentro do container.

Você deve agora ver /tmp como a saída. Isso demonstra que você pode especificar um diretório de trabalho diferente para o comando executado com docker exec. Isso é útil quando você precisa executar comandos que operam em arquivos em um local específico dentro do container.

Isso conclui o laboratório sobre a execução de comandos em containers Docker. Você aprendeu como iniciar containers para execução, executar comandos em containers em execução, abrir sessões de shell interativas, definir variáveis de ambiente e definir o diretório de trabalho para processos exec.

Resumo

Neste laboratório, você aprendeu como iniciar um container Docker e executar um comando dentro dele usando docker run. Em seguida, você progrediu para a execução de comandos dentro de um container já em execução usando o comando docker container exec, que é essencial para inspecionar ou gerenciar containers ativos.

Além disso, você explorou funcionalidades avançadas do docker container exec, incluindo a definição de variáveis de ambiente para o processo executado e a especificação do diretório de trabalho, proporcionando maior controle e flexibilidade ao interagir com containers em execução.