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 dadosObserve 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 bindAs 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?
