Aprendendo Docker, parte 6: trabalhando com dados

Na parte de hoje da tradução de uma série de materiais sobre Docker, falaremos sobre como trabalhar com dados. Em particular, sobre os volumes do Docker. Nestes materiais, comparamos constantemente os mecanismos de software Docker com várias analogias comestíveis. Não nos desviemos também aqui desta tradição. Deixe os dados no Docker serem o tempero. Existem muitos tipos de especiarias no mundo e no Docker existem muitas maneiras de trabalhar com dados.

Parte 1: Noções básicas
Parte 2: Termos e Conceitos
Parte 3: Dockerfiles
Parte 4: Reduzindo o tamanho das imagens e acelerando sua construção
Parte 5: comandos
Parte 6: trabalhando com dados

Aprendendo Docker, parte 6: trabalhando com dados

Observe que este material foi preparado usando o motor Docker versão 18.09.1 ​​​​e versão API 1.39.

Os dados no Docker podem ser armazenados temporária ou permanentemente. Vamos começar com dados de tempo.

Armazenamento temporário de dados

Nos contêineres Docker, você pode organizar o trabalho com dados temporários de duas maneiras.

Por padrão, os arquivos criados por um aplicativo em execução em um contêiner são armazenados na camada gravável do contêiner. Para que este mecanismo funcione, nada de especial precisa ser configurado. Acontece barato e alegre. O aplicativo simplesmente precisa salvar os dados e continuar fazendo seu próprio trabalho. Porém, depois que o contêiner deixar de existir, os dados salvos desta forma simples também desaparecerão.

Existe outra solução para armazenar arquivos temporários no Docker, adequada para casos em que você precisa de um nível de desempenho mais alto em comparação ao que é possível com o mecanismo de armazenamento temporário padrão. Se você não precisa que seus dados sejam armazenados por mais tempo do que o contêiner existe, você pode conectar o tmpfs ao contêiner - um armazenamento temporário de informações que usa a RAM do host. Isso irá acelerar as operações de gravação e leitura de dados.

Muitas vezes acontece que os dados precisam ser armazenados mesmo depois que o contêiner deixa de existir. Para tanto, precisaremos de mecanismos de armazenamento persistente de dados.

Armazenamento permanente de dados

Existem duas maneiras de tornar a vida útil dos dados maior que a vida útil do contêiner. Uma maneira é usar a tecnologia de montagem vinculada. Com essa abordagem, você pode montar, por exemplo, uma pasta real no contêiner. Os processos localizados fora do Docker também poderão trabalhar com dados armazenados nessa pasta. Veja como olha montagem tmpfs e tecnologia de montagem bind.

Aprendendo Docker, parte 6: trabalhando com dados
Monte tmpfs e ligue a montagem

As desvantagens de usar a tecnologia de montagem vinculada são que seu uso complica o backup de dados, a migração de dados e o compartilhamento de dados entre vários contêineres. É muito melhor usar volumes Docker para armazenamento persistente de dados.

Volumes do Docker

Um volume é um sistema de arquivos que reside em uma máquina host fora dos contêineres. Docker cria e gerencia volumes. Aqui estão as principais propriedades dos volumes Docker:

  • Eles são um meio de armazenar informações permanentemente.
  • Eles são independentes e separados dos contêineres.
  • Eles podem ser compartilhados entre diferentes contêineres.
  • Eles permitem que você organize a leitura e gravação eficiente de dados.
  • Os volumes podem ser hospedados em recursos de um provedor de nuvem remoto.
  • Eles podem ser criptografados.
  • Eles podem receber nomes.
  • O contêiner pode providenciar que o volume seja preenchido com dados antecipadamente.
  • Eles são convenientes para testes.

Como você pode ver, os volumes do Docker têm ótimas propriedades. Vamos falar sobre como criá-los.

Criando Volumes

Os volumes podem ser criados usando Docker ou solicitações de API.

Aqui está uma instrução Dockerfile que permite criar um volume quando o contêiner é iniciado.

VOLUME /my_volume

Ao utilizar uma instrução como esta, o Docker, após criar o contêiner, criará um volume contendo os dados que já existem no local especificado. Observe que se você criar um volume usando um Dockerfile, isso não o isentará da necessidade de especificar um ponto de montagem para o volume.

Você também pode criar volumes em um Dockerfile usando o formato JSON.

Além disso, os volumes podem ser criados usando a linha de comando enquanto o contêiner está em execução.

Trabalhando com volumes na linha de comando

▍Criando um volume

Você pode criar um volume independente com o seguinte comando:

docker volume create —-name my_volume

▍Descubra informações sobre volumes

Para visualizar uma lista de volumes Docker, use o seguinte comando:

docker volume ls

Você pode explorar um volume específico como este:

docker volume inspect my_volume

▍Excluir um volume

Você pode excluir um volume como este:

docker volume rm my_volume

Para excluir todos os volumes que não são usados ​​pelos contêineres, você pode usar o seguinte comando:

docker volume prune

Antes de excluir volumes, o Docker solicitará que você confirme esta operação.

Se um volume estiver associado a um contêiner, o volume não poderá ser excluído até que o contêiner correspondente seja excluído. Ao mesmo tempo, mesmo que o contêiner seja excluído, o Docker nem sempre entende isso. Se isso acontecer, você pode usar o seguinte comando:

docker system prune

Ele foi projetado para limpar os recursos do Docker. Depois de executar este comando, você poderá excluir volumes cujo status foi previamente determinado incorretamente.

Sinalizadores --mount e --volume

Para trabalhar com volumes você, ao chamar o comando docker, muitas vezes você terá que usar sinalizadores. Por exemplo, para criar um volume durante a criação do contêiner, você pode usar a seguinte construção:

docker container run --mount source=my_volume, target=/container/path/for/volume my_image

Antigamente (até 2017), a bandeira era popular --volume. Inicialmente, este sinalizador (também pode ser usado de forma abreviada, então se parece com -v) foi usado para contêineres independentes, e a bandeira --mount - no ambiente Docker Swarm. No entanto, a partir do Docker 17.06, a bandeira --mount pode ser usado em qualquer cenário.

Deve-se notar que ao usar a bandeira --mount a quantidade de dados adicionais que devem ser especificados no comando aumenta, mas, por vários motivos, é melhor usar este sinalizador em vez de --volume. Bandeira --mount - Este é o único mecanismo que permite trabalhar com serviços ou especificar parâmetros de driver de volume. Além disso, esse sinalizador é mais fácil de trabalhar.

Nos exemplos existentes de comandos destinados a trabalhar com dados no Docker, você pode encontrar muitos exemplos de uso do sinalizador -v. Ao tentar adaptar esses comandos para você mesmo, lembre-se de que os sinalizadores --mount и --volume use formatos de parâmetros diferentes. Ou seja, você não pode simplesmente substituir -v em --mount e arrume uma equipe de trabalho.

A principal diferença entre --mount и --volume é que ao usar a bandeira --volume todos os parâmetros são coletados juntos em um campo e, quando usados --mount os parâmetros são separados.

Ao trabalhar com --mount parâmetros são representados como pares de valores-chave, ou seja, parece key=value. Esses pares são separados por vírgulas. Aqui estão as opções comumente usadas --mount:

  • type - tipo de montagem. O valor da chave correspondente pode ser vincular, volume ou tmpfs. Estamos falando aqui de volumes, ou seja, estamos interessados ​​no significado volume.
  • source - montar fonte. Para volumes nomeados, este é o nome do volume. Para volumes sem nome, esta chave não é especificada. Pode ser abreviado para src.
  • destination — o caminho no qual o arquivo ou pasta está montado no contêiner. Esta chave pode ser abreviada para dst ou target.
  • readonly - monta o volume pretendido apenas para leitura. Esta chave é opcional e não possui um valor atribuído a ela.

Aqui está um exemplo de uso --mount com muitos parâmetros:

docker run --mount type=volume,source=volume_name,destination=/path/in/container,readonly my_image

Resultados de

Aqui estão alguns comandos úteis que você pode usar ao trabalhar com volumes Docker:

  • docker volume create
  • docker volume ls
  • docker volume inspect
  • docker volume rm
  • docker volume prune

Aqui está uma lista de parâmetros comumente usados ​​para --mount, aplicável em um comando como docker run --mount my_options my_image:

  • type=volume
  • source=volume_name
  • destination=/path/in/container
  • readonly

Agora que encerramos esta série do Docker, é hora de dizer algumas palavras sobre o próximo passo que os alunos do Docker podem seguir. aqui é ótimo artigo sobre Docker. aqui é um livro sobre Docker (ao comprar este livro, tente obter a edição mais recente). aqui é Mais um livro indicado para quem acredita que a prática é a melhor forma de aprender tecnologia.

Caros leitores! Que materiais sobre Docker você recomendaria para iniciantes aprenderem?

Aprendendo Docker, parte 6: trabalhando com dados

Fonte: habr.com

Adicionar um comentário