Usando o Docker Volumes para compartilhar dados entre contêineres e computador host

Usando o Docker Volumes para compartilhar dados entre contêineres e computador host
Os volumes do Docker são usados ​​para persistir dados de um determinado diretório ou diretórios de seus contêineres do Docker. Portanto, seus dados não são removidos quando o contêiner para ou é removido.

Você também pode compartilhar um volume do Docker para muitos contêineres. Vamos falar sobre um cenário para descobrir por que é importante.

Digamos que você tenha um aplicativo da Web PHP. Agora você deseja testar se funciona na versão 5 do PHP.4, 7.0, 7.1 e 7.2. Você pode criar um volume do Docker, vamos chamá -lo aplicativo web. Em seguida, copie os arquivos de código -fonte do seu aplicativo PHP para o volume do docker aplicativo web. Em seguida, você pode criar recipientes de diferentes versões PHP e anexar o volume do Docker aplicativo web para Webroot de todos esses contêineres. Dessa forma, você pode testar facilmente como o seu aplicativo da web executa em diferentes versões PHP.

Neste artigo, mostrarei como usar o Docker Volumes para compartilhar dados entre contêineres e o computador host. Vamos começar.

Criando volumes do Docker:

Antes de adicionar um volume do Docker ao seu contêiner, você deve criar um volume do Docker.

Para criar um volume do Docker (digamos Data1), execute o seguinte comando:

$ docker volume Criar dados1

Data1 O volume deve ser criado.

Listando o Docker Volumes:

Você pode listar todos os volumes do Docker que você criou com o seguinte comando:

Lista de volume $ docker

Como você pode ver, todos os volumes do Docker estão listados. Agora, eu tenho apenas Data1 Volume do docker. Se eu criasse mais, isso apareceria aqui.

Inspecionando os volumes do Docker:

Você pode ver mais informações sobre um determinado volume do Docker (digamos Data1) com o seguinte comando:

$ Docker Volume Inspecione Dados1

Como você pode ver, muitas informações sobre o Data1 O volume está listado no formato JSON. O mais importante é Ponto de montagem. Ponto de montagem diz o caminho do sistema de arquivos local onde o volume é montado. Aqui o Data1 O volume é montado em /var/lib/docker/volumes/data1/_data No meu sistema de arquivos local. Vou mostrar como modificar os dados em seus volumes do Docker do seu computador host em uma seção posterior deste artigo abaixo.

Adicionando volumes aos contêineres e compartilhando volumes entre recipientes:

Agora vou criar um recipiente simples do docker a partir do httpd: 2.4 Imagem do Docker para executar o Apache 2 WebServer. Então eu vou montar o Data1 volume para /usr/local/apache2/htdocs Diretório daquele contêiner Docker. Também vou dar um nome ao contêiner (digamos www) apenas para gerenciar facilmente.

Para fazer isso, execute o seguinte comando:

$ Docker Run -d --it - -name = www -Mount Source = Data1, Destination =/Usr/Local/Apache2/Htdocs
httpd: 2.4

O contêiner www deve ser criado.

Agora para verificar se o Data1 O volume foi montado para o www Container, execute o seguinte comando:

$ Docker Inspecione www

É uma longa lista de informações. Mas no Montagens, Você pode ver que o nome do volume é Data1, é montado para /usr/local/apache2/htdocs no www recipiente.

Agora vou me conectar ao www contêiner e execute o Bash Shell lá com o seguinte comando:

$ Docker Exec -it www Bash

Como você pode ver, o Bash Shell está funcionando.

Agora vamos criar um arquivo html simples no /usr/local/apache2/htdocs diretório onde o Data1 O volume é montado.

$ echo "Hello World">/usr/local/apache2/htdocs/index.html

Agora saia do www Docker Container com o seguinte comando:

$ saída

Agora descubra o endereço IP do www Container com o seguinte comando:

$ Docker Inspecione www | Endereço Grep

Como você pode ver, o endereço IP do contêiner www é 172.17.0.2 (No meu caso).

Quando eu acessar o www Contêiner do navegador da web, você pode ver que a página que acabei de criar é exibida.

Agora vou criar outro contêiner www2 e anexe o Data1 volume para ele da mesma maneira e veja se as alterações no Data1 volume (montado em /usr/local/apache2/htdocs em www e www2 contêiner) de um recipiente é visível para o outro contêiner.

Para criar um novo contêiner www2, e anexe o Data1 Volume para ele, execute o seguinte comando:

$ docker run -d --it - -name = www2 - -mount fonte = data1, destino =/usr/local/apache2/htdocs
httpd: 2.4

Agora vamos encontrar o endereço IP do www2 Container com o seguinte comando:

$ Docker Inspecione www2 | Endereço Grep

Como você pode ver, eu recebo a mesma página quando acessar o www2 Contêiner de um navegador da web. Isso significa que os dados do www contêiner persistiu e compartilhado para o www2 recipiente.

Agora vou fazer alterações no índice.html (no Data1 volume montado /usr/local/apache2/htdocs) Página do www2 contêiner e verifique se a alteração reflete para os dois www e www2 containers.

Como você pode ver, as alterações feitas em um contêiner (www2 neste caso) é refletido para o outro contêiner (www nesse caso).

Acessando o Docker Volumes no computador host:

OBSERVAÇÃO: Para que isso funcione, você deve estar conectado como raiz do utilizador.

Você pode executar o seguinte comando para encontrar o caminho do Data1 Volume do docker no seu computador host:

# Docker Volume Inspect Data1

Como você pode ver, o Data1 O volume está no /var/lib/docker/volumes/data1/_data Diretório do meu computador host.

Agora navegue para o /var/lib/docker/volumes/data1/_data Diretório com o seguinte comando:

# cd/var/lib/docker/volumes/data1/_data

Como você pode ver, o índice.html Arquivo que acabamos de criar está lá.

# ls

Também o conteúdo do índice.html o arquivo é o mesmo.

Agora, vamos editar o índice.html arquive e veja se as alterações são refletidas no www e www2 containers.

# Índice Nano.html

Eu mudei o conteúdo do índice.html Arquivo para isso:

Como você pode ver, as mudanças são refletidas para o www e a www2 containers.

Removendo volumes do Docker:

Se quiser, você pode excluir um volume do docker também. Para excluir um volume do Docker, digamos Data2, Execute o seguinte comando:

$ docker volume rm dados2

O volume do docker Data2 deve ser excluído permanentemente.

É assim que você compartilha volumes do Docker entre recipientes e o computador host. Obrigado por ler este artigo.