Transferir imagens da janela de encaixe por uma conexão não confiável

1

Estou mantendo vários servidores que estão localizados em locais remotos muito mal conectados em todo o mundo. Esses servidores executam vários contêineres docker, alguns dos quais baseados em imagens razoavelmente grandes (temos um esforço contínuo em andamento para reduzir isso, mas isso é mais a longo prazo).

Esses servidores só podem ser acessados por meio de túneis ssh reversos e as conexões de rede são interrompidas com muita frequência. A largura de banda é geralmente bastante baixa (às vezes apenas ~ 50kbps ou até menos).

AFAIK, tenho duas opções para transferir imagens, cada uma com alguns problemas.

Usando um repositório do docker e um docker pull:

  1. Não lida bem com interrupções de rede, todo o download é reiniciado do zero.
  2. Não faz o download novamente de camadas já baixadas, reduzindo o tempo e a largura de banda usados para fazer o download de versões mais recentes, apenas com alterações nas camadas superiores.

Usando o docker save, o rsync e o docker load:

  1. O Rsync permite continuar com um download parcial, podemos iniciar um download e tentar novamente até finalizar.
  2. Só é possível salvar e transferir toda a imagem, incluindo todas as camadas. Portanto, temos que baixar a imagem completa, mesmo que apenas um par de kB na camada superior tenha mudado em comparação com a versão anterior.

Então, minha pergunta, existe alguma outra maneira de transferir essas imagens, que combina os benefícios de ambas as abordagens? Então, o que pode retomar um download interrompido, mas não requer o download de imagens completas toda vez?

    
por Ramses 05.09.2018 / 15:12

1 resposta

0

Algumas ideias vêm à mente

  1. Se você criar imagens de maneira inteligente, poderá combinar as duas técnicas e usar o rsync para a carga inicial e o docker pull para atualizações subseqüentes (já que só será possível extrair camadas alteradas neste momento)

  2. Você pode marcar mais camadas. Em vez de ter uma imagem do Docker com 10 camadas, você tem 5 imagens do Docker com duas camadas. Você pode dividir em vários Dockerfiles ou camadas de tags após o fato ("tag docker layerHash tagName" para obter detalhes link )

  3. Não positivo neste, mas você deve conseguir exportar camadas únicas em vez de imagens inteiras, especificando o hash da camada. A única diferença entre camadas e "imagens" são imagens que possuem tags legíveis por humanos atribuídas à camada

  4. Descompacte a imagem exportada, transfira somente novas camadas e refaça o tar, combinando novas camadas com camadas armazenadas em cache (quando você exporta uma imagem, é apenas um tar com 1 tar por camada)

  5. Não use o Docker para construção - apenas monte e execute. Com este, você simplesmente transferiria um rootfs (possivelmente como arquivos regulares e deixaria o rsync manipular a compressão), então tará-los e fazer um Dockerfile simples que só faz ADD rootfs.tar / e tem seu comando de execução. Isso garante que nada seja copiado mais do que o necessário

Você também pode combinar essas abordagens com algo como o Bittorrent para distribuir os arquivos

    
por 12.09.2018 / 01:50