Backup de conteiners docker

Conteineres estão na moda mas como de praxe primeiro coloca-se o sistema mais crítico da empresa em produção usando uma tecnologia relativamente nova, ou que poucos tenham domínio, depois procura-se saber os percalços e riscos da escolha. Backups costumam estar neste pacote de problemas sendo renegado a última coisa a se pensar quando implanta-se um novo serviço.

Se você se viu dentro deste cenário acima e precisa mitigar os riscos de uma perda em um ambiente docker então este pequeno “snippet” que salva seus conteineres em arquivos “.tar” vai dar uma ajuda.

cd /backups/images
docker ps --format '{{.ID}}\t{{.Names}}' | awk '{
print "Backup do container "$1" ("$2")";
system("date");
system("docker commit -p "$1" backup-"$2);
system("docker save -o backup-"$2".tar backup-"$2);
system("docker rmi backup-"$2) ;
print "";
}';
date;

Como se vê o código é simples fazendo uso apenas de duas ferramentas (docker e awk) não havendo muito o que se explicar.

O comando “docker ps” lista todos os conteineres disponíveis no ambiente, com seus respectivos ID e nomes e que são enviados (um por linha) para o comando Awk.

O Awk, é uma poderosa ferramenta para manipular linhas e então é usado para invocar o comando docker mais algumas vezes com as seguintes atribuições: Criar uma imagem estática (docker ps); Salvar esta imagem em um arquivo .tar (docker save) e; Remover esta imagem novamente para liberar espaço.

O resultado final será que dentro da pasta “images” (definida na primeira linha do código) você terá uma cópia de todos os seus conteineres armazenados em arquivos “.tar”. Ex: backup-reports.tar, backup-web.tar etc que poderão ser transferidos para um novo servidor, storage, fita ou manipulado por sua ferramenta de backups.

E quando você precisar restaurar seu conteiner?

A primeira tarefa será voltar o arquivo “.tar” para o seu servidor docker e isso dependerá de onde e como você gravou o arquivo.

Por exemplo se usou uma ferramenta especifica de backup que rodou o script, então você deverá usá-la para restaurar o arquivo .tar correspondente no seu servidor

Uma vez que o arquivo .tar esteja no servidor você poderá usar o “docker load” para restaurar o seu conteiner e então o “docker run” para subir a nova instância do seu conteiner.

docker load -i /backups/images/backup-reports.tar
docker images
docker run [...] reports

Mudanças e personalizações

A principal modificação no script antes de usá-lo na prática seria o caminho onde as imagens serão salvas, mas se quiser também é possível alterar o nome do arquivo “.tar” criado pelo “docker save”

Por fim, é importante lembrar que isso não é uma solução completa. O que publiquei é apenas um snippet para usar em sua solução de backup.

Por exemplo você poderia colocar este trecho de código em seu script de backups, que é invocado pelo cron, ou ainda usando a opção de “scripts pré-backup” que costuma existir nas principais ferramentas de backup onde você pode executar uma tarefa antes do backup de fato iniciar etc.

Referências

Docker container: Backup and Recovery. https://linuxconfig.org/docker-container-backup-and-recovery (Out, 2016)
Docker Backup – Easy steps to backup and restore your containers. https://bobcares.com/blog/docker-backup/ (Jun, 2015)

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.