[Série DevOps] Explicação detalhada do volume de dados do Docker (volume)

[Série DevOps] Explicação detalhada do volume de dados do Docker (volume)

I. Visão geral

A imagem do Docker é formada pela sobreposição de vários sistemas de arquivos somente leitura. Ao iniciar um contêiner, o docker carregará a camada somente leitura e adicionará uma camada de leitura e gravação no topo da camada somente leitura (topo da pilha). Se você precisar modificar um arquivo na camada somente leitura, essa camada de arquivo precisará ser copiada para a camada de leitura e gravação. A versão somente leitura do arquivo ainda está lá, apenas oculta pela cópia em nível de gravação do arquivo acima. Quando o docker é removido ou reiniciado, os arquivos alterados anteriormente desaparecem. No Docker, a combinação da camada somente leitura e da camada leitura-gravação é chamada Union File System. O Docker empacota o aplicativo e o ambiente de execução para formar um contêiner para execução. Se os dados gerados pelo contêiner do Docker não forem gerados por meio do docker commits para gerar uma nova imagem, para que os dados sejam salvos como parte da imagem, então quando o contêiner for excluído, os dados desaparecerão naturalmente. Para salvar os dados no Docker, o Docker projetou um mecanismo chamado Volume

Para obter um bom armazenamento e compartilhamento de dados, Docker propôs o conceito de Volume, que ignora o sistema de arquivos conjunto padrão e existe no host na forma de um arquivo ou diretório normal. Este diretório ou arquivo é chamado de volume de dados . .

2. Volume de dados

Insira a descrição da imagem aqui

Um volume é um diretório especial que pode ser usado por um ou mais contêineres. Ele ignora o UFS e pode fornecer os seguintes recursos:

  • Os volumes de dados permitem que os dados sejam compartilhados ou reutilizados entre contêineres.
  • As alterações no volume têm efeito direto.
  • As alterações no volume de dados não são incluídas na atualização do espelho.
  • O ciclo de vida de um volume de dados dura até que nenhum outro contêiner o utilize.

3. Por que usar volume de dados?

Um volume é um diretório selecionado dentro de um ou mais contêineres que fornece ao Docker dados persistentes ou compartilhados.É o mecanismo preferido do Docker para armazenar dados gerados e usados ​​por contêineres. As modificações nos volumes entram em vigor imediatamente; ao confirmar ou criar uma imagem, o volume não é incluído na imagem.

O papel dos volumes de dados:

  1. Dados persistentes
  2. Compartilhar dados

Características dos volumes de dados:

  1. Mesmo que faça efeito
  2. As atualizações de volume não afetam o espelhamento
  3. Os volumes persistem por padrão mesmo se os contêineres forem interrompidos ou excluídos

4. Operações básicas de volumes de dados

4.1 Criar volume de dados

Use o seguinte comando para criar um volume de dados

  • volume docker criar nome do volume
docker volume create db_vol

Os volumes de dados criados desta forma também podem ser gerenciados pelo volume do docker, como visualização, exclusão, etc.

4.2 Ver volume de dados

docker volume ls

4.3 Visualizar detalhes do volume de dados

  • volume do docker inspecionar nome do volume
docker volume inspect db_vol

4.4 Exclusão de volume de dados

  • nome do volume docker volume rm
docker volume rm db_vol

5. Uso de volumes de dados

5.1 Crie primeiro o volume de dados e depois monte-o

docker volume create data_volume

5.2 Crie um volume de dados usado pelo contêiner

docker run -d -it \
> --name volumetest \
> --mount source=data-vol,target=/data \
> ubuntu

Nota: Adicionar "\" significa que o último retorno de carro e avanço de linha são adicionados ao comentário. O sistema entende que o comando ainda não terminou, então continua aguardando a entrada do usuário até que o caractere final seja lido.

Abreviatura (-v):

docker run -d -it \
> --name volumetest \
> -v data-vol:/data \
> ubuntu

5.3 Monte diretamente o diretório host

Desta forma, não há necessidade de criar um volume de dados antecipadamente. Você pode especificar diretamente um diretório no host para montá-lo no contêiner. No entanto, o diretório correspondente no host deve existir, caso contrário, uma exceção será relatada.

docker: Error response from daemon: invalid mount config for type "bind": bind source path does not exist: /root/vdata.
1) O comando para criar um contêiner no modo de montagem é o seguinte:
docker run -d -it \
> --name volumetest02 \
> --mount type=bind,source=/home/lisen/vdata,target=/vdata \
> ubuntu
2) O comando de criação do modo -v é o seguinte:
docker run -dit --name volumetest02 -v /home/lisen/vdata:/vdata ubuntu

5.4 Volumes de dados somente leitura

O volume de dados criado é gravável por padrão, o que é adequado para a maioria das situações. O volume também pode ser definido como somente leitura.

1) O comando para criar um contêiner no modo de montagem é o seguinte:
docker run -d -it \
> --name volumetest02 \
> --mount type=bind,source=/home/lisen/vdata,target=/vdata,ro \
> ubuntu
2) Crie no modo -v (pode ser entendido como abreviatura):
docker run -dit --name volumetest02 -v /home/lisen/vdata:/vdata:ro ubuntu

A principal função de um volume de dados é a persistência e o compartilhamento de dados, portanto, o modo somente leitura geralmente não é usado.

5.5 Contêiner de volume de dados

Objetivo: O objetivo principal do contêiner de volume de dados é compartilhar alguns dados atualizados continuamente entre vários contêineres. O contêiner de volume de dados também é um contêiner que fornece especificamente volumes de dados para outros contêineres montarem.

1). Crie um novo contêiner de volume de dados
docker run -it -d --name data-volume-con -v /data ubuntu
2). Crie um novo contêiner para usar o contêiner de volume de dados
docker run -it -d --name db-con-1 --volumes-from data-volume-con ubuntu

O parâmetro –volumes-from é usado para especificar o contêiner do volume de dados; insira o contêiner recém-criado e crie um novo arquivo de teste no diretório montado (diretório de dados, o diretório especificado ao criar o contêiner do volume de dados).

5.6 Contêiner de volume de dados

1). Backup de volume de dados

Crie um contêiner que monte o volume de dados para backup (especificado com o parâmetro volumes-from) e o volume de dados usado para fazer backup dos dados (especificado com o parâmetro -v). Use o comando tar compression para compactar os dados O volume a ser copiado para backup especificado pelo parâmetro volumes-from é compactado no volume de dados usado para backup (equivalente a salvar no diretório correspondente do host).

docker run --rm \
> --name backup \
> --volumes-from data-volume-con \
> -v /host-backup:/con-backup \
> ubuntu tar cvf /con-backup/backup200201.tar /data
  • O parâmetro –rm especifica que o contêiner criado é um contêiner temporário e será excluído automaticamente após a execução. Usamos esse contêiner apenas para concluir o backup. Após a conclusão do backup, os dados são armazenados no host e o contêiner é naturalmente não é mais necessário.
  • –volumes-from parâmetro especifica o contêiner de volume de dados do qual precisa ser feito backup
  • O parâmetro -v especifica o volume de dados usado para fazer backup dos dados. /host-backup é o diretório do host e /con-backup é o diretório do contêiner correspondente.
  • O comando tar completa a compactação de dados. Observe que a fonte da compactação é o diretório do contêiner, porque o comando de compactação é realmente executado no contêiner, para ser mais preciso, ele é executado no contêiner de backup (especificado pelo parâmetro –name). Depois a compactação for concluída, ela será naturalmente salva no diretório Host.
2). Restauração de dados

Crie um novo contêiner de volume de dados, que será usado como contêiner para armazenar dados restaurados.

docker run -it --name data-volume-con2 -v /data ubuntu

Crie um contêiner temporário, monte o contêiner de volume de dados usado para armazenar os dados restaurados e o volume de dados que armazena os dados de backup e, em seguida, use o comando tar para descompactar os dados de backup no volume de dados que armazena os dados restaurados.

  • Parâmetro –rm, consulte a explicação na seção “Backup de dados”
  • –volumes-from parâmetro, especifique o contêiner usado para salvar os dados restaurados
  • O parâmetro -v é usado para especificar o volume de dados onde os dados de backup são armazenados. /host-backup é o diretório usado para armazenar dados de backup no host. Monte-o no diretório /container-back do contêiner. O comando tar passa /container- voltar

Acho que você gosta

Origin blog.csdn.net/songjianlong/article/details/132910493
Recomendado
Clasificación