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: