Usando o volume no Dockerfile
Exemplo não utilizando volume
Criação do Dockerfile sem utilizar volume:
/tmp/volume/volume$ ls
/tmp/volume/volume$ touch Dockerfile
/tmp/volume/volume$ vim Dockerfile
/tmp/volume/volume$ cat Dockerfile
FROM ubuntu:22.04
# VOLUME /app
WORKDIR /app
Construção da imagem:
$ docker image build -t ubuntu-volume -f Dockerfile .
[+] Building 12.2s (7/7) FINISHED docker:default
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 82B 0.0s
=> [internal] load metadata for docker.io/library/ubuntu:22.04 3.3s
=> [auth] library/ubuntu:pull token for registry-1.docker.io 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [1/2] FROM docker.io/library/ubuntu:22.04@sha256:adbb90115a2 8.6s
=> => resolve docker.io/library/ubuntu:22.04@sha256:adbb90115a2 0.0s
=> => sha256:adbb90115a21969d2fe6fa7f9af4253e16 1.34kB / 1.34kB 0.0s
=> => sha256:075680e983398fda61b1ac59ad733ad81d18df 424B / 424B 0.0s
=> => sha256:53a843653cbcd9e10be207e951d907dc24 2.30kB / 2.30kB 0.0s
=> => sha256:857cc8cb19c0f475256df4b7709003b7 29.54MB / 29.54MB 7.4s
=> => extracting sha256:857cc8cb19c0f475256df4b7709003b77f10121 1.0s
=> [2/2] WORKDIR /app 0.1s
=> exporting to image 0.0s
=> => exporting layers 0.0s
=> => writing image sha256:fb0bf2bef8f7c519918810738a602e83f61b 0.0s
=> => naming to docker.io/library/ubuntu-volume 0.0s
$ docker image ls ubuntu-volume
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu-volume latest fb0bf2bef8f7 20 seconds ago 77.9MB
Execução do container e criação de arquivo:
$ docker container run -it ubunt
u-volume /bin/bash
root@924bad832a21:/app#
root@924bad832a21:/app# ls
root@924bad832a21:/app# touch teste1.txt
root@924bad832a21:/app# ls
teste1.txt
Em outro terminal é possível verificar que nenhum volume foi criado:
$ docker volume ls
DRIVER VOLUME NAME
Saída do container:
root@924bad832a21:/app# exit
Exemplo utilizando volume sem mapeamento
Alteração do Dockerfile para utilizar volume:
/tmp/volume/volume$ vim Dockerfile
/tmp/volume/volume$ cat Dockerfile
FROM ubuntu:22.04
VOLUME /app
WORKDIR /app
Construção da imagem:
/tmp/volume/volume$ docker image build -t ubuntu-volume -f Dockerfile .
[+] Building 1.9s (7/7) FINISHED docker:default
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 80B 0.0s
=> [internal] load metadata for docker.io/library/ubuntu:22.04 1.8s
=> [auth] library/ubuntu:pull token for registry-1.docker.io 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [1/2] FROM docker.io/library/ubuntu:22.04@sha256:adbb90115a2 0.0s
=> CACHED [2/2] WORKDIR /app 0.0s
=> exporting to image 0.0s
=> => exporting layers 0.0s
=> => writing image sha256:beb3081df225027b6939d1b58f569c1d74e5 0.0s
=> => naming to docker.io/library/ubuntu-volume 0.0s
Inspeção da imagem criada:
/tmp/volume/volume$ docker image inspect ubuntu-volume
...
"Volumes": {
"/app": {}
},
...
Execução do container:
/tmp/volume/volume$ docker container run -it ubuntu-volume /bin/bash
root@a2fdfb0bc904:/app# ls
Criação de arquivo:
root@a2fdfb0bc904:/app# touch teste1.txt
root@a2fdfb0bc904:/app# ls
teste1.txt
root@a2fdfb0bc904:/app#
Verificação do volume criado:
$ docker volume ls
DRIVER VOLUME NAME
local ea53a4f651c1bfd71a90349ad6e56295a631db38815478dd0e882edf81d5b86f
Saída do container:
root@a2fdfb0bc904:/app# exit
exit
/tmp/volume/volume$
Inspeção do volume:
marcelo@Latitude5440:/tmp/volume/volume$ docker volume ls
DRIVER VOLUME NAME
local ea53a4f651c1bfd71a90349ad6e56295a631db38815478dd0e882edf81d5b86f
/tmp/volume/volume$ docker volume inspect ea53a4f651c1bfd71a90349ad6e56295a631db38815478dd0e882edf81d5b86f
[
{
"CreatedAt": "2024-08-25T13:45:06-03:00",
"Driver": "local",
"Labels": {
"com.docker.volume.anonymous": ""
},
"Mountpoint": "/var/lib/docker/volumes/ea53a4f651c1bfd71a90349ad6e56295a631db38815478dd0e882edf81d5b86f/_data",
"Name": "ea53a4f651c1bfd71a90349ad6e56295a631db38815478dd0e882edf81d5b86f",
"Options": null,
"Scope": "local"
}
]
/tmp/volume/volume$ sudo tree /var/lib/docker/volumes/ea53a4f651c1bfd71a90349ad6e56295a631db38815478dd0e882edf81d5b86f/_data
[sudo] password for marcelo:
/var/lib/docker/volumes/ea53a4f651c1bfd71a90349ad6e56295a631db38815478dd0e882edf81d5b86f/_data
└── teste1.txt
0 directories, 1 file
Criação de outro container e arquivo:
/tmp/volume/volume$ docker container run -it ubuntu-volume /bin/bash
root@52156328f538:/app# ls
root@52156328f538:/app# touch teste2.txt
root@52156328f538:/app# ls
teste2.txt
root@52156328f538:/app#
Um novo volume foi criado:
$ docker volume ls
DRIVER VOLUME NAME
local 17e2f044f185afc45705ca5a18ac893c0abf65fb216b0a4a12182dbd4cdc449f
local ea53a4f651c1bfd71a90349ad6e56295a631db38815478dd0e882edf81d5b86f
Inspeção do novo volume:
$ sudo tree /var/lib/docker/volumes/17e2f044f185afc45705ca5a18ac893c0abf65fb216b0a4a12182dbd4cdc449f
/var/lib/docker/volumes/17e2f044f185afc45705ca5a18ac893c0abf65fb216b0a4a12182dbd4cdc449f
└── _data
└── teste2.txt
1 directory, 1 file
Exemplo utilizando volume com mapeamento
/tmp/volume/volume$ docker container run -it -v ea53a4f651c1bfd71a90349ad6e56295a631db38815478dd0e882edf81d5b86f:/app ubuntu-volume /bin/bash
root@7f06006f1374:/app# ls
teste1.txt
$ docker container inspect 7f06006f1374
...
"Mounts": [
{
"Type": "volume",
"Name": "ea53a4f651c1bfd71a90349ad6e56295a631db38815478dd0e882edf81d5b86f",
"Source": "/var/lib/docker/volumes/ea53a4f651c1bfd71a90349ad6e56295a631db38815478dd0e882edf81d5b86f/_data",
"Destination": "/app",
"Driver": "local",
"Mode": "z",
"RW": true,
"Propagation": ""
}
],
...
$ docker inspect volume
[
{
"CreatedAt": "2024-08-25T13:45:06-03:00",
"Driver": "local",
"Labels": {
"com.docker.volume.anonymous": ""
},
"Mountpoint": "/var/lib/docker/volumes/ea53a4f651c1bfd71a90349ad6e56295a631db38815478dd0e882edf81d5b86f/_data",
"Name": "ea53a4f651c1bfd71a90349ad6e56295a631db38815478dd0e882edf81d5b86f",
"Options": null,
"Scope": "local"
}
]
$ sudo tree /var/lib/docker/volumes/ea53a4f651c1bfd71a90349ad6e56295a631db38815478dd0e882edf81d5b86f/
/var/lib/docker/volumes/ea53a4f651c1bfd71a90349ad6e56295a631db38815478dd0e882edf81d5b86f/
└── _data
└── teste1.txt
1 directory, 1 file
Last updated