Como usar docker container create para preparar contêineres

DockerBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá como usar o comando docker create para preparar contêineres Docker sem iniciá-los imediatamente. Isso permite que você configure contêineres e volumes antes da execução. Você começará criando um contêiner a partir da imagem Ubuntu, verificando seu status de criação e, em seguida, iniciando e anexando-se ao contêiner criado.

Além disso, você explorará como inicializar um volume usando docker create e, subsequentemente, utilizar esse volume inicializado em outro contêiner. Essa experiência prática demonstrará a flexibilidade e o controle oferecidos pelo comando docker create no gerenciamento do ciclo de vida do contêiner e da persistência de dados.

Criar um contêiner sem iniciá-lo

Nesta etapa, você aprenderá como criar um contêiner Docker sem iniciá-lo imediatamente. Isso é útil quando você deseja configurar a configuração ou os volumes do contêiner antes de executá-lo.

Primeiro, vamos baixar a imagem ubuntu do Docker Hub. Essa imagem será usada para criar nosso contêiner.

docker pull ubuntu:latest

Você deve ver uma saída indicando que a imagem está sendo baixada. Após a conclusão do download, você pode verificar se a imagem está disponível localmente listando as imagens.

docker images

Agora, criaremos um contêiner chamado my-ubuntu-container a partir da imagem ubuntu. Usaremos o comando docker create para isso. As flags -it são normalmente usadas para contêineres interativos, mas docker create apenas configura o contêiner, ele não o executa. Nós as incluímos aqui para consistência com a forma como você pode eventualmente executar o contêiner.

docker create -it --name my-ubuntu-container ubuntu:latest

O comando docker create cria uma camada de contêiner gravável sobre a imagem especificada e a prepara para executar o comando especificado. Ele não inicia o contêiner. Você deve ver uma longa sequência de caracteres como saída, que é o ID do contêiner.

Para verificar se o contêiner foi criado, mas não está em execução, você pode listar todos os contêineres, incluindo aqueles que foram parados.

docker ps -a

Na saída, você deve ver um contêiner chamado my-ubuntu-container com o status Created (Criado). Isso confirma que o contêiner foi criado com sucesso, mas ainda não está em execução.

Iniciar o contêiner criado e conectar-se a ele

Na etapa anterior, você criou um contêiner Docker chamado my-ubuntu-container, mas não o iniciou. Nesta etapa, você aprenderá como iniciar este contêiner criado e anexar seu terminal aos seus fluxos de entrada, saída e erro padrão.

Para iniciar o contêiner, use o comando docker start seguido pelo nome do contêiner.

docker start my-ubuntu-container

Este comando inicia o contêiner. No entanto, ele é executado em segundo plano por padrão. Para interagir com o contêiner, você precisa se anexar a ele.

Para se anexar ao contêiner em execução, use o comando docker attach seguido pelo nome do contêiner.

docker attach my-ubuntu-container

Após executar este comando, seu terminal será conectado ao shell do contêiner. Você deve ver um prompt de comando que se parece com o que está dentro do contêiner Ubuntu, normalmente algo como root@<container-id>:/#.

Agora que você está dentro do contêiner, pode executar comandos dentro dele. Por exemplo, vamos verificar a versão do sistema operacional.

lsb_release -a

Você deve ver a saída mostrando a versão do Ubuntu em execução dentro do contêiner.

Para sair do contêiner sem pará-lo, pressione Ctrl + P seguido por Ctrl + Q. Isso desanexa seu terminal do contêiner, deixando o contêiner em execução em segundo plano.

Se você simplesmente digitar exit ou pressionar Ctrl + D enquanto estiver anexado, o contêiner será parado.

Após a desanexação, você pode verificar se o contêiner ainda está em execução listando os contêineres em execução.

docker ps

Você deve ver my-ubuntu-container listado com um status indicando que ele está em execução.

Inicializar um volume usando docker create

Nesta etapa, você aprenderá como inicializar um volume Docker usando o comando docker create. Este método permite que você crie um contêiner especificamente para preencher um volume com dados iniciais da imagem do contêiner.

Primeiro, vamos criar um novo contêiner chamado volume-initializer a partir da imagem ubuntu. Este contêiner será usado temporariamente para inicializar o volume. Usaremos a flag -v para especificar o volume que queremos inicializar e seu ponto de montagem dentro do contêiner. Vamos nomear o volume my-initialized-volume e montá-lo em /app_data dentro do contêiner.

docker create -v my-initialized-volume:/app_data --name volume-initializer ubuntu:latest

Este comando cria o contêiner e o volume, se ele ainda não existir. A parte -v my-initialized-volume:/app_data diz ao Docker para criar um volume chamado my-initialized-volume e montá-lo no diretório /app_data dentro do contêiner.

Agora, vamos iniciar este contêiner. Quando um contêiner com um volume é iniciado pela primeira vez, se o volume estiver vazio, o Docker copia o conteúdo do diretório especificado pelo ponto de montagem da imagem para o volume.

docker start volume-initializer

Como este contêiner é apenas para inicialização e não possui um processo de longa duração, ele provavelmente iniciará e, em seguida, parará imediatamente.

Você pode verificar se o contêiner parou listando todos os contêineres.

docker ps -a

Você deve ver volume-initializer com o status Exited (Saiu).

Para confirmar que o volume my-initialized-volume foi criado, você pode listar todos os volumes Docker.

docker volume ls

Você deve ver my-initialized-volume na lista de volumes.

Neste ponto, o volume my-initialized-volume contém os dados iniciais que estavam presentes no diretório /app_data da imagem ubuntu:latest.

Usar um volume inicializado por docker create em outro contêiner

Na etapa anterior, você inicializou um volume Docker chamado my-initialized-volume criando e iniciando um contêiner temporário. Agora, você aprenderá como usar este volume inicializado em um contêiner diferente. Isso demonstra como os volumes podem persistir dados e ser compartilhados entre contêineres.

Primeiro, vamos criar um novo contêiner chamado data-consumer a partir da imagem ubuntu. Desta vez, executaremos diretamente o contêiner e montaremos o my-initialized-volume existente no diretório /data dentro deste novo contêiner.

docker run -it --name data-consumer -v my-initialized-volume:/data ubuntu:latest /bin/bash

Vamos detalhar este comando:

  • docker run: Este comando cria e inicia um novo contêiner.
  • -it: Estas flags alocam um pseudo-TTY e mantêm stdin aberto, permitindo o uso interativo.
  • --name data-consumer: Isso atribui o nome data-consumer ao novo contêiner.
  • -v my-initialized-volume:/data: Esta é a parte crucial. Ela monta o volume existente chamado my-initialized-volume no diretório /data dentro do contêiner data-consumer.
  • ubuntu:latest: Isso especifica a imagem a ser usada para o contêiner.
  • /bin/bash: Este é o comando a ser executado dentro do contêiner, que inicia um shell bash.

Após executar este comando, você será anexado ao shell bash dentro do contêiner data-consumer.

Agora que você está dentro do contêiner data-consumer, navegue até o diretório /data, que é onde o my-initialized-volume está montado.

cd /data

Você pode então listar o conteúdo deste diretório para ver os dados que foram inicializados na etapa anterior. O conteúdo exato dependerá do que estava no diretório /app_data da imagem ubuntu:latest quando o volume foi inicializado.

ls -l

Você deve ver arquivos e diretórios que foram copiados do diretório /app_data da imagem Ubuntu para o my-initialized-volume. Isso confirma que o volume foi inicializado com sucesso e agora está sendo usado por este novo contêiner.

Para sair do contêiner data-consumer, basta digitar exit.

exit

Isso irá parar o contêiner data-consumer e retorná-lo ao terminal da sua máquina host.

Você pode verificar se o contêiner data-consumer saiu listando todos os contêineres.

docker ps -a

Você deve ver data-consumer com o status Exited (Saiu). O my-initialized-volume ainda existe e retém os dados.

Resumo

Neste laboratório, você aprendeu como usar o comando docker create para preparar um contêiner Docker sem iniciá-lo imediatamente. Isso envolveu o pull (puxar) de uma imagem, a criação de um contêiner a partir dessa imagem usando docker create e a verificação de seu status "Created" (Criado). Em seguida, você aprendeu como iniciar o contêiner criado e se conectar a ele, demonstrando a separação entre a criação e a execução do contêiner.

Além disso, o laboratório abordou a inicialização de um volume Docker usando docker create e, subsequentemente, a utilização desse volume inicializado em outro contêiner. Isso ilustrou como o docker create pode ser usado para configurar componentes de infraestrutura, como volumes, antes que eles sejam montados e usados por contêineres em execução.