CodeGym /Cursos /Docker SELF /Montagem de volumes

Montagem de volumes

Docker SELF
Nível 12 , Lição 2
Disponível

8.1 Introdução aos discos virtuais

Montagem de volumes (Volumes) é uma das funcionalidades mais úteis do Docker. Com isso, os containers conseguem trabalhar facilmente com dados da máquina host. Essa função torna o gerenciamento de dados flexível e conveniente: você pode salvar informações por longo prazo, compartilhá-las entre containers e fazer backup ou restaurar os dados sem dor de cabeça, caso algo dê errado.

Volumes no Docker são uma maneira de salvar dados de forma independente dos containers. Mesmo que um container seja removido, as informações armazenadas nos volumes permanecem seguras. Os volumes podem ser conectados (montados) aos containers, permitindo armazenar dados separadamente e reutilizá-los, independente de quantas vezes você crie ou remova containers.

Principais tipos de volumes

  1. Volumes Anônimos (Anonymous Volumes)
    • São criados automaticamente pelo Docker, caso um volume não seja explicitamente especificado para o container.
    • Usados para armazenamento temporário de dados.
  2. Volumes Nomeados (Named Volumes)
    • São criados e gerenciados pelo Docker.
    • Podem ser conectados a múltiplos containers e são preservados mesmo após o container ser removido ou parado.
  3. Volumes de Bind (Bind Mounts)
    • Conectam um diretório da máquina host a um diretório no container.
    • Ideais para acessar dados do sistema host e são úteis durante o desenvolvimento.

Sintaxe básica do comando docker run para montar volumes


-v <host_path>:<container_path>

Sintaxe completa:


docker run -v <host_path>:<container_path> [OPTIONS] IMAGE [COMMAND] [ARG...]

Principais parâmetros para montagem de volumes

1. Parâmetro -v ou --volume

Usado para criar volumes nomeados ou volumes de bind.

Exemplo:

Terminal

docker run -d -v /host/data:/container/data nginx

2. Parâmetro --mount

Fornece um método mais detalhado e flexível para montar volumes, dando suporte a parâmetros adicionais.

Exemplo:

Terminal

docker run -d --mount type=bind,source=/host/data,target=/container/data nginx

8.2 Criando e usando volumes

1. Volumes Nomeados

Os volumes nomeados são criados e gerenciados pelo Docker. Eles são feitos para armazenar dados de forma duradoura, dados que precisam continuar disponíveis entre reinicializações ou remoções de containers.

Criando um volume nomeado:

Terminal

docker volume create my_volume

Rodando um container com montagem de volume:

Neste exemplo, o volume my_volume é montado no diretório /data dentro do container my_container. Todos os dados gravados em /data serão salvos no volume e permanecerão acessíveis mesmo após a remoção do container.

Terminal

docker run -d -v my_volume:/data --name my_container nginx

2. Volumes Anônimos

Os volumes anônimos são criados automaticamente pelo Docker e vinculados a um container específico. Eles são úteis para dados temporários que não precisam ser mantidos após a remoção do container.

Rodando um container com um volume anônimo:

Neste exemplo, o Docker criará automaticamente um volume anônimo e o montará no diretório /data dentro do container.

Terminal

docker run -d -v /data --name my_container nginx

3. Diretórios Vinculados

Os diretórios vinculados permitem montar diretórios do sistema host nos containers. Isso é prático para compartilhar dados entre containers e o sistema host. Além disso, essa abordagem é frequentemente utilizada no desenvolvimento, onde o código-fonte é armazenado no sistema host.

Rodando um container com um diretório vinculado:

Neste exemplo, o diretório /host/data da máquina host é montado no diretório /container/data dentro do container my_container.

Terminal

docker run -d -v /host/data:/container/data --name my_container nginx

8.3 Exemplos de Uso de Volumes

1. Salvando dados de um banco de dados

Usar volumes para bancos de dados ajuda a manter os dados mesmo quando o container é reiniciado ou atualizado. Isso é especialmente importante para a confiabilidade em ambientes de produção.

Exemplo:

Neste exemplo, os dados do PostgreSQL são salvos em um volume db_data, garantindo que eles permaneçam mesmo se o container for reiniciado ou removido.

Terminal

docker volume create db_data
docker run -d -v db_data:/var/lib/postgresql/data --name postgres_container postgres

2. Compartilhando dados entre containers

Às vezes é necessário compartilhar dados entre vários containers. Volumes tornam isso fácil.

Exemplo

Vamos criar um volume e executar dois containers que usarão esse volume. Ambos os containers terão acesso aos dados no volume shared_data, permitindo que troquem informações.

Terminal

docker volume create shared_data
docker run -d -v shared_data:/data --name container1 nginx
docker run -d -v shared_data:/data --name container2 nginx

3. Desenvolvimento e Testes

Durante o desenvolvimento de aplicativos, é conveniente usar diretórios compartilhados para permitir que o código-fonte seja usado tanto pelo container quanto pela máquina host. Isso possibilita aos desenvolvedores editar o código no host e o container trabalhar com as atualizações em tempo real.

Exemplo

Neste exemplo, o diretório /path/to/source na máquina host é montado no diretório /app dentro do container dev_container. Assim, o container pode usar o código atualizado diretamente do sistema host.

Terminal

docker run -d -v /path/to/source:/app --name dev_container node
<

8.4 Gerenciamento de volumes

O Docker fornece comandos práticos pra gerenciar volumes, o que facilita criar, deletar e visualizar informações sobre volumes.

1. Ver todos os volumes

Este comando mostra uma lista de todos os volumes disponíveis na máquina host.

Terminal

docker volume ls

2. Ver informações sobre um volume

Com este comando dá pra obter detalhes sobre o volume my_volume: sua localização no sistema de arquivos da máquina host e informações sobre os containers que estão usando esse volume.

Terminal

docker volume inspect my_volume

3. Remover um volume

Este comando remove o volume my_volume. Antes de remover, é importante garantir que o volume não está sendo usado por nenhum container, senão o comando não vai funcionar.

Terminal

docker volume rm my_volume

8.5 Backup de volumes

Pra garantir a segurança dos dados, é super importante poder fazer backup dos volumes e restaurar eles caso precise.

1. Fazendo o backup do volume

Nesse exemplo, o conteúdo do volume my_volume é arquivado no arquivo my_volume_backup.tar.gz, que fica salvo na pasta /backup na máquina host.

Terminal

docker run --rm -v my_volume:/volume -v /backup:/backup busybox tar czf /backup/my_volume_backup.tar.gz /volume

2. Restaurando o volume

Esse exemplo restaura o conteúdo do volume my_volume a partir de um backup que tá salvo no arquivo my_volume_backup.tar.gz.

Terminal

docker run --rm -v my_volume:/volume -v /backup:/backup busybox tar xzf /backup/my_volume_backup.tar.gz -C /volume
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION