Depois de ler os documentos, fiquei um pouco confuso sobre a melhor forma de gerenciar dados produtivos de aplicativos / serviços.
Parece haver três opções:
- Simplesmente mapeie o volume para o diretório host (ou seja,
-v
argumento paradocker run
) - Crie uma imagem de contêiner de janela de encaixe para dados (por exemplo, contêiner separado e
--volumes-from
) - Criando um volume da janela de encaixe (ou seja
docker volume create
)
Agora, parece que a prática aceita é a opção 2, mas depois me pergunto qual é o propósito da 3.
Especialmente como você lida corretamente com esses cenários docker volume
e é melhor usar um contêiner de volume de dados ou isso para cada situação?
- Você precisa de dados do aplicativo em um volume e / ou camada de armazenamento separados no servidor
- Fazendo backup
- Restaurando dados
btrfs scrub
-lo para encontrar e corrigir arquivos danificados. Não tenho certeza de como as coisas encaixadas funcionam, mas acho que elas não protegem contra a podridão de dados; portanto, sempre preciso de uma restauração completa se algo de ruim acontecer, em vez de apenas restaurar arquivos individuais. Outro pensamento é que ele adiciona outra camada de abstração, tornando mais lenta a leitura e a gravação de arquivos. De alguma forma, não vejo as vantagens dos itens 2 e 3, mas não tenho experiência com o docker, portanto isso pode mudar.Respostas:
Eu acho que os números 2 e 3 são praticamente a mesma coisa, a principal diferença é que não há contêiner parado com o número 3 (é literalmente, apenas um volume nomeado). Por exemplo, você pode criar um volume nomeado e fazer da mesma forma o que faria com o nº 2
-v
.Crie um volume nomeado:
Monte e grave alguns dados nesse volume a partir de um contêiner:
Você pode montar o mesmo
test
volume em outro contêiner e ler os dados:A vantagem aqui é que o volume não desaparecerá acidentalmente se você remover o contêiner somente de dados. Agora você o gerencia com o
docker volume
subcomando.Ele também abre as possibilidades para os drivers de volume mais adiante, para que você possa fazer volumes compartilhados entre hosts (ou seja, volumes nomeados pelo NFS). Exemplos disso podem ser Flocker e Convoy . A seu ponto, especificamente sobre mover ou fazer backup de dados, o Convoy possui subcomandos específicos para fazer backup de dados e permite o armazenamento em NFS ou EBS externo ao seu host.
Por esse motivo, acho que a maneira mais recente (Docker 1.9+) é usar um volume nomeado em vez de um contêiner somente de dados.
fonte
the volume won't accidentally disappear if you remove the data-only container
. Você poderia elaborar? Obrigado.No Docker 1.9, a criação de Volumes Nomeados com a API Volumes (
docker volume create --name mydata
) é preferível a um Contêiner de Volume de Dados. Em fevereiro de 2016, a documentação dos volumes do Docker estava desatualizada. O pessoal do Docker sugere que os Data Volume Containers “ não são mais considerados um padrão recomendado ”, “os volumes nomeados devem poder substituir os volumes somente de dados na maioria dos casos (se não todos) ” e “ não há motivo para usar. contêineres somente para dados ".fonte