Docker de aprendizagem Parte 6: Trabalhando com dados

Na edição de hoje da série Docker, falaremos sobre como trabalhar com dados. Em particular, volumes Docker. Nesses materiais, comparamos constantemente os mecanismos de software do Docker com vårias analogias comestíveis. Não vamos nos afastar dessa tradição aqui. Os dados do Docker devem ser condimentados. Existem muitos tipos de especiarias no mundo e, no Docker, existem muitas maneiras de trabalhar com dados.

→ Parte 1: o básico
→ Parte 2: termos e conceitos
→ Parte 3: arquivos Dockerfile
→ Parte 4: reduzindo o tamanho das imagens e acelerando sua montagem
→ Parte 5: equipes
→ Parte 6: trabalhando com dados



Observe que este material foi preparado usando a versão 18.09.1 ​​do mecanismo Docker e a versão 1.39 da API.

Os dados do Docker podem ser armazenados temporariamente ou permanentemente. Vamos começar com os dados de tempo.

Armazenamento temporĂĄrio de dados


HĂĄ duas maneiras de organizar o trabalho com dados temporĂĄrios nos contĂȘineres do Docker.

Por padrĂŁo, os arquivos criados por um aplicativo em execução em um contĂȘiner sĂŁo salvos em uma camada de contĂȘiner habilitada para gravação. Para que esse mecanismo funcione, vocĂȘ nĂŁo precisa configurar nada especificamente. Acontece barato e com raiva. Um aplicativo sĂł precisa salvar dados e continuar a fazer suas prĂłprias coisas. No entanto, depois que o contĂȘiner deixar de existir, os dados armazenados de maneira simples desaparecerĂŁo.

Para armazenar arquivos temporĂĄrios no Docker, vocĂȘ pode usar outra solução adequada para os casos em que Ă© necessĂĄrio um nĂ­vel mais alto de desempenho comparado ao que Ă© possĂ­vel obter usando o mecanismo padrĂŁo para armazenamento temporĂĄrio de dados. Se vocĂȘ nĂŁo precisar que seus dados sejam armazenados por mais tempo que o contĂȘiner, existe possĂ­vel conectar tmpfs ao contĂȘiner, um armazenamento temporĂĄrio de informaçÔes que usa a RAM do host. Isso irĂĄ acelerar o desempenho da 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 fazer isso, precisamos de mecanismos Ășteis para armazenamento permanente de dados.

Armazenamento permanente de dados


Existem duas maneiras de aumentar a vida Ăștil dos dados que a vida Ăștil do contĂȘiner. Uma maneira Ă© usar a tecnologia de montagem de ligação. Com essa abordagem, vocĂȘ pode montar, por exemplo, uma pasta realmente existente no contĂȘiner. Os processos localizados fora do Docker poderĂŁo trabalhar com os dados armazenados nessa pasta. É assim que a tecnologia tmpfs mount and bind mount se parece .


Monte tmpfs e monte bind

As desvantagens do uso da tecnologia de montagem de ligação 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 do Docker para armazenamento de dados persistente.

Tom Docker


Um volume Ă© um sistema de arquivos que reside em uma mĂĄquina host fora dos contĂȘineres. A criação e o gerenciamento de volumes sĂŁo feitos pelo Docker. Aqui estĂŁo as propriedades bĂĄsicas dos volumes do Docker:

  • Eles representam um meio para o armazenamento permanente de informaçÔes.
  • 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 a gravação eficazes dos dados.
  • Os volumes podem ser hospedados no provedor de nuvem remota.
  • Eles podem ser criptografados.
  • Eles podem receber nomes.
  • O contĂȘiner pode providenciar para que o volume seja preenchido com dados antecipadamente.
  • Eles sĂŁo convenientes para teste.

Como vocĂȘ pode ver, os volumes do Docker tĂȘm Ăłtimos recursos. Vamos falar sobre como criĂĄ-los.

Criação de Volume


É possĂ­vel criar volumes usando o Docker ou por meio de solicitaçÔes de API.

Aqui estĂĄ a instrução no Dockerfile que permite criar um volume quando o contĂȘiner Ă© iniciado.

VOLUME /my_volume 

Ao usar uma instrução Docker semelhante, depois de criar o contĂȘiner, ele criarĂĄ um volume contendo dados que jĂĄ existem no local especificado. Observe que, se vocĂȘ criar um volume usando o Dockerfile, isso nĂŁo dispensa a necessidade de especificar um ponto de montagem para o volume.

VocĂȘ tambĂ©m pode criar volumes no Dockerfile usando o formato JSON.

AlĂ©m disso, Ă© possĂ­vel criar volumes usando a linha de comandos enquanto o contĂȘiner estiver em execução.

Trabalhando com volumes da linha de comandos


▍Criar um volume


VocĂȘ pode criar um volume independente com o seguinte comando:

 docker volume create —-name my_volume 

InformationDobrar informaçÔes de volume


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

 docker volume ls 

VocĂȘ pode explorar um volume especĂ­fico como este:

 docker volume inspect my_volume 

EmRemover Volume


VocĂȘ pode excluir um volume como este:

 docker volume rm my_volume 

Para excluir todos os volumes que nĂŁo sĂŁo usados ​​por contĂȘineres, vocĂȘ pode recorrer ao seguinte comando:

 docker volume prune 

Antes de excluir volumes, o Docker solicitarå a confirmação desta operação.

Se o volume estiver associado a um contĂȘiner, esse volume nĂŁo poderĂĄ ser excluĂ­do atĂ© que o contĂȘiner correspondente seja excluĂ­do. Nesse caso, mesmo que o contĂȘiner seja removido, 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. ApĂłs executar este comando, vocĂȘ poderĂĄ excluir volumes cujo status foi determinado anteriormente incorretamente.

Sinalizadores --mount e --volume


Para trabalhar com volumes, quando vocĂȘ chama o docker , geralmente Ă© necessĂĄrio usar sinalizadores. Por exemplo, para criar um volume durante a criação de um contĂȘiner, vocĂȘ pode usar a seguinte construção:

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

Nos tempos antigos (atĂ© 2017), a bandeira --volume era --volume . Inicialmente, esse sinalizador (tambĂ©m pode ser usado de forma abreviada e, em seguida, parece -v ) foi usado para contĂȘineres independentes, e o sinalizador --mount foi --mount no ambiente do Docker Swarm. No entanto, a partir do Docker 17.06, o sinalizador --mount pode ser usado em qualquer cenĂĄrio.

Deve-se notar que, ao usar o sinalizador --mount , a quantidade de dados adicionais que devem ser especificados no comando aumenta, mas, por vĂĄrias razĂ”es, Ă© melhor usar esse sinalizador em vez de --volume . O sinalizador --mount Ă© o Ășnico mecanismo que permite trabalhar com serviços ou especificar configuraçÔes do driver de volume. AlĂ©m disso, trabalhar com esse sinalizador Ă© mais fĂĄcil.

Nos exemplos existentes de comandos destinados a trabalhar com dados no Docker, vocĂȘ pode encontrar muitos exemplos do uso do sinalizador -v . Ao tentar adaptar esses comandos, lembre-se de que os --mount e --volume usam formatos de parĂąmetros diferentes. Ou seja, vocĂȘ nĂŁo pode simplesmente substituir -v por --mount e obter um comando de trabalho.

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

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

  • type - type montagem. O valor para a chave correspondente pode ser bind , volume ou tmpfs . Estamos falando de volumes aqui, isto Ă© - estamos interessados ​​no valor do volume .
  • source - monte a fonte. Para volumes nomeados, este Ă© o nome do volume. Para volumes sem nome, essa chave nĂŁo estĂĄ especificada. Pode ser reduzido para src .
  • destination - o caminho no qual o arquivo ou pasta estĂĄ montado no contĂȘiner. Essa chave pode ser reduzida para dst ou target .
  • readonly - monta um volume somente leitura . O uso dessa chave Ă© opcional; nenhum valor Ă© atribuĂ­do a ela.

Aqui estå um exemplo do uso de --mount com muitas opçÔes:

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

SumĂĄrio


Aqui estĂŁo alguns comandos Ășteis que vocĂȘ pode usar ao trabalhar com volumes do Docker:

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

Aqui estĂĄ uma lista de opçÔes comumente usadas para --mount , aplicĂĄveis ​​a um comando como docker run --mount my_options my_image :

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

Agora que terminamos esta série do Docker, é hora de dizer algumas palavras sobre para onde aqueles que estudam o Docker podem seguir em frente. Aqui estå um ótimo artigo sobre o Docker. Aqui estå um livro sobre o Docker (ao comprar este livro, tente obter a edição mais recente). Aqui estå outro livro que irå atender aqueles que acreditam que a pråtica é a melhor maneira de aprender tecnologia.

Caros leitores! Quais materiais sobre o Docker vocĂȘ recomendaria aos iniciantes para estudar?

Source: https://habr.com/ru/post/pt441574/


All Articles