Como interagir com os contêineres do Docker

Como interagir com os contêineres do Docker

Este artigo estende o artigo anterior do Docker e mostra como interagir com os contêineres do Docker, executando comandos dentro de contêineres, instalando software dentro de contêineres, inspecionando o status do contêiner, acessando contêineres usando Bash, persistindo mudanças nas imagens e removendo recipientes e imagens não utilizadas.

Neste tutorial, você aprenderá:

  • Como executar comandos dentro de contêineres
  • Como instalar o software dentro de contêineres
  • Como inspecionar o status do contêiner
  • Como acessar os contêineres usando Bash
  • Como persistir mudanças nas imagens
  • Como remover recipientes e imagens não utilizados
PHP instalado.

Requisitos de software e convenções usadas

Requisitos de software e convenções de linha de comando Linux
Categoria Requisitos, convenções ou versão de software usada
Sistema Qualquer distribuição Linux
Programas Docker
Outro Acesso privilegiado ao seu sistema Linux como raiz ou através do sudo comando.
Convenções # - requer que os comandos Linux sejam executados com privilégios root diretamente como usuário root ou por uso de sudo comando
$ - Requer que os comandos do Linux sejam executados como um usuário não privilegiado regular

Como interagir com os contêineres do Docker

No primeiro artigo desta série, você aprendeu conceitos do Docker e alguns comandos básicos e viu como você pode executar o software facilmente de uma maneira compartimentada, sem tocar em sua configuração de sistema operacional host. Vamos agora mais profundamente, entrar em um recipiente em execução e executando alguns comandos.



Executando comandos dentro de um contêiner em execução

No artigo anterior, você iniciou um recipiente Apache. A imagem subjacente não tinha o PHP instalado, por isso era capaz apenas de servir páginas HTML estáticas. Vamos obter um recipiente com Apache e PHP instalado nele. Caso você esteja se perguntando, há imagens prontas para serem usadas com o Apache e o PHP instalado, e elas podem ser encontradas no Docker Hub. Estamos fazendo isso apenas para demonstrar como uma imagem pode ser personalizada para suas necessidades.

Então, vamos iniciar uma instância do Debian usando uma linha de comando semelhante do artigo anterior, mas com duas diferenças: vamos dar um nome (--Nome Debian_Container), para que possamos nos referir a ele mais tarde e alocar um terminal para que ele seja executado (-isto).

$ Docker Run -it -Nome Debian_Container -D -P 8000: 80 -V "$ PWD":/var/www/html Debian 

Podemos interagir com um contêiner em corrida. Você foi informado antes que os contêineres compartilham o mesmo kernel que o sistema operacional host. Vamos checar.

$ Docker Exec Debian_Container Uname -a 

O comando Docker Exec acima executa o comando dado dentro do contêiner e mostre sua saída.

Todos os comandos do Docker têm uma ajuda associada, portanto, podemos ver as opções Docker Exec aceita:

$ Docker Exec -Help 

Agora você pode brincar com outros comandos:

$ Docker executivo debian_container ls -l $ Docker executivo debian_container 
cópia de

Neste último comando, aprendemos que o contêiner está executando o Debian 9, apesar do sistema operacional de sua máquina. Como mencionado anteriormente, o sistema operacional host e o contêiner compartilham apenas o kernel.

Se você tentasse, mas não conseguiu executar um comando dentro do contêiner, provavelmente não está lá. A imagem (como todas as outras imagens) é construída a partir de uma configuração mínima do Debian, portanto, qualquer ferramenta adicional deve ser instalada. Ele atinge dois objetivos: tamanho menor de disco e segurança aprimorada, pois menos software significa menos bugs a serem explorados.

Agora, vamos entrar no recipiente.

$ Docker Exec -it Debian Bash root@b5c694a02248:/usr/local/apache2# 
cópia de

Observe que o prompt mudou e agora você é usuário raiz dentro do recipiente (B5C694A02248 é o nome do host dentro do recipiente) dentro de uma casca de bash.



Instalando o software em um contêiner

Agora temos uma concha dentro do recipiente com usuário raiz. Como esta é uma versão cortada do Debian, não há nem os comandos principal e ps. Vamos instalá -los.

# APT ATUALIZA 
cópia de

Você pode ver o que está correndo com principal e ps -ef.

raiz@f5b423465e03:/# ps -ef uid pid ppid c stime tty time cmd root 1 0 0 19:46 pts/0 00:00 310 42 0 19:53 pts/1 00:00:00 ps -ef root@f5b423465e03:/# 
cópia de

Sim, é frugal. Os contêineres do Docker geralmente têm o número mínimo absoluto de processos executando. Para deixar a concha e retornar ao seu sistema operacional host, basta sair da Bash (tipo saída ou Ctrl+d).

Observe que muitos arquivos foram baixados por Atualização APT e APT Instale. Todos eles existem no disco do contêiner em execução. Eles ainda existem se o contêiner for interrompido e iniciado novamente (Docker Stop Debian_Container; Docker Start Debian_Container). Mas eles não existem na imagem. Isso significa que, se você remover este contêiner (Docker RM Debian_Container) e inicie um novo contêiner, você terá que instalar o pacote Procps de novo. Além disso, se você iniciar a imagem do Debian em outro host, você também terá que instalar Procps de novo. Veremos mais tarde como persistir a imagem com modificações de disco; portanto, da próxima vez que você iniciar um contêiner, todo o software será instalado.

Agora, vamos instalar o Apache e o PHP. O comando abaixo levará muito para terminar e baixará e instalará todos os pacotes de dependência, incluindo Apache e PHP - levará alguns minutos. No final, inicie o Apache e acesse localhost na porta 8000 no seu navegador da web (http: // localhost: 8000). Você verá a página do Debian padrão para o Apache.

# APT Instale Libapache2-Mod-Php # Serviço Apache2 Iniciar 
cópia de

Página padrão do Apache Debian.

Agora vamos confirmar que o PHP está lá. Você pode ir para /var/ww/html Dentro do recipiente, ou saia do shell do contêiner e digite o diretório atual do seu sistema operacional host (lembre -se de que mapeamos o diretório atual para /var/www/html dentro do recipiente?)

$ echo "> phpinfo.php 

E voilà (http: // localhost: 8000/phpinfo.php).

Informações do PHP.

Comprometendo -se com uma imagem

Como mencionado anteriormente, as alterações feitas no contêiner persistem enquanto o contêiner persistir, e espera -se que os contêineres sejam efêmeros - eles são feitos para serem destruídos. Modificações duráveis ​​devem ser transformadas em imagens.

O próximo artigo mostrará como criar uma imagem personalizada de uma maneira elegante (e fortemente recomendada), usando um Dockerfile. Por enquanto, você aprenderá um hack que pode ser útil em situações específicas em que não é possível ou desejável escrever um Dockerfile. Estendendo as imagens com um arquivo do docker, se preferir, porque pode ser facilmente editado ao cometer o estado do contêiner com uma nova imagem não deixa vestígios das alterações feitas, a menos que uma análise de camada de sistema de arquivos seja executada.

O comando Docker Commit tem dois parâmetros: Nome do contêiner e Novo nome da imagem e criará uma nova imagem no cache de imagens locais com base no contêiner. No comando abaixo, Debian_Container é o nome do contêiner e Debian-apache-php é o novo nome da imagem.

$ Docker Commit Debian_Container Debian-Apache-Php SHA256: 3F01C0C71539C4DC6DFD7483FF68C41143B7E9EB52DE4A9892C8CC136EDA236 
cópia de

Listando imagens no cache do host.

$ Docker Images Repositório Tag ID da imagem criada Tamanho Debian-Apache-Php mais recente 3F01C0C71539 10 minutos atrás 235 MB Debian mais recente Be2868Bababa 11 dias atrás 101MB 
cópia de

Observe que há uma nova imagem em seu host. Uma característica interessante da imagem e gerenciamento de contêineres é que o Docker armazenará apenas a diferença do estado de disco entre a imagem atual e a imagem em que se baseia, para que nenhum espaço de disco redundante seja desperdiçado. Para isso, o Docker usa um sistema de arquivos em camadas que usa a abordagem de cópia sobre gravação: quando um novo contêiner é criado, ele herda o mesmo disco da imagem e, como as modificações são feitas nos arquivos, elas são escritas em uma nova camada.



Inspecionar recipientes

Docker mantém muitas informações sobre objetos do Docker. O comando Docker inspecionar é usado para vê -los.

$ Docker Inspecione Debian_Container 

O comando recuperará um objeto JSON com dezenas de linhas detalhando o status do contêiner: ID do contêiner, data criada, estado, imagem, caminho de log, portas, volumes, redes, etc.

Recipientes e imagens de poda

Depois de brincar com recipientes e imagens, o disco do host acabará se enchendo de entidades abandonadas que precisam ser limpas para que você possa recuperar o espaço do disco.

O comando Prune de contêiner do docker removerá todos os recipientes parados. Tenha cuidado: depois que o contêiner é removido, qualquer estado associado é perdido. Fazer um backup ou cometer alterações em uma imagem antes.

O comando Docker Image Prune excluirá todas as imagens não utilizadas. Ainda não construímos imagens, mas este comando será útil no próximo artigo.

Conclusão

Neste artigo, você aprendeu a interagir com recipientes e como cometer mudanças nas imagens, embora essa abordagem não seja recomendada.

No próximo artigo, você criará suas próprias imagens com o Dockerfile, a maneira recomendada de personalizar imagens do Docker.

Mais nesta série de artigos do docker

  • Uma introdução prática aos recipientes do Docker
  • Como personalizar imagens do Docker com Dockerfiles

Tutoriais do Linux relacionados:

  • Uma introdução à automação, ferramentas e técnicas do Linux
  • Coisas para instalar no Ubuntu 20.04
  • Mastering Bash Script Loops
  • Como criar uma pilha de lâmpadas à base de docker usando o docker em…
  • Linux Apache não executando arquivos PHP: Solução
  • Mint 20: Melhor que o Ubuntu e o Microsoft Windows?
  • Coisas para fazer depois de instalar o Ubuntu 20.04 fossa focal linux
  • OpenLITESPEED WordPress Instalação
  • Como instalar o PHP no Ubuntu Linux
  • Instalação do Ampache Raspberry Pi