Montando Volumes no Docker

Entenda um pouco sobre como o Docker trabalha com volumes, identifique os pontos positivos e negativos dessa abordagem e veja como é possível criar um compartilhamento de volumes entre os containers.

[ Hits: 23.688 ]

Por: Mundo Docker em 04/09/2015 | Blog: http://www.mundodocker.com.br


Gerenciando volumes



Um volume nada mais é do que um diretório compartilhado entre o host e o container ou entre um ou mais containers, para este volume não há as mesmas restrições ou opções de limitação do LXC, pois não há manipulação dele pela libcontainer (biblioteca responsável pelas filtragens nas chamadas de sistema). Os volumes fornecem vários recursos úteis para persistência ou compartilhamento de dados:
  • Os volumes são inicializados quando um container é criado. Se a imagem base do container contém dados no ponto de montagem especificado, esses serão sobrescritos pelo novo ponto de montagem (igual ao que acontece nos sistemas padrões atualmente);
  • Volumes de dados podem ser compartilhados e reutilizados entre os containers;
  • Alterações em um volume são feitos diretamente, sem manipulação pela libcontainer;
  • Alterações em um volume não serão incluídos na imagem utilizada;
  • Os dados contidos no volume não são apagados quando o container é removido;

Existem basicamente duas formas de se montar um volume no Docker:
  1. Montagem host-container
  2. Montagem entre containers

Cada uma das opções tem seus benefícios e desafios, entenda abaixo um pouco sobre cada uma.

1. Montagem host-container

Prós:
  • Menor overhead para acesso disco, pois não há analise pela libcontainer das chamadas para esse volume mapeado;
  • É possível mapear o mesmo volume para múltiplos containers, forma primitiva de replicação de dados entre containers (lembrando que neste caso não há controle de arquivos lidos e escritos ao mesmo tempo, quem deve ser responsável por isso é o filesystem do volume, não o volume em si);
  • Persistência de dados, não há risco do container cair ou ser removido e os dados desaparecerem;

Contras:
  • Sucessível possíveis brechas de segurança a nível de filesystem, escalonamento de privilégios, pois neste ambiente não há controle pela libcontainer;
  • Não escalável, pois atrela-se o container ao host ou pelo menos ao mapeamento;
  • Dificulta administração, pois há mais uma camada de gerenciamento que deve ser muito bem estruturada;

2. Montagem entre containers

Prós:
  • Portável, pois o volume não está mais atrelado ao host;
  • É possível mapear o mesmo volume para múltiplos containers, forma primitiva de replicação de dados entre containers (lembrando que neste caso não há controle de arquivos lidos e escritos ao mesmo tempo, quem deve ser responsável por isso é o filesystem do volume, não o volume em si);
  • Persistência de dados, não há risco do container cair ou ser removido e os dados desaparecerem;

Contras:
  • Maior overhead para acesso disco, pois há analise pela libcontainer das chamadas para esse volume mapeado;
  • Maior complexidade, pois há mais passos a serem seguidos para criação e remoção de containers;

Veja na próxima pagina como pode ser criado e montado um volume dentro de um container Docker.

    Próxima página

Páginas do artigo
   1. Gerenciando volumes
   2. Criando e montando um volume
Outros artigos deste autor

Docker e Flannel

Rancher - Painel para Docker

Leitura recomendada

Instalando e configurando o NTFS-3G 1.0 final

Stripe no LVM

Usando partições e sistemas de arquivos

Recuperação de partições deletadas com o TestDisk

Filesystem LVM

  
Comentários
[1] Comentário enviado por MySQLBox em 04/09/2015 - 16:35h

Parabéns!
Objetivo e claro na explicação, ótimo artigo!

[2] Comentário enviado por removido em 04/09/2015 - 19:21h

Ótimo conteúdo, obrigado por compartilhar.
---------------------------------
Keep it Simple, Stupid

[3] Comentário enviado por rahremix em 07/09/2015 - 22:26h

Interessante, é uma boa para uso com squid e cache em disco.

[4] Comentário enviado por sergeimartao em 24/09/2015 - 14:04h

Explicação bem simples e direta, parabéns

[5] Comentário enviado por mundodocker em 25/09/2015 - 16:44h


Obrigado pessoal, buscamos divulgar o uso do Docker pois acreditamos que é uma ferramenta que pode ajudar em qualquer tipo de tarefa/aplicação/sistema, os feedbacks para nós são importantes para podermos lapidar o conteúdo e tentar trazer o que há de melhor e mais útil. Novamente muito obrigado!

[6] Comentário enviado por marceloeng em 27/04/2016 - 21:16h

Obrigado pelo excelente tutorial.
Estou começando a estudar docker e tenho uma dúvida:
Se eu criar um container, por exemplo, com Apache e minha aplicação PHP e mais um container mysql. Caso precise é só dar um run que o docker vai subir o containers com aquelas configurações que eu informei.
E no caso do banco de dados? Como posso fazer pra que meu container não perca todas as inserções e demais alterações que ficam no meu BD enquanto a aplicação está executando? E se o container mysql for apagado? Pode-se usar volumes para isso? Onde ficam armazenados os dados? É possível fazer dump sql?

São uma série de perguntas...Agradeço se puder responder.

Abraço,
Marcelo

[7] Comentário enviado por mundodocker em 28/04/2016 - 12:35h

Oi Marcelo,
Vamos por partes.
O Docker sobe os container baseado nas imagens que você criou, se você criar as imagens com apache, mysql, etc, e der um docker run -d --name APACHE MINHAI_MAGEM_APACHE, então você terá um container rodando com o ambiente que você criou na imagem. Você pode ainda automatizar via compose.

Com relação a persistência de dados do MySQL, você deve sempre mapear ou um volume local (like: docker run -d -v PASTA_DOHOST:PASTA_DENTRO_CONTAINER imagem) Ou ainda um volume criado via plugin (Flocker, Gluster e afins). Dessa forma tudo que você colocar no volume poderá ser portado para outro container, ou seja, se você tem um container com MySQL e você fez com que a pasta /var/lib/mysql estivesse nesse volume, quando esse container morrer, você pode criar outro mapeando esse mesmo volume e seu MySQL terá os dados.
Claro que você pode fazer dump, pode utilizar o docker exec para isso.

Você deve ter cuidado nessa arquitetura, pois não é apenas a persistência que conta, deve analisar e testar se o MySQL vai se comportar da forma que deseja, dentre outros detalhes.

Talvez isso te ajude a começar:
http://www.mundodocker.com.br/persistindo-dados-flocker/
http://www.mundodocker.com.br/persistindo-dados-glusterfs/
http://www.mundodocker.com.br/docker-exec/
http://www.mundodocker.com.br/criando-um-servidor-web/

Obrigado pelo feedback, grande abraço!

[8] Comentário enviado por Lisandro em 28/06/2016 - 11:16h

Mais Um bom Artigo.
Abraço


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts