Simulando a Migração de Volume para um Novo Host
Em um cenário real, você transferiria o arquivo de backup para um novo host usando ferramentas como scp, rsync ou um serviço de compartilhamento de arquivos. Para este laboratório, simularemos uma migração removendo nosso volume original e criando um novo para restaurar nossos dados.
Simulando um Novo Ambiente de Host
Primeiro, vamos limpar nossos contêineres antigos para simular a mudança para um novo ambiente:
docker rm -f my-container data-generator
Agora, vamos remover nosso volume original para simular o início do zero em um novo host:
docker volume rm my-data-volume
Crie um novo volume que representará nosso volume no "novo host":
docker volume create my-new-host-volume
Restaurando o Volume do Backup
Agora, restauraremos nosso backup para o novo volume:
docker run --rm -v my-new-host-volume:/destination -v $(pwd):/backup ubuntu bash -c "cd /destination && tar xvf /backup/my-data-volume-backup.tar"
Este comando:
- Cria um contêiner temporário
- Monta nosso novo volume em
/destination
- Monta o diretório atual (onde nosso backup está localizado) em
/backup
- Extrai o arquivo tar para o diretório
/destination
Verificando os Dados Restaurados
Vamos verificar se todos os nossos dados foram restaurados corretamente para o novo volume:
docker run --rm -v my-new-host-volume:/data ubuntu ls -la /data
Você deve ver a mesma estrutura de arquivos de antes:
total 12
drwxr-xr-x 3 root root 4096 Oct 1 12:34 .
drwxr-xr-x 1 root root 4096 Oct 1 12:34 ..
drwxr-xr-x 2 root root 4096 Oct 1 12:34 config
-rw-r--r-- 1 root root 21 Oct 1 12:34 important.txt
-rw-r--r-- 1 root root 24 Oct 1 12:34 test.txt
Verifique o conteúdo de um de nossos arquivos para garantir que os dados estejam intactos:
docker run --rm -v my-new-host-volume:/data ubuntu cat /data/important.txt
Saída:
This is important data
Verifique também o arquivo de configuração:
docker run --rm -v my-new-host-volume:/data ubuntu cat /data/config/settings.conf
Saída:
database_url=postgres://user:password@db:5432/mydb
Usando o Volume Restaurado com um Novo Contêiner
Agora que "migramos" nosso volume com sucesso, vamos usá-lo com um novo contêiner:
docker run --name my-new-container -v my-new-host-volume:/app/data -d nginx
Isso cria um novo contêiner Nginx que monta nosso volume restaurado em /app/data.
Vamos verificar se o contêiner pode acessar os dados do volume:
docker exec my-new-container ls -la /app/data
Você deve ver os mesmos arquivos de antes, confirmando que a migração foi bem-sucedida.
Atualizando Aplicativos para Usar o Novo Volume
Em um cenário real, após migrar volumes para um novo host, você precisaria atualizar seus arquivos Docker Compose ou comandos de execução do contêiner para usar os novos nomes ou caminhos do volume. Por exemplo, se você estivesse usando Docker Compose, você poderia atualizar seu arquivo docker-compose.yml da seguinte forma:
version: "3"
services:
webapp:
image: nginx
volumes:
- my-new-host-volume:/app/data
volumes:
my-new-host-volume:
external: true
Isso diz ao Docker para usar o volume criado externamente chamado my-new-host-volume.
O processo de migração está agora completo! Você conseguiu:
- Criar um volume Docker e adicionar dados a ele
- Fazer backup dos dados do volume
- Criar um novo volume em um "novo host" simulado
- Restaurar os dados de backup para o novo volume
- Verificar a integridade dos dados
- Conectar um novo contêiner ao volume migrado