Como decidir entre um contêiner de volume de janela de encaixe e um volume de janela de encaixe?

23

Depois de ler os documentos, fiquei um pouco confuso sobre a melhor forma de gerenciar dados produtivos de aplicativos / serviços.

Parece haver 3 opções:

  1. Simplesmente mapeie o volume para o diretório do host (por exemplo, -v argumento para docker run )
  2. Crie uma imagem de contêiner do docker para dados (ou seja, contêiner separado e --volumes-from )
  3. Criando um volume docker (ou seja, docker volume create )

Agora, parece que a prática aceita é a opção # 2, mas então me pergunto qual é o propósito do nº 3.

Especialmente como você lida corretamente com esses cenários com 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 em seu servidor
  • Fazendo backup
  • Restaurando dados
por dukeofgaming 21.01.2016 / 20:57

2 respostas

17

Eu acho que # 2 e # 3 são praticamente a mesma coisa, a principal diferença é que não há um contêiner parado com # 3 (literalmente, apenas um volume nomeado). Por exemplo, você pode criar um volume nomeado e fazer da mesma forma o que faria com o # 2 com -v .

Crie um volume nomeado:

$ docker volume create --name test

Monte e escreva alguns dados para esse volume de um contêiner:

$ docker run -v test:/opt/test alpine touch /opt/test/hello

Você pode montar o mesmo volume test em outro contêiner e ler os dados:

$ docker run -v test:/opt/test alpine ls -al /opt/test     
total 8
drwxr-xr-x    2 root     root          4096 Jan 23 22:28 .
drwxr-xr-x    3 root     root          4096 Jan 23 22:29 ..
-rw-r--r--    1 root     root             0 Jan 23 22:28 hello

A vantagem aqui é que o volume não desaparece acidentalmente se você remover o contêiner somente de dados. Agora você gerencia isso com o subcomando docker volume .

$ d volume ls
DRIVER              VOLUME NAME
local               test

Ele também abre as possibilidades para os drivers de volume no caminho para que você possa fazer volumes compartilhados entre hosts (ou seja, volumes nomeados via NFS). Exemplos disso podem ser Flocker e Convoy . Para o seu ponto especificamente sobre mover ou fazer backup de dados, o Convoy possui subcomandos específicos para fazer backup de dados e permite armazenamento no NFS ou EBS externo ao host.

Por esse motivo, acho que a maneira mais nova da escola (Docker 1.9+) é usar um volume nomeado em vez de um contêiner somente de dados.

    
por 23.01.2016 / 23:31
19

A partir do Docker 1.9, a criação de volumes nomeados com a API de volumes ( docker volume create --name mydata ) é preferencial em um contêiner de volume de dados. Desde fevereiro de 2016, a documentação sobre volumes do Docker está lamentavelmente desatualizada. As pessoas do próprio Docker sugerem que os Data Volume Containers “ não são mais considerados um padrão recomendado ”, “Os volumes nomeados devem ser capazes de substituir volumes somente de dados na maioria (se não em todos) casos " e "< a href="https://github.com/docker/docker/issues/17798#issuecomment-154820406"> nenhuma razão eu posso ver para usar recipientes somente de dados . "

    
por 27.02.2016 / 21:46