Actualizar uma aplicação em Docker é, em regra, descarregar a imagem nova e recriar o contentor. Os dados sobrevivem se estiverem num volume, e é aí que se ganha ou se perde tudo: o contentor é descartável, o volume não. Com uma cópia feita antes e uma versão fixada, actualizar é um procedimento calmo e que se desfaz. Este artigo supõe um VPS com o Docker e um projecto em Compose (exemplo).
O procedimento
| 1 |
Leia as notas da versão nova. O projecto publica o que mudou e o que obriga a passos extra (migrações, variáveis renomeadas). Saltar de várias versões de uma vez é onde costumam surgir problemas.
|
|
| 2 |
Faça a cópia da base de dados: docker compose exec -T db pg_dump -U appuser appdb > copia.sqlO -T é necessário para o > não receber lixo de um terminal. Para MariaDB ou MySQL, o equivalente é o mysqldump. Veja cópias e restauro.
|
|
| 3 |
Guarde também o ficheiro de configuração e o .env num sítio fora do servidor. A cópia de um volume e a do VPS inteiro estão em cópias de um VPS.
|
|
| 4 |
Fixe a versão que vai usar no ficheiro (image: nome:1.2.3 em vez de :latest). Assim sabe exactamente o que instalou e pode voltar atrás.
|
|
| 5 |
Descarregue e recrie: docker compose pull docker compose up -dO Compose só recria os serviços cuja imagem mudou. Os volumes mantêm-se.
|
|
| 6 |
Veja os registos e confira que a aplicação arrancou e que as migrações correram: docker compose logs -f --tail=100. Abra a aplicação e experimente uma operação real.
|
|
| 7 |
Limpe as imagens antigas só quando estiver satisfeito: docker image prune. Enquanto não limpar, voltar à versão anterior é só mudar o número e repetir o passo 5.
|
|
O que apaga dados e o que não apaga
| Comando |
O que faz |
Os dados? |
docker compose pull + up -d |
Descarrega imagens e recria os contentores que mudaram. |
Ficam, se estiverem em volumes. |
docker compose down |
Para e remove os contentores e a rede. |
Ficam. Os volumes não são tocados. |
docker compose down -v |
Faz o mesmo e remove também os volumes. |
Perdem-se. |
docker volume prune e docker system prune --volumes |
Removem volumes que nenhum contentor está a usar (conforme a versão e as opções, só os anónimos ou também os com nome). |
Perdem-se, se os contentores estiverem parados ou removidos. |
| Ficheiros escritos fora de um volume |
Vivem na camada do contentor. |
Perdem-se quando o contentor é recriado. |
|
Um volume «sem uso» é um volume sem contentor a correr. Depois de um docker compose down, o volume da sua base de dados não tem nenhum contentor ligado, e um prune feito nessa altura pode levá-lo. Antes de qualquer prune com volumes, veja a lista com docker volume ls e tenha cópia. Fora disso, não use --volumes.
|
|
A versão principal de uma base de dados não se muda mudando o número. Passar, por exemplo, de uma versão principal do PostgreSQL para a seguinte pede uma cópia (pg_dump) e uma restauração para um volume novo. Para actualizações menores dentro da mesma versão principal, o procedimento acima chega.
|
|
Ensaie com uma cópia. Se a aplicação é importante, restaure a cópia numa pasta nova com outro nome de projecto, actualize lá, e só depois toque no que está no ar. E repare: actualizar o Docker e a aplicação é seu, num VPS não gerido: até onde vai o nosso suporte.
|
|
Algo correu mal na actualização e o servidor deixou de responder? Se é o VPS, a rede ou o acesso, trata-se connosco; diga-nos o que viu.
Abrir um pedido de suporte
|
PRODUTO RECOMENDADO Alojamento de sites com cPanel Domínio e SSL incluídos, cópias diárias e o painel que já conhece. desde 5.940,00 Kz/mês (plano de 3 anos, com cupão) Ver planos |