Red Hat Training
A Red Hat training course is available for RHEL 8
3.4. Compartilhamento de arquivos entre dois contêineres
Você pode usar volumes para persistir dados em recipientes, mesmo quando um recipiente é excluído. Os volumes podem ser usados para compartilhar dados entre vários recipientes. O volume é uma pasta que é armazenada na máquina host. O volume pode ser compartilhado entre o contêiner e o host.
As principais vantagens são:
- Os volumes podem ser compartilhados entre os recipientes.
- Os volumes são mais fáceis de fazer backup ou migrar.
- Os volumes não aumentam o tamanho dos recipientes.
Procedimento
Para criar um volume, entre:
Volume do podman cria volume de host
Para exibir informações sobre o volume, entre:
$ podman volume inspect hostvolume [ { "name": "hostvolume", "labels": {}, "mountpoint": "/home/username/.local/share/containers/storage/volumes/hostvolume/_data", "driver": "local", "options": {}, "scope": "local" } ]
Note que ele cria um volume no diretório de volumes. Você pode salvar o caminho do ponto de montagem para a variável para facilitar a manipulação:
$ mntPoint=$(podman volume inspect hostvolume --format {{.Mountpoint}})
.Note que se você executar
sudo podman volume create hostvolume
, então o ponto de montagem muda para/var/lib/containers/storage/volumes/hostvolume/_data
.Criar um arquivo de texto dentro do diretório usando o caminho é armazenado na variável
mntPoint
:$ echo "Olá do anfitrião" >> $mntPoint/host.txt
Liste todos os arquivos no diretório definido pela variável
mntPoint
:$ ls $mntPoint/ host.txt
Executar o container com o nome
myubi1
e mapear o diretório definido pelo nome do volumehostvolume
no host para o diretório/containervolume1
no container:$ podman run -it --nome myubi1 -v hostvolume:/containervolume1 registry.access.redhat.com/ubi8/ubi /bin/bash
Note que se você usar o caminho do volume definido pela variável
mntPoint
(-v $mntPoint:/containervolume1
), os dados podem ser perdidos ao executar o comandopodman volume prune
, que remove os volumes não utilizados. Use sempre o comando-v hostvolume_name:/containervolume_name
.Liste os arquivos no volume compartilhado no contêiner:
# ls /containervolume1 host.txt
Você pode ver o arquivo
host.txt
que você criou no host.Criar um arquivo de texto dentro do diretório
/containervolume1
:# echo "Olá do recipiente 1 >> /containervolume1/container1.txt
-
Desprenda-se do recipiente com
CTRL p
eCTRL q
. Liste os arquivos no volume compartilhado no host, você deve ver dois arquivos:
$ ls $mntPoint container1.rxt host.txt
Neste ponto, você está compartilhando arquivos entre o contêiner e o anfitrião. Para compartilhar arquivos entre dois contêineres, execute outro contêiner chamado
myubi2
. Os passos 10 - 13 são análogos aos passos 5 - 8.Executar o container com o nome
myubi2
e mapear o diretório definido pelo nome do volumehostvolume
no host para o diretório/containervolume2
no container:$ podman run -it --name myubi2 -v hostvolume:/containervolume2 registry.access.redhat.com/ubi8/ubi /bin/bash
Liste os arquivos no volume compartilhado no contêiner:
# ls /containervolume2 container1.txt host.txt
Você pode ver o arquivo
host.txt
que você criou no host econtainer1.txt
que você criou dentro do containermyubi1
.Criar um arquivo de texto dentro do diretório
/containervolume2
:# echo "Olá do recipiente 2 >> /containervolume2/container2.txt
-
Desprenda-se do recipiente com
CTRL p
eCTRL q
. Liste os arquivos no volume compartilhado no host, você deve ver três arquivos:
$ ls $mntPoint container1.rxt container2.txt host.txt
Para parar e remover ambos os recipientes, entre:
$ podman stop myubi1 $ podman stop myubi2 $ podman rm myubi1 $ podman rm myubi2
Para remover o volume do hospedeiro, entre:
podman volume rm hostvolume
Para verificar se você apagou o volume, entre:
Volume ls de podman
Recursos adicionais
-
Para mais informações sobre o comando
podman volume
, digiteman podman-volume
.