Como extrair imagens do Docker Hub armazenadas em cache

O Container Registry armazena em cache as imagens públicas do Docker Hub acessadas com frequência em mirror.gcr.io. Você pode configurar o daemon do Docker para usar uma imagem pública armazenada em cache, se houver uma disponível, ou extrair a imagem do Docker Hub se uma cópia em cache não estiver disponível.

Imagens em cache em mirror.gcr.io são:

  • armazenadas em um repositório gerenciado pelo Google;
  • mais protegidas das interrupções do Docker Hub;
  • integradas facilmente ao ecossistema do Google Cloud;
  • Sincronizadas com o Docker Hub. As alterações no Docker Hub serão capturadas pelo Container Registry em até 30 minutos.

Como configurar o daemon do Docker

Para configurar o daemon do Docker para extrair imagens do cache do Container Registry:

CLI

  1. Configure o daemon de uma das seguintes maneiras:

    • Para configurar o daemon do Docker automaticamente na inicialização, defina o seguinte valor em /etc/docker/daemon.json

      {
        "registry-mirrors": ["https://mirror.gcr.io"]
      }
      
    • Ao iniciar o daemon, passe no nome do host do Container Registry:

      dockerd --registry-mirror=https://mirror.gcr.io
      
    • Adicione a linha a seguir ao arquivo /etc/default/docker:

      DOCKER_OPTS="${DOCKER_OPTS} --registry-mirror=https://mirror.gcr.io"
      
  2. Reinicie o daemon do Docker.

    • No Linux, execute um dos seguintes comandos:

      sudo service docker restart
      

      ou

      sudo service docker stop && sudo service docker start
      
    • No macOS ou Windows, execute o seguinte comando:

      docker-machine restart
      

IU do Docker

  1. Abra o menu Preferences do Docker.
  2. Clique em Daemon.
  3. Clique em Advanced. No campo JSON, adicione uma chave registry-mirrors com https://mirror.gcr.io como um valor:

    {
      "registry-mirrors" : [
        "https://mirror.gcr.io"
      ]
    }
    
  4. Clique em Apply & Restart.

Para verificar se o cache está configurado corretamente, execute:

docker system info

A saída deve incluir Registry Mirrors e deve ser semelhante a esta:

Containers: 2
 Running: 0
 Paused: 0
 Stopped: 2
Images: 2
Server Version: 17.03.1-ce
Storage Driver: overlay2
 Backing Filesystem: extfs
 Supports d_type: true
 Native Overlay Diff: true
Logging Driver: json-file
...
Registry Mirrors:
 https://mirror.gcr.io

Como extrair imagens armazenadas em cache

O Container Registry adiciona imagens solicitadas com frequência ao cache para que elas sejam disponibilizadas para solicitações futuras. Ele também remove periodicamente imagens que não são mais solicitadas.

Não há garantia de que uma imagem específica permanecerá em cache por um longo período. Por isso, use apenas o cache configurando o daemon do Docker para verificar se há imagens armazenadas em cache em vez de extrair imagens diretamente de mirror.gcr.io.

Depois de configurar o daemon do Docker para usar o cache do Container Registry, o Docker executará as seguintes etapas quando você extrair uma imagem pública do Docker Hub com um comando docker pull:

  • O daemon do Docker verifica o cache do Container Registry e busca as imagens, se elas existirem. Se a configuração do daemon incluir outros espelhos do Docker, ele verificará cada um deles para uma cópia em cache da imagem.
  • Se a imagem ainda não for encontrada, o daemon do Docker busca a imagem no repositório canônico no Docker Hub.

Como visualizar uma lista de imagens em cache

É possível visualizar a lista de repositórios e a lista de tags e resumos em um repositório específico.

  • Para ver a lista de repositórios que estão no cache do Container Registry, execute o comando:

    gcloud container images list --repository=mirror.gcr.io
    

    Esse comando imprime a lista de repositórios que estão diretamente abaixo de mirror.gcr.io. Alguns repositórios estão aninhados, por exemplo, mirror.gcr.io/library tem mais repositórios aninhados sob ele.

    É possível visualizar a lista dos repositórios aninhados usando:

    gcloud container images list --repository=REPOSITORY
    

    onde REPOSITORY é um repositório em mirror.gcr.io, por exemplo, mirror.gcr.io/library.

    Esse comando imprime a lista de repositórios que estão diretamente sob o repositório especificado.

  • Para visualizar as tags e os resumos em um desses repositórios, use o comando:

    gcloud container images list-tags mirror.gcr.io/REPOSITORY
    

    em que REPOSITORY é um dos repositórios aninhados em mirror.gcr.io.

A seguir