Home > Backup de dados corporativos > Ferramentas de Backup de Dados Corporativos > Docker Container Backup e Restauração

Backup e Restauração para Docker com Volumes

O primeiro backup para volumes do Docker totalmente integrado e automatizado.

A Bacula Enterprise é a primeira solução de backup e recuperação de nível corporativo do mundo a oferecer backup avançado e automatizado de containers Docker. Seu módulo de backup Docker leva a facilidade de uso dos containers a outro nível. Essa tecnologia líder no mundo agora foi mais atualizada para incluir também o backup e recuperação de volumes do Docker.

Esse módulo é integrado através da API oficial do Docker e possibilita que os usuários façam backups, de maneira rápida e fácil, de múltiplos containers Docker sem ter que instalar um agente dentro de cada containers . Esse backup externo automatizado de volumes do Docker é parte da funcionalidade do Bacula de integração total da orquestração de containers. Ele está disponível na maioria dos níveis de assinatura do Bacula Enterprise sem custo adicional por um período de tempo limitado.

Quer seu ambiente de containers seja usado para migração lift-and-shift de aplicações monolíticas, ou para refatorar aplicações legadas, ou então para construir novas aplicações distribuídas, os desenvolvedores e administradores de sistemas podem usar a tecnologia avançada do Bacula com um nível especialmente alto de flexibilidade através de uma GUI ou da interface de linha de comando. Lembre-se, esse alto nível de flexibilidade e possibilidades de personalização são fundamentais para a abordagem do Bacula: equipar o usuário fornecendo uma ampla gama de opções para que ele atinja seus objetivos.

Recursos do Módulo de Backup Para Container Docker

  • Backup e recuperação da configuração, volumes e imagens do container Docker
  • Solução totalmente integrada, aderindo à filosofia e metodologia Docker
  • Automatização completa para a rápida implementação de estratégias de proteção de containers
  • Integração totalmente efetiva, usando a API oficial do Docker
  • Auxilia na preparação de novas imagens do Docker
  • Salvamento e rollback de imagens, além de backup de mudanças de imagem
  • Controle granular sobre de quais containers e imagens deve ser feito backup
  • Backup controlado de imagens definidas e específicas do Docker

Por que o Módulo de Backup para Docker do Bacula é único?

O software Bacula Enterprise foi projetado para permitir que as empresas possam implementar essa solução de backup para Docker em todos os seus ambientes físicos, virtuais, em nuvem e híbridos, independentemente da arquitetura, tudo a partir de uma única plataforma.

O backup e recuperação efetivos do Docker é extremamente importante porque, quando a vida de um container acaba, ainda pode haver dados que são necessários. Entretanto, devido à natureza desafiadora dos ambientes Docker, outras soluções de backup não conseguem, até hoje, fazer backups simples e eficientes dos containers Docker. E em quase todos os casos, elas não conseguem fazer isso de forma nenhuma. O Bacula é a única solução que fornece um backup totalmente automatizado do Docker e de seus volumes de dados.

docker backup architecture

Uso Seguro e Eficiente dos Containers Docker

O Bacula Enterprise torna o uso do Docker mais confiável e conveniente. É até possível fazer backup apenas de imagens definidas pelo Docker, que podem ser usadas para criar novos containers quando necessário. Nossa solução automatizada e escalável foi feita para suportar as cargas de trabalho tanto de TI como de DevOps que usam Docker, SUSE, Caas ou Openshift.

Os administradores de sistema e gerentes de DevOps se beneficiam do alto nível de controle e flexibilidade do gerenciamento disponível via GUI ou interface web do Bacula Enterprise ao realizar backups do Docker, incluindo seus volumes de dados.

 

Download do julgamento WHITE PAPER DO BACKUP PARA DOCKER

Cuidado Com as Promessas de Outros Fornecedores

Alguns fornecedores de backup e recuperação estão dizendo que conseguem fazer backup do Docker, incluindo seus volumes. Porém, os serviços deles são extremamente limitados e simplesmente adicionam um container a uma aplicação conteinerizada, e usam isso para fazer backup dos dados específicos e necessários. Com essas soluções, não existe um processo de restauração simples e independente da aplicação disponível. Então, como fazer o backup do Docker nesse caso? Bem, o administrador precisará contar com uma configuração manual cuidadosa e também entender a relação das entidades de armazenamento persistentes, a que aplicação elas pertencem, que containers as usam, e assim por diante. Resumindo, trata-se de um trabalho imenso e não uma solução rápida e eficaz.

Somente o Bacula oferece uma solução de backup e restauração totalmente integrada, automatizada e extremamente rápida para Docker. Com o avançado módulo de backup e recuperação para Docker do Bacula, as equipes de backup não precisam ter conhecimento sobre os containers, aplicações ou tarefas de armazenamento internos. Em vez disso, os ambientes Docker agora se tornam mais eficientes através da automação e, o mais importante, economizam dados valiosos gerados a partir de um ou vários containers.

Operações de Backup e Restauração para Docker

Backup do Docker

O backup de um container Docker individual consiste nos seguintes passos simples:

  1. Salvar o estado atual do container para a nova imagem (container commit – snapshot).
  2. Executar o utilitário do Docker e salvar os dados.
  3. Remover o snapshot guardado para liberar recursos não necessários.

O backup das imagens de um sistema Docker não cria um snapshot, já que cada imagem de sistema é um modelo somente de leitura usado para a criação de containers. Os backups podem ser feitos para containers em qualquer estado (criados, em execução ou parados). O Módulo de Backup para Docker informará você sobre o início e a finalização de cada backup de container ou imagem:


JobId 127: docker: Start Backup docker Container: myubuntu (4d0a4fadb50d)
JobId 127: dkcommctx: Commit created: myubuntu/4d0a4fadb50d/127:backup
JobId 127: dkcommctx: Commit removed: myubuntu/4d0a4fadb50d/127:backup
JobId 127: docker: Backup of docker Container: myubuntu (4d0a4fadb50d) OK.

O Módulo de Backup para Docker criará um único arquivo (.tar) para qualquer container ou imagem Docker que seja salva. Dentro do Bacula, eles são representados da seguinte maneira.

  • /@docker/container//.tar para backup de containers
  • /@docker/image//.tar para backup de imagens

Serão criados múltiplos arquivos durante um backup se vários containers ou imagens do Docker forem selecionados para backup em uma única tarefa. Os nomes distintos dos arquivos, como mostrado acima, permitem localizar o arquivo de imagem do sistema ou container adequado para restauração.
Para listar os containers ou imagens de sistema disponíveis, é disponibilizado um modo de listagem, descrito no capítulo 6.1 na página 12.

Restauração do Docker 

O Módulo de Backup para Docker fornece dois locais alvo para as operações de restauração:

  • Restauração para o serviço Docker;
  • Restauração para um diretório local na forma de arquivo.

Restauração para o Serviço Docker

Para usar esse método de restauração, são usados os parâmetros where= ou where=/ de um comando restore do Bacula.

O arquivo do container Docker será enviado ao serviço Docker, restaurado como uma nova imagem e depois criado como container se o parâmetro container_create for definido (que é o padrão). Caso não seja, então qualquer container será restaurado apenas a nível de imagem e o usuário terá que criar ou operar o container manualmente. Se o parâmetro container_run for definido (o padrão é “no“), então o container restaurado será iniciado imediatamente após a restauração bem-sucedida.

O arquivo de imagem do Docker será carregado no serviço Docker como a imagem original, substituindo a existente. Esse é o comportamento padrão e pode ser mudado definindo a opção “Replace” do comando restore, conforme desejado. Você pode pular a restauração da imagem já existente com a opção Replace do comando restore.

O nome padrão do container, ou o rótulo da imagem do container, pode ser mudado durante uma restauração com os parâmetros container_defaultnames ou container_imageid (veja o tópico 4.2 na página 8).

Restauração para o Diretório Local

Para usar esse modo, o parâmetro where=/some/path deve ser definido para “full path” no servidor onde o Módulo Docker está instalado. Se o caminho não existir, ele será criado pelo Módulo Docker do Bacula.

Instalação do Módulo de Backup para Docker

O agente Bacula e seu módulo de backup para Docker precisam ser instalados no host para o serviço Docker. O Docker pode ser instalado em diferentes sistemas operacionais e distribuições, portanto o File Daemon do Bacula Enterprise para o sistema operacional e plataforma específicos precisa ser usado.

Configuração do Módulo de Backup para Docker

O módulo é configurado usando parâmetros definidos em uma seção FileSets Include da configuração do Director do Bacula Enterprise.

Parâmetros de Estimativa e Backup do Módulo Docker

Esses parâmetros opcionais são relevantes apenas para tarefas de Backup e Estimativa:

  • Especificar um container Docker para backup.
    Múltiplos parâmetros container=<. . > são permitidos. Se um container com <name-label> não puder ser encontrado, então um único erro de tarefa será gerado e o backup prosseguirá para o próximo container, a menos que o abort_on_error seja definido, o que fará com que toda a tarefa de backup seja abortada. Nomes (<name-label>) ou ids (<id>) podem ser usados para selecionar containers para backup.
  • Especificar uma imagem do Docker para backup.
    Múltiplos parâmetros image=< . . . > são permitidos. Se uma imagem com <repository:tag> não puder ser encontrada, um único erro de tarefa será gerado e o backup será feito para a imagem seguinte, a menos que o abort_on_error seja definido, o que fará com que toda a tarefa de backup seja abortada. Tags de repositório (<repository:tag>) ou ids (<id>) podem ser usados para selecionar a imagem necessária para o backup. Esse parâmetro é opcional.
  • Especificar a lista de nomes de containers Docker para backup usando a sintaxe de expressão regular.
    Todos os containers com nomes que correspondam à expressão regular fornecida serão selecionados para backup. Múltiplos parâmetros include_container=<. . > podem ser fornecidos. Se nenhum container corresponder à expressão fornecida, o backup prosseguirá para o próximo parâmetro ou terminará com sucesso sem fazer o backup de nenhum container. O parâmetro abort_on_error não encerrará a tarefa quando nenhum container for encontrado usando a expressão do nome.
  • Especificar uma lista de nomes de repositório de imagens Docker para fazer backup usando a sintaxe de expressão regular.
    Todas as imagens com o nome de repositório que correspondam à expressão regular fornecida serão selecionadas para backup. Múltiplos parâmetros include_images=<. . > podem ser fornecidos. Se nenhuma imagem corresponder à expressão fornecida, o backup prosseguirá para o parâmetro seguinte ou terminará com sucesso sem fazer o backup de nenhuma imagem. O parâmetro abort_on_error não encerrará a tarefa quando nenhuma imagem for encontrada usando o nome do repositório correspondente.
  • Especificar uma lista de nomes de containers Docker que serão excluídos do backup usando correspondência por expressão regular.
    Todos os containers com nomes que correspondam à expressão regular fornecida, e selecionados para backup usando parâmetro include_container=<. .> serão excluídos. Esse parâmetro não afeta nenhum container selecionado para fazer o backup usando o parâmetro container=<. …>. Múltiplos parâmetros exclude_container=<. .> podem ser fornecidos.
  • Especificar uma lista de nomes de repositórios de imagens Docker que serão excluídos do backup usando correspondência por expressão regular.
    Todas as imagens com os nomes de repositório que correspondam à expressão regular fornecida, e selecionadas para backup usando o parâmetro include_image=<. .> serão excluídas. Esse parâmetro não afeta nenhuma imagem selecionada para backup usando o parâmetro image=<. …>. Múltiplos parâmetros exclude_image=<. .> podem ser fornecidos.

Parâmetros de Restauração do Módulo de Backup para Docker

Durante uma restauração, o módulo de backup para Docker usará os mesmos parâmetros opcionais que foram definidos para a tarefa de backup e que foram salvos no catálogo. Alguns deles podem ser modificados durante o processo de restauração, se necessário.

container_create: <yes|no> especifica se a restauração do Docker deve criar um container automaticamente. A opção padrão é criar containers durante a restauração. Se os containers precisam ser restaurados como imagens, esse parâmetro deve ser ajustado para no.

container_run: <yes|no> especifica se a restauração do Docker deve criar e executar automaticamente os containers restaurados. A opção padrão é não executar automaticamente os containers restaurados. Se os containers precisam ser executados imediatamente após serem restaurados, esse parâmetro deve ser ajustado para yes.

Se esse parâmetro for definido como yes, então o parâmetro container_create será ignorado

container_imageid: <yes|no> especifica se o Módulo Docker deve usar os valores de id da imagem para criar ou executar containers restaurados. O padrão é usar o repositório de imagens e os valores de id para esse fim. Esse parâmetro será ignorado quando ambos container_create e container_run forem definidos para no, já que nenhuma operação de criação ou execução de containers será realizada.

container_defaultnames: <yes|no> especifica se o Módulo Docker deve configurar os nomes dos containers com base no nome original e nos valores de JobId (id de tarefa), que é o padrão. Se esse parâmetro for ajustado para yes, o serviço Docker ajustará os nomes padrão para os containers criados ou em execução.

Exemplos de FileSet do Backup para Docker

No exemplo abaixo, será feito backup de todos os containers e imagens do Docker.


FileSet {
Name = FS_DockerAll
Include {
Plugin = “docker:”
}
}

Neste exemplo, será feito backup de um único container Docker com o nome de “mcache1”.


FileSet {
Name = FS_Docker_mcache1
Include {
Plugin = “docker: container=mcache1”
}
}

O mesmo exemplo do anterior, mas usando o id do container:


FileSet {
Name = FS_Docker_mcache1
Include {
Plugin = “docker: container=cd77eb89e59a”
}
}

No exemplo a seguir, será feito backup de todos os containers Docker que contêm “ngnix” em seus nomes.


FileSet {
Name = FS_Docker_nginixAll
Include {
Plugin = “docker: include_container=ngnix”
}
}

Neste último exemplo, será feito backup de todos os containers Docker, exceto aqueles cujos nomes começam com “test”.


FileSet {
Name = FS_Docker_AllbutTest
Include {
Plugin = “docker: include_container=.* exclude_container=^test”
}
}

Cenários de Restauração do Docker

Restaurar para um serviço Docker

Para restaurar um container ou imagem para um serviço Docker, o administrador deve executar o comando restore e especificar o parâmetro where como neste exemplo:


* restore where=/

e depois definir quaisquer outros parâmetros necessários para a restauração. No exemplo a seguir, a opção container_run foi definida para “Yes”:


* restore where=/

Run Restore job
JobName: RestoreFiles
Bootstrap: /opt/bacula/working/docker-test-dir.restore.1.bsr
Where: /
Replace: Always
FileSet: Full Set
Backup Client: docker-test-fd
Restore Client: docker-test-fd
Storage: File1
When: 2018-09-28 14:09:30
Catalog: MyCatalog
Priority: 10
Plugin Options: *None*
OK to run? (yes/mod/no): mod
Parameters to modify:
1: Level
2: Storage
3: Job
4: FileSet
5: Restore Client
6: When
7: Priority
8: Bootstrap
9: Where
10: File Relocation
11: Replace
12: JobId
13: Plugin Options
Select parameter to modify (1-13): 13
Automatically selected : docker: container=mcache1 abort_on_error
Plugin Restore Options
container_create: *None* (*Yes*)
container_run: *None* (*No*)
container_imageid: *None* (*No*)
container_defaultnames: *None* (*No*)
Use above plugin configuration? (yes/mod/no): mod
You have the following choices:
1: container_create (Create container on restore)
2: container_run (Run container on restore)
3: container_imageid (Use Image Id for container creation/start)
4: container_defaultnames (Use default docker Names on container creation)
Select parameter to modify (1-4): 2
Please enter a value for container_run: yes
Plugin Restore Options
container_create: *None* (*Yes*)
container_run: yes (*No*)
container_imageid: *None* (*No*)
container_defaultnames: *None* (*No*)
Use above plugin configuration? (yes/mod/no): yes

O log da tarefa de restauração indicará qual container está restaurado e qual novo id foi criado:


JobId 139: Start Restore Job RestoreFiles.2018-09-28_14.13.31_03
JobId 139: Using Device “FileChgr1-Dev1” to read.
JobId 139: Ready to read from volume “vol001” on File device “FileChgr1-Dev1” (/opt/bacula/archive).
JobId 139: Forward spacing Volume “vol001” to addr=225
JobId 139: docker: docker Container restore: mcache1/b97d4dd88063
JobId 139: End of Volume “vol001” at addr=62177197 on device “FileChgr1-Dev1” (/opt/bacula/archive).
JobId 139: dkcommctx: Successfully run container as: ef48c6b5b867

O novo container criado durante a restauração terá um novo id. Isso pode ser verificado por meio de um comando, por exemplo:


# docker ps -a
CONTAINER ID IMAGE CREATED STATUS
ef48c6b5b867 mcache1/b97d4dd88063/139:restore 4 minutes ago Up 4 minutes

Restauração para um Diretório Local

É possível restaurar as imagens do container e os dados das imagens do modelo Docker para um arquivo sem carregá-los para o serviço Docker. Para fazer isso, a opção de restauração where deve apontar para o diretório local:


* restore where=/tmp/bacula/restores

Verifique o seguinte exemplo para a mensagem “Docker local restore”:


JobId 141: Start Restore Job RestoreFiles.2018-09-28_14.26.34_03
JobId 141: Using Device “FileChgr1-Dev1” to read.
JobId 141: Ready to read from volume “vol001” on File device “FileChgr1-Dev1” (/opt/bacula/archive).
JobId 141: docker: docker local restore: container/mcache1/b97d4dd8806(…)

O log da tarefa mostrará que a restauração foi feita para um diretório local. O registro acima foi truncado para promover uma visão clara.

Mais informações sobre o backup de containers Docker: