Como usar o comando docker compose pull para atualizar imagens de serviço

DockerBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá como usar o comando docker compose pull para atualizar as imagens de serviço definidas em um arquivo compose.yaml. Começaremos preparando um arquivo compose.yaml com serviços que utilizam imagens Docker.

Após a configuração, você explorará várias maneiras de usar o comando docker compose pull, incluindo a busca (pull) de uma imagem de serviço específica, a busca de todas as imagens de serviço, a busca de imagens ignorando serviços que podem ser construídos (buildable services) e a busca de imagens silenciosamente, sem exibir informações de progresso. Essa experiência prática o equipará com as habilidades para gerenciar e atualizar eficientemente as imagens de serviço do seu Docker Compose.

Prepare um arquivo compose.yaml com serviços usando imagens

Nesta etapa, prepararemos um arquivo compose.yaml que define serviços usando imagens Docker. Docker Compose é uma ferramenta que permite definir e gerenciar aplicações Docker com múltiplos contêineres. Embora o Docker já esteja instalado na VM do LabEx, o Docker Compose não está. Vamos instalar o Docker Compose primeiro.

Primeiro, vamos instalar o Docker Compose. Faremos o download do binário do Docker Compose e o tornaremos executável.

sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

Agora que o Docker Compose está instalado, vamos verificar a instalação checando a versão.

docker-compose --version

Você deve ver uma saída semelhante a Docker Compose version v2.20.2.

Em seguida, criaremos um diretório para nosso projeto e navegaremos até ele.

mkdir ~/project/my-compose-app
cd ~/project/my-compose-app

Agora, criaremos um arquivo compose.yaml neste diretório. Este arquivo definirá dois serviços: um serviço web usando a imagem nginx e um serviço de banco de dados usando a imagem redis.

nano compose.yaml

Cole o seguinte conteúdo no arquivo compose.yaml:

services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
  db:
    image: redis:latest

Salve o arquivo e saia do editor nano (Pressione Ctrl + X, depois Y, depois Enter).

Este arquivo compose.yaml define dois serviços:

  • web: Usa a imagem Docker nginx:latest e mapeia a porta 80 no host para a porta 80 no contêiner.
  • db: Usa a imagem Docker redis:latest.

Nas etapas seguintes, usaremos este arquivo compose.yaml para buscar (pull) as imagens de serviço definidas.

Buscar (pull) uma imagem de serviço específica usando docker compose pull

Nesta etapa, aprenderemos como buscar (pull) uma imagem de serviço específica definida em nosso arquivo compose.yaml usando o comando docker compose pull. Isso é útil quando você só precisa atualizar ou baixar a imagem para um único serviço sem afetar os outros.

Primeiro, certifique-se de estar no diretório ~/project/my-compose-app onde você criou o arquivo compose.yaml na etapa anterior.

cd ~/project/my-compose-app

Agora, vamos buscar (pull) a imagem para o serviço web. O comando para fazer isso é docker compose pull <nome_do_serviço>. Em nosso caso, o nome do serviço é web.

docker compose pull web

Você verá uma saída indicando que o Docker Compose está buscando (pulling) a imagem nginx:latest. Este processo baixa as camadas da imagem do registro Docker.

Após a conclusão do comando, você pode verificar se a imagem nginx foi buscada (pulled) listando as imagens Docker disponíveis.

docker images

Você deve ver nginx listado na saída, juntamente com sua tag (latest), ID da imagem, data de criação e tamanho.

Isso demonstra como buscar (pull) seletivamente uma imagem para um serviço específico definido em seu arquivo compose.yaml. Na próxima etapa, buscaremos (pull) imagens para todos os serviços.

Buscar (pull) todas as imagens de serviço definidas no arquivo compose.yaml

Nesta etapa, aprenderemos como buscar (pull) imagens para todos os serviços definidos em nosso arquivo compose.yaml usando o comando docker compose pull sem especificar nenhum nome de serviço. Este é o comportamento padrão de docker compose pull quando nenhum nome de serviço é fornecido.

Primeiro, certifique-se de estar no diretório ~/project/my-compose-app.

cd ~/project/my-compose-app

Agora, execute o comando docker compose pull sem nenhum argumento.

docker compose pull

Este comando lerá o arquivo compose.yaml e buscará (pull) as imagens para todos os serviços definidos nele. Como já buscamos (pulled) a imagem nginx na etapa anterior, o Docker Compose verificará se a imagem está atualizada. Em seguida, ele prosseguirá para buscar (pull) a imagem redis:latest, pois ela ainda não foi buscada (pulled).

Você verá uma saída indicando o processo de busca (pull) para a imagem redis.

Após a conclusão do comando, você pode verificar se as imagens nginx e redis foram buscadas (pulled) listando as imagens Docker disponíveis.

docker images

Você deve agora ver nginx e redis listados na saída.

Isso demonstra como buscar (pull) facilmente todas as imagens necessárias para sua aplicação multi-contêiner com um único comando.

Buscar (pull) imagens de serviço ignorando serviços construíveis

Nesta etapa, exploraremos como usar a flag --ignore-buildable com docker compose pull. Essa flag é útil quando seu arquivo compose.yaml inclui serviços que são construídos a partir de um Dockerfile (serviços construíveis), além de serviços que usam imagens pré-construídas. A flag --ignore-buildable informa ao Docker Compose para buscar (pull) apenas imagens para serviços que especificam uma chave image e para ignorar serviços que especificam uma chave build.

Primeiro, vamos modificar nosso arquivo compose.yaml para incluir um serviço construível. Adicionaremos um serviço simples que constrói uma imagem básica.

Certifique-se de estar no diretório ~/project/my-compose-app.

cd ~/project/my-compose-app

Agora, crie um Dockerfile simples para nosso serviço construível.

nano Dockerfile

Cole o seguinte conteúdo no Dockerfile:

FROM alpine:latest
CMD ["echo", "Hello from buildable service!"]

Salve o arquivo e saia do editor nano.

Em seguida, modifique o arquivo compose.yaml para incluir um novo serviço que usa este Dockerfile.

nano compose.yaml

Adicione a seguinte definição de serviço ao seu arquivo compose.yaml, abaixo do serviço db:

builder:
  build: .

Seu arquivo compose.yaml completo agora deve ser semelhante a este:

services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
  db:
    image: redis:latest
  builder:
    build: .

Salve o arquivo e saia do editor nano.

Agora, vamos tentar buscar (pull) imagens usando docker compose pull --ignore-buildable.

docker compose pull --ignore-buildable

Você observará que o Docker Compose verifica os serviços web e db e busca (pull) suas imagens, se necessário (elas já devem ter sido buscadas (pulled) nas etapas anteriores). No entanto, ele ignorará o serviço builder porque ele usa a chave build em vez da chave image. Você não verá nenhuma saída relacionada à construção ou busca (pull) de uma imagem para o serviço builder.

Para confirmar que nenhuma imagem foi construída ou buscada (pulled) para o serviço builder, você pode listar suas imagens Docker.

docker images

Você ainda deve ver apenas as imagens nginx e redis listadas. Não haverá uma nova imagem criada a partir do Dockerfile por este comando.

Isso demonstra como a flag --ignore-buildable permite que você busque (pull) seletivamente apenas imagens pré-construídas, o que pode ser útil em vários cenários de desenvolvimento e implantação.

Buscar (pull) imagens de serviço silenciosamente, sem informações de progresso

Nesta etapa, aprenderemos como buscar (pull) imagens de serviço sem exibir as informações detalhadas de progresso usando a flag --quiet ou -q com docker compose pull. Isso é útil quando você deseja reduzir a quantidade de saída no seu terminal, por exemplo, em scripts ou fluxos de trabalho automatizados.

Primeiro, certifique-se de estar no diretório ~/project/my-compose-app.

cd ~/project/my-compose-app

Agora, vamos usar o comando docker compose pull --quiet para buscar (pull) as imagens. Como as imagens para web e db provavelmente já estão presentes das etapas anteriores, o Docker Compose verificará se elas estão atualizadas. Se estiverem, o comando será concluído rapidamente com saída mínima. Se uma imagem precisasse ser buscada (pulled), você não veria as barras de progresso e as informações de camada usuais.

docker compose pull --quiet

Você notará que a saída é significativamente menos verbosa em comparação com a execução de docker compose pull sem a flag --quiet. Você pode ver mensagens indicando que as imagens já estão atualizadas, mas não verá o progresso detalhado do download para cada camada.

Para demonstrar o efeito de forma mais clara, vamos primeiro remover uma das imagens e, em seguida, buscá-la (pull) silenciosamente. Removeremos a imagem redis.

docker rmi redis:latest

Agora, busque (pull) as imagens novamente usando a flag --quiet.

docker compose pull --quiet

Desta vez, a imagem redis será buscada (pulled), mas você não verá o progresso detalhado. A saída será mínima, confirmando que a operação de busca (pull) está acontecendo sem o feedback visual usual.

Você pode verificar se a imagem redis foi buscada (pulled) novamente listando as imagens Docker.

docker images

Você deve ver nginx e redis listados.

A flag --quiet é uma maneira simples, mas eficaz, de controlar a verbosidade do comando docker compose pull, tornando-o adequado para ambientes onde a saída detalhada não é desejada.

Resumo

Neste laboratório, aprendemos como usar o comando docker compose pull para atualizar as imagens de serviço. Começamos preparando um arquivo compose.yaml definindo serviços com imagens Docker específicas, incluindo a instalação do próprio Docker Compose.

Posteriormente, exploramos a busca (pull) de imagens para serviços individuais, a busca (pull) de todos os serviços definidos no arquivo e a utilização de opções para ignorar serviços construíveis e suprimir a saída de progresso para um processo de busca (pull) mais silencioso.