Pesquisa de site

Trabalhando com contêineres Docker


Introdução

Docker é uma ferramenta popular de conteinerização usada para fornecer aplicativos de software com 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 comportará da mesma maneira, independentemente de onde for implantado, porque seu ambiente de tempo de execução é implacavelmente consistente.

Neste tutorial, forneceremos uma breve visão geral do relacionamento 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 normalmente começam com um sistema de arquivos raiz e adicionam alterações ao sistema de arquivos e seus parâmetros de execução correspondentes em camadas ordenadas 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 o aplicativo. As imagens não possuem estado e não mudam. Em vez disso, eles constituem o ponto de partida para os contêineres Docker.

As imagens ganham vida com o comando docker run, que cria um contêiner adicionando uma camada de leitura e gravação no topo da imagem. Essa combinação de camadas somente leitura encimadas por uma camada de leitura e gravação é conhecida como 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 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 em uma instância de contêiner individual. Quando um contêiner é excluído, todas as alterações são perdidas, a menos que sejam tomadas medidas para preservá-las.

Como trabalhar com contêineres Docker

  1. Crie dois contêineres Docker
  2. Reinicie o primeiro contêiner
  3. Excluir ambos os contêineres

Trabalhando com contêineres

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

Etapa 1: Criando dois contêineres

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

docker run -ti ubuntu

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



Faremos uma alteração ecoando algum texto no diretório /tmp do contêiner e, em seguida, usaremos cat para verificar se ele foi salvo com sucesso.

echo "Example1" > /tmp/Example1.txt
cat /tmp/Example1.txt

Example1

Agora, vamos sair do contêiner.

exit

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

docker ps

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

Se adicionarmos a flag -a, que mostra todos containers, parados ou em execução, então nosso container aparecerá na lista:

docker ps -a

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, bem como a imagem a partir 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 há quanto tempo o contêiner entrou nesse estado (6 segundos atrás). Se o contêiner ainda estivesse em execução, veríamos o status “Ativo”, seguido de quanto tempo ele estava em execução.

Se executarmos novamente o mesmo comando, um contêiner totalmente novo será criado:

docker run -ti ubuntu

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

cat /tmp/Example1

cat: /tmp/Example1: No such file or directory

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

exit

Quando listamos os containers novamente, ambos aparecem:

docker ps -a

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

Etapa 2: reiniciando o primeiro contêiner

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

docker start -ai 11cc47339ee1

Nos encontramos no prompt bash do contêiner mais uma vez e quando cat o arquivo que criamos anteriormente, ele ainda está lá.

cat /tmp/Example1.txt

Example1

Podemos sair do contêiner agora:

exit

Esta saída mostra que as alterações feitas dentro do contêiner persistem ao interrompê-lo e iniciá-lo. Somente 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.

Etapa 3: excluir ambos os contêineres

Criamos dois contêineres e concluiremos nosso breve tutorial excluindo-os. O comando docker rm, que funciona apenas em containers parados, permite especificar o nome ou o ID de um ou mais containers, para que possamos deletar ambos com o seguinte:

docker rm 11cc47339ee1 kickass_borg

11cc47339ee1
kickass_borg

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

Conclusão

Demos uma olhada detalhada no 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 quiser saber mais sobre como gerenciar contêineres, você pode se interessar pelo guia Nomeando contêineres Docker: 3 dicas para iniciantes.

Artigos relacionados: