Atualizar sem reconstruir tendo uma imagem boa/pronta?

Olá pessoal.

É possível atualizar para uma versão mais recente sem reconstruir tudo?

Estou pensando em um cenário onde dois aplicativos Discourse são virtualmente idênticos e, assim que eu tiver uma nova imagem pronta — de qualquer um dos dois — eu poderia usá-la para implantar o segundo Discourse, tendo toda a configuração/parâmetros para o contêiner.

Acho que a única coisa que resta para cuidar para tal contêiner seria a migração do banco de dados pg?

Isso faz sentido e, se for possível, como fazer isso, idealmente sem mexer em nenhum código-fonte?

muito obrigado, L.

Você pode construir uma imagem, enviá-la para um repositório e, em seguida, iniciá-la usando ./launcher start-cmd app para obter o comando docker para iniciar o contêiner (mas você substituirá seu repositório de contêiner pelo local).

E, no entanto, você precisa migrar o banco de dados, pré-compilar ativos e assim por diante.

Se o que você deseja evitar é o tempo de inatividade, a configuração de dois contêineres permite que você construa um novo contêiner enquanto o antigo continua em execução e, em seguida, ele lida com as migrações e coisas assim.

Se você quiser ser extra cauteloso, pode definir SKIP_POST_DEPLOYMENT_MIGRATIONS em seu app.yml e, em seguida, executar rake db:ensure_post_migrations db:migrate depois que o novo contêiner for iniciado. Não fazer isso pode migrar o banco de dados de forma que o contêiner antigo não possa mais usá-lo. Não é um problema com frequência, e então, não por muito tempo.

Tempo de inatividade não é um problema para mim.

Dois aplicativos que me vêm à mente seriam - virtualmente idênticos - mas não iguais.

Dois aplicativos seriam sites diferentes, ou seja, bancos de dados, volumes, portas, nomes diferentes… mas teriam o mesmo - por assim dizer - discurso base (+ mesmos plugins, o que for crítico para esse núcleo/base).

No mundo ideal do Discourse - se tal coisa ainda não existe - para tal cenário, tal nova imagem, uma vez construída pela primeira vez/uma única vez, poderia ser usada até mesmo diretamente com ferramentas docker - e o DB ou qualquer coisa que precisasse ser “migrada” para tal nova imagem/versão do Discourse, o processo de inicialização/boot desse contêiner “secundário” - talvez com a ajuda de variáveis de ambiente - decidiria verificar/executar as migrações necessárias dos dbs.

A principal vantagem - que muitos já devem ter pensado - é uma única imagem para ambos (ou muitos mais, se algumas pessoas fizerem isso) contêineres/aplicativos.

Você pode fazer isso como descrevi. Há também um novo esquema em desenvolvimento que possibilita o uso de uma única imagem e não a reconstrução. Não é suportado, então você precisará pesquisar bem aqui ou no github.