Dockerfile e depois escreve um manifesto que aponta para essa imagem e declara a porta, a memória, o healthcheck e as perguntas. Neste tutorial você empacota um pequeno app web que guarda um contador de visitas no disco persistente e termina com um template privado que qualquer pessoa da sua conta pode fazer deploy em poucos cliques.
Use um template de imagem quando o app precisar de outra linguagem ou versão, de pacotes do sistema, de um processo de inicialização próprio, ou quando você estiver empacotando um software pronto. Se o código-fonte puro basta, um template de código é mais simples e não usa vaga de imagem.
Antes de começar
A CLI da Vertra autenticada com uma chave de API que tenha os escopos
templates:read, templates:write e templates:deploy, mais os escopos que fazem build de imagens.Um plano que possa criar imagens Docker e templates privados (veja Planos e limites). Cada conta mantém até 5 templates privados.
Você conhece as regras das imagens Docker personalizadas: caminhos graváveis, usuário
1000:1000, a variável PORT e o que o build recusa.Toda imagem em uso ocupa uma vaga de imagem na conta que a usa, não importa quantos apps rodem a partir dela. Quando você faz deploy do seu próprio template, a imagem já é sua; quem o recebe por um link ganha a própria cópia e usa uma vaga cada.
Passo a passo
1
Escreva um app que siga as regras da plataforma
Uma imagem roda com o mesmo isolamento de qualquer aplicação: o sistema de arquivos raiz é somente leitura, o usuário é sempre O O
1000:1000, /app é o único disco persistente e o servidor precisa escutar na variável PORT. Crie esta pasta:server.js serve a página, conta as visitas em um arquivo em /app/data e responde /healthz para o healthcheck:server.js
Dockerfile mantém o programa fora de /app (tudo o que a imagem coloca em /app fica escondido pelo disco persistente quando o app roda) e não usa USER, VOLUME nem HEALTHCHECK, que a plataforma ignora ou recusa:Dockerfile
2
Faça o build da imagem na plataforma
O template não carrega o Encontre o id da imagem com
Dockerfile: ele referencia uma imagem que já existe na sua conta. Faça o build a partir da pasta:vertra image list. Espere até o build ficar success; uma falha mostra o motivo no log. Os arquivos .env* são removidos do contexto e o .dockerignore é respeitado. Cada build bem-sucedido vira uma nova versão da mesma imagem, com o mesmo id.3
Escreva o manifesto
Crie o Os campos que diferem de um template de código:
vertracloud.template.yaml. O valor de source.image é o id da sua imagem; troque o id de exemplo pelo seu:vertracloud.template.yaml
source.context e digests de imagem (@sha256:...) pertencem a templates do catálogo público, onde a imagem é fixada por digest e construída a partir da pasta do template. Em um template privado, a imagem da sua conta é a origem. O último tutorial mostra como um template privado vira um template do catálogo.4
Valide
validate não enxerga, como uma imagem que não é sua (IMAGE_NOT_FOUND) ou que ainda não foi construída (IMAGE_NOT_READY).5
Crie o template e faça o deploy
/healthz e imprime as saídas. Abra o endereço e recarregue: o contador deve subir. Reinicie o app pelo painel e recarregue de novo: o número sobrevive, porque o /app é persistente.6
Publique uma nova versão
Altere o código, execute
vertra image rebuild <image-id> --context ., espere o success, aumente version no manifesto e execute vertra template create --template hello-counter --changelog "Describe the change". A nova versão do template fixa a nova versão da imagem. Os apps criados a partir do template veem “New version available” e se atualizam quando o dono escolher, com um snapshot de segurança antes.Solução de problemas
Próximos passos
- Requisitos e plano: como
ram,webe a imagem definem o plano e as vagas exigidos. - Configurações de deploy: quando bloquear o blue-green e exigir rollback com dados.
- Boas práticas: onde ficam os dados, a raiz somente leitura, o usuário 1000 e a porta.
- Referência do manifesto: todos os campos de um serviço de app.
- Imagens Docker personalizadas: as regras de build, as versões e o rollback da própria imagem.
- Próximo tutorial: uma stack com Postgres e Redis.