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.728 ]

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


Criando e montando um volume



Vamos ver agora como criar e montar um volume em um container Docker:

1. Adicionando um volume de dados

Para mapear o volume do container a uma pasta no host basta executar o comando:

# docker run -d --name meucontainer -v /var/app imagem

Será criado um novo diretório dentro do container chamado /var/app, caso o mesmo já exista, será sobrescrito por este novo.

2. Verificar quais volumes um container possui

Você pode verificar quais volumes um container possui executando o comando:

# docker inspect meucontainer

O resultado do comando será parecido com isso:

...
Mounts": [
    {
        "Name": "fac362...80535",
        "Source": "/var/lib/docker/volumes/fac362...80535/_data",
        "Destination": "/var/app",
        "Driver": "local",
        "Mode": "",
        "RW": true
    }
]
...

Por padrão todos os volumes são montados como leitura e escrita, você pode montar o volume como apenas leitura, basta executar:

# docker run -d --name meucontainer -v /var/app:ro imagem

Note o ":ro" no final do /var/app, isso quer dizer que este volume é apenas leitura.

3. Montando um diretório do host como um volume de dados

Para mapear o volume do container a uma pasta no host basta executar o comando:

# docker run -d --name meucontainer -v /var/app:/var/www/html imagem

Será criado um novo diretório dentro do container chamado /var/app, caso o mesmo já exista, será sobrescrito por este novo.

4. Criando e montando um container como um volume de dados

É possível você criar um container com um volume que pode ser compartilhado com demais containers, isso é uma prática comum quando deseja-se ter alguma persistência de dados e que não esteja atrelado ao host onde o container está. Para isso, crie o container conforme abaixo:

# docker create -v /dados --name meucontainer imagem /bin/true

Agora, no próximo container basta você utilizar o parâmetro --volumes-from para que o volume criado no container acima seja mapeado para o novo container, algo como isso:

# docker run -d --volumes-from dados--name meucontainer1 imagem

Você pode criar quantos containers desejar mapeando este volume, inclusive pode mapear o volume de um container, por exemplo:

# docker run -d --volumes-from container1 --name meucontainer2 imagem

Com isso não é necessário mapear obrigatoriamente o container de volume, e sim algum container que já utiliza ele. Outro ponto importante a se observar nessa caso é que:
  • Quando removido o container de volume os demais containers não perdem os dados, pois continuará existindo neste container a pasta montada;
  • Para remover o volume nesse caso é necessário remover todos os containers que foram criando mapeando este container e em seguida executar o comando: docker em -v

Isso é o básico necessário para se trabalhar com volume no Docker, a partir disso é possível montar e desenvolver o ambiente que desejar, desde que se tenha criatividade, pois além de ser muito útil requer alguns cuidados.

Quer saber mais sobre docker? Acesse o blog:
Abraço!

Referências:
Página anterior    

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

Rancher - Painel para Docker

Docker e Flannel

Leitura recomendada

ZFS no GNU/Linux

jmtpfs - Enviando arquivos (MTPS) Android para Debian 9

Ceph - Uma Plataforma de Armazenamento Distribuído

Raid 1 com mdadm

Acessando partições NTFS no Linux

  
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