Docker: Volumes

Como persistir os dados dos seus containers com volumes Docker

👋 Bem-vindo à documentação da Stackhero!

A Stackhero oferece uma solução Docker cloud CaaS (Containers as a Service) pronta a usar que proporciona uma série de benefícios, incluindo:

  • Implemente facilmente os seus containers em produção com apenas um docker-compose up.
  • Nome de domínio personalizável seguro com HTTPS (por exemplo, https://api.sua-empresa.com, https://www.sua-empresa.com, https://backoffice.sua-empresa.com).
  • Desempenho ótimo e segurança robusta alimentados por uma VM privada e dedicada.
  • Atualizações sem esforço com apenas um clique.

Poupe tempo e simplifique a sua vida: são necessários apenas 5 minutos para experimentar a solução de hospedagem cloud Docker CaaS da Stackhero e implementar os seus containers em produção!

Por design, os containers Docker são efémeros. Isto significa que qualquer dado armazenado diretamente neles será perdido quando o container for removido ou substituído por outra instância. Para garantir a persistência dos dados, os volumes Docker são a abordagem recomendada.

Não utilize bind mounts no Stackhero. Opte sempre por volumes Docker para evitar a perda de dados.

Os bind mounts envolvem ligar um diretório da VM host do Stackhero a um container. No entanto, se depender de bind mounts, atualizar a sua instância Stackhero for Docker resultará na perda de todos os dados armazenados desta forma.

Os bind mounts são geralmente especificados no comando docker run com uma sintaxe como -v /meuDiretório:/mnt (note o / inicial). Nos ficheiros Docker Compose, aparecem como volumes: /meuDiretório:/mnt. Proíba estas configurações ou perderá os seus dados.

Em vez disso, utilize volumes Docker, que são geridos pelo Docker e não referenciam caminhos absolutos.

Para resumir:

Abordagem incorreta:

docker run -it -v /meuDiretório:/mnt alpine

Abordagem correta:

docker volume create meuVolume
docker run -it -v meuVolume:/mnt alpine

Ao trabalhar com ficheiros Docker Compose:

Configuração incorreta:

services:
  meuServiço:
    image: alpine
    volumes:
      - /meuDiretório:/mnt

Configuração correta:

services:
  meuServiço:
    image: alpine
    volumes:
      - meuVolume:/mnt

volumes:
  meuVolume:
    name: meuVolume

Aqui está uma referência rápida para gerir volumes Docker:

  • Para criar um novo volume chamado meuVolume, execute:

    docker volume create meuVolume
    
  • Para listar todos os volumes existentes:

    docker volume ls
    
  • Para remover um volume específico chamado meuVolume:

    docker volume rm meuVolume
    

    Nota: Remover um volume eliminará permanentemente todos os dados armazenados nele, e não há maneira de os recuperar posteriormente.