Docker Volume
Volume gerenciado pelo Docker
Volume não nomeado
Edição do arquivo compose.yaml:
~/compose$ vim compose.yaml
Arquivo compose.yaml com a inserção das linhas de volumes:
version: "3.8"
services:
postgre:
image: postgres:13.16
ports:
- 5432:5432
environment:
POSTGRES_PASSWORD: kubenews
POSTGRES_USER: kubenews
POSTGRES_DB: kubenews
volumes:
- postgre-docker-vol:/var/lib/postgresql/data
volumes:
postgre-docker-vol:
Destaque para:
volumes:
- postgre-docker-vol:/var/lib/postgresql/data
volumes:
postgre-docker-vol:
Derrubar o Compose Docker em execução:
~/compose$ docker compose down
WARN[0000] /home/marcelo/compose/compose.yaml: the attribute `version` is obsolete,
it will be ignored, please remove it to avoid potential confusion
[+] Running 2/2
✔ Container compose-postgre-1 Removed 0.5s
✔ Network compose_default Removed 0.8s
Remover o diretório do volume:
~/compose$ ls
compose.yaml postgre-vol
~/compose$ sudo rm -rf postgre-vol/
Subir novamente o Compose Docker com os volumes especificados:
~/compose$ docker compose up -d
WARN[0000] /home/marcelo/compose/compose.yaml: the attribute `version` is obsolete,
it will be ignored, please remove it to avoid potential confusion
[+] Running 3/3
✔ Network compose_default Created 0.1s
✔ Volume "compose_postgre-docker-vol" Created 0.0s
✔ Container compose-postgre-1 Started 0.3s
Lista o container e volume criado, e inspeção do container com o volume montado:
~/compose$ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
NAMES
7d30f5d42acf postgres:13.16 "docker-entrypoint.s…" About a minute ago Up About a minute 0.0.0.0:5432->5432/tcp, :::5432->5432/tcp compose-postgre-1
~/compose$ docker volume ls
DRIVER VOLUME NAME
local compose_postgre-docker-vol
~/compose$ docker container inspect 7d30f5d42acf | grep -Ei -C 5 "volume"
"Mounts": [
{
"Type": "volume",
"Name": "compose_postgre-docker-vol",
"Source": "/var/lib/docker/volumes/compose_postgre-docker-vol/_data",
"Destination": "/var/lib/postgresql/data",
"Driver": "local",
"Mode": "z",
"RW": true,
"Propagation": ""
--
"Volumes": {
"/var/lib/postgresql/data": {}
},
Volume nomeado
Derrubar o Compose Docker em execução
~/compose$ docker compose down
WARN[0000] /home/marcelo/compose/compose.yaml: the attribute `version` is obsolete,
it will be ignored, please remove it to avoid potential confusion
[+] Running 2/2
✔ Container compose-postgre-1 Removed 0.5s
✔ Network compose_default Removed 0.7s
Verificar os containers e volumes existentes:
~/compose$ docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
~/compose$ docker volume ls
DRIVER VOLUME NAME
local compose_postgre-docker-vol
Remover o volume existente:
~/compose$ docker volume rm compose_postgre-docker-vol
Editar o arquivo compose.yaml para inserir "name: postgre-vol":
~/compose$ vim compose.yaml
version: "3.8"
services:
postgre:
image: postgres:13.16
ports:
- 5432:5432
environment:
POSTGRES_PASSWORD: kubenews
POSTGRES_USER: kubenews
POSTGRES_DB: kubenews
volumes:
- postgre-docker-vol:/var/lib/postgresql/data
volumes:
postgre-docker-vol:
name: postgre-vol
Subida do Docker Compose:
~/compose$ docker compose up -d
WARN[0000] /home/marcelo/compose/compose.yaml: the attribute `version` is obsolete,
it will be ignored, please remove it to avoid potential confusion
[+] Running 3/3
✔ Network compose_default Created 0.1s
✔ Volume "postgre-vol" Created 0.0s
✔ Container compose-postgre-1 Started 0.3s
Lista do volume criado:
$ docker volume ls
DRIVER VOLUME NAME
local postgre-vol
Lista e inspeção do container com o volume montado:
~/compose$ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
90b7b387d3ad postgres:13.16 "docker-entrypoint.s…" About a minute ago Up About a minute 0.0.0.0:5432->5432/tcp, :::5432->5432/tcp compose-postgre-1
~/compose$ docker container inspect 90b7b387d3ad | grep -Ei -C 5 "volume"
"Mounts": [
{
"Type": "volume",
"Source": "postgre-vol",
"Target": "/var/lib/postgresql/data",
"VolumeOptions": {}
}
],
--
"Mounts": [
{
"Type": "volume",
"Name": "postgre-vol",
"Source": "/var/lib/docker/volumes/postgre-vol/_data",
"Destination": "/var/lib/postgresql/data",
"Driver": "local",
"Mode": "z",
"RW": true,
"Propagation": ""
--
"Volumes": {
"/var/lib/postgresql/data": {}
},
Volume externo
Derruba o Docker Compose em execução
~/compose$ docker compose down
WARN[0000] /home/marcelo/compose/compose.yaml: the attribute `version` is obsolete,
it will be ignored, please remove it to avoid potential confusion
[+] Running 2/2
✔ Container compose-postgre-1 Removed 0.5s
✔ Network compose_default Removed 0.7s
Lista e removo os volumes existente:
~/compose$ docker volume ls
DRIVER VOLUME NAME
local postgre-vol
~/compose$ docker volume rm postgre-vol
postgre-vol
Criação de volume para simular o volume externo:
~/compose$ docker volume create volume-externo
volume-externo
~/compose$ docker volume ls
DRIVER VOLUME NAME
local volume-externo
Edição do arquivo compose.yaml para utilizar "name: volume-externo" e "external:true":
~/compose$ vim compose.yaml
version: "3.8"
services:
postgre:
image: postgres:13.16
ports:
- 5432:5432
environment:
POSTGRES_PASSWORD: kubenews
POSTGRES_USER: kubenews
POSTGRES_DB: kubenews
volumes:
- postgre-docker-vol:/var/lib/postgresql/data
volumes:
postgre-docker-vol:
name: volume-externo
external: true
Para "external: true" o volume deve existir, e para "external: false" o volume não pode existir. Caso contrário serão exibidos erros de "volume não encontrado" e "volume já existente", respectivamente.
Subida do Docker Compose:
~/compose$ docker compose up -d
WARN[0000] /home/marcelo/compose/compose.yaml: the attribute `version` is obsolete,
it will be ignored, please remove it to avoid potential confusion
[+] Running 2/2
✔ Network compose_default Created 0.1s
✔ Container compose-postgre-1 Started 0.4s
Lista e inspeção do container criado com o volume externo montado:
~/compose$ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0975a117c23f postgres:13.16 "docker-entrypoint.s…" 36 seconds ago Up 35 seconds 0.0.0.0:5432->5432/tcp, :::5432->5432/tcp compose-postgre-1
~/compose$ docker container inspect 0975a117c23f | grep -Ei -C 5 "volume"
"Mounts": [
{
"Type": "volume",
"Source": "volume-externo",
"Target": "/var/lib/postgresql/data",
"VolumeOptions": {}
}
],
--
"Mounts": [
{
"Type": "volume",
"Name": "volume-externo",
"Source": "/var/lib/docker/volumes/volume-externo/_data",
"Destination": "/var/lib/postgresql/data",
"Driver": "local",
"Mode": "z",
"RW": true,
"Propagation": ""
--
"Volumes": {
"/var/lib/postgresql/data": {}
},
Last updated