Trabalhando com Contêineres Docker

Introdução

O Docker é uma ferramenta de containerização popular usada para fornecer a aplicativos de software um sistema de arquivos que contém tudo o que eles precisam para serem executados. O uso de contêineres Docker garante que o software se comporte da mesma maneira, independentemente de onde seja implantado, porque seu ambiente de execução é consistentemente uniforme.

Neste tutorial, forneceremos uma breve visão geral da relação entre imagens Docker e contêineres Docker. Em seguida, daremos uma olhada mais detalhada em como executar, iniciar, parar e remover contêineres.

Visão Geral

Podemos pensar em uma imagem Docker como um modelo inerte usado para criar contêineres Docker. As imagens geralmente começam com um sistema de arquivos raiz e adicionam alterações no sistema de arquivos e seus parâmetros de execução correspondentes em camadas ordenadas e somente leitura. Ao contrário de uma distribuição Linux típica, uma imagem Docker normalmente contém apenas o essencial necessário para executar a aplicação. As imagens não têm estado e não mudam. Em vez disso, elas formam o ponto de partida para os contêineres Docker.

As imagens ganham vida com o comando docker run, que cria um container adicionando uma camada de leitura e gravação sobre a imagem. Essa combinação de camadas de somente leitura cobertas com uma camada de leitura e gravação é conhecida como um sistema de arquivos de união. Quando uma alteração é feita em um arquivo existente em um contêiner em execução, o arquivo é copiado do espaço de somente leitura para a camada de leitura e gravação, onde as alterações são aplicadas. A versão na camada de leitura e gravação oculta o arquivo original, mas não o remove. As alterações na camada de leitura e gravação existem apenas dentro de uma instância de contêiner individual. Quando um contêiner é excluído, quaisquer alterações são perdidas a menos que medidas sejam tomadas para preservá-las.

Como trabalhar com contêineres Docker

  1. Criar Dois Contêineres Docker
  2. Reiniciar o Primeiro Contêiner
  3. Excluir Ambos os Contêineres

Trabalhando com Contêineres

A cada vez que você usa o comando docker run, ele cria um novo contêiner a partir da imagem que você especifica. Isso pode ser uma fonte de confusão, então vamos dar uma olhada com alguns exemplos:

Passo 1: Criando Dois Contêineres

O seguinte comando docker run irá criar um novo contêiner usando a imagem base ubuntu. -t nos dará um terminal e -i nos permitirá interagir com ele. Vamos depender do comando padrão no arquivo Docker da imagem base do Ubuntu, bash, para nos colocar em um shell.

  1. docker run -ti ubuntu

O prompt de linha de comando muda para indicar que estamos dentro do contêiner como usuário root, seguido pelo ID do contêiner com 12 caracteres.

Vamos fazer uma alteração, ecoando algum texto no diretório /tmp do contêiner, e então usar o cat para verificar se foi salvo com sucesso.

  1. echo "Example1" > /tmp/Example1.txt
  2. cat /tmp/Example1.txt
Output
Example1

Agora, vamos sair do contêiner.

  1. exit

Os contêineres do Docker param de executar assim que o comando que eles emitiram é concluído, então nosso contêiner parou quando saímos do shell bash. Se executarmos docker ps, o comando para exibir os contêineres em execução, não veremos o nosso.

  1. docker ps
Output
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

Se adicionarmos a bandeira -a, que mostra todos os contêineres, parados ou em execução, então nosso contêiner aparecerá na lista:

  1. docker ps -a
Output
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 11cc47339ee1 ubuntu "/bin/bash" 6 minutes ago Exited (127) 8 seconds ago small_sinoussi

Quando o contêiner foi criado, ele recebeu seu ID de contêiner e um nome gerado aleatoriamente. Neste caso, 11cc47339ee1 é o ID do contêiner e small_sinoussi é o nome gerado aleatoriamente. ps -a mostra esses valores, assim como a imagem da qual o contêiner foi construído (ubuntu), quando o contêiner foi criado (seis minutos atrás), e o comando que foi executado nele (/bin/bash). A saída também fornece o status do contêiner (Exited) e quanto tempo atrás o contêiner entrou nesse estado (6 segundos atrás). Se o contêiner ainda estivesse em execução, veríamos o status “Up”, seguido de quanto tempo ele estava em execução.

Se executarmos novamente o mesmo comando, um novo contêiner é criado inteiramente:

  1. docker run -ti ubuntu

Podemos dizer que é um novo contêiner porque o ID no prompt de comando é diferente, e quando procuramos pelo nosso arquivo Exemplo1, não o encontraremos:

  1. cat /tmp/Example1
Output
cat: /tmp/Example1: No such file or directory

Isso pode fazer parecer que os dados desapareceram, mas esse não é o caso. Vamos sair do segundo contêiner agora para ver que ele e nosso primeiro contêiner com o arquivo que criamos, estão ambos no sistema.

  1. exit

Quando listamos os contêineres novamente, ambos aparecem:

  1. docker ps -a
Output
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6e4341887b69 ubuntu "/bin/bash" About a minute ago Exited (1) 6 seconds ago kickass_borg 11cc47339ee1 ubuntu "/bin/bash" 13 minutes ago Exited (127) 6 minutes ago small_sinoussi

Passo 2: Reiniciando o Primeiro Contêiner

Para reiniciar um contêiner existente, usaremos o comando start com a flag -a para anexar a ele e a flag -i para torná-lo interativo, seguido pelo ID ou nome do contêiner. Certifique-se de substituir o ID do seu contêiner no comando abaixo:

  1. docker start -ai 11cc47339ee1

Nos encontramos novamente no prompt bash do contêiner e quando executamos cat no arquivo que criamos anteriormente, ele ainda está lá.

  1. cat /tmp/Example1.txt
Output
Example1

Agora podemos sair do contêiner:

  1. exit

Esta saída mostra que as alterações feitas dentro do contêiner persistem ao pará-lo e reiniciá-lo. Apenas quando o contêiner é removido é que o conteúdo é excluído. Este exemplo também ilustra que as alterações foram limitadas ao contêiner individual. Quando iniciamos um segundo contêiner, ele refletiu o estado original da imagem.

Passo 3: Excluindo Ambos os Contêineres

Criamos dois contêineres e concluiremos nosso breve tutorial excluindo-os. O comando docker rm, que funciona apenas em contêineres parados, permite que você especifique o nome ou o ID de um ou mais contêineres, então podemos excluí-los ambos com o seguinte:

  1. docker rm 11cc47339ee1 kickass_borg
Output
11cc47339ee1 kickass_borg

Ambos os contêineres e quaisquer alterações que fizemos dentro deles agora desapareceram.

Conclusão

Nós examinamos detalhadamente o comando docker run para ver como ele cria automaticamente um novo contêiner cada vez que é executado. Também vimos como localizar um contêiner parado, iniciá-lo e conectar-se a ele. Se você deseja aprender mais sobre o gerenciamento de contêineres, pode estar interessado no guia, Nomeando Contêineres Docker: 3 Dicas para Iniciantes.

Source:
https://www.digitalocean.com/community/tutorials/working-with-docker-containers