Mise à niveau sans reconstruction avec une bonne/prête image ?

Salut à tous.

Est-il possible de mettre à jour vers une version plus récente sans reconstruire le tout ?

Je pense à un scénario où deux applications Discourse sont pratiquement identiques et une fois que j’ai une nouvelle image prête – de l’une ou l’autre – je pourrais l’utiliser pour déployer la seconde application Discourse, en ayant toute la configuration/les paramètres pour le conteneur.

J’imagine que la seule chose à gérer pour un tel conteneur serait la migration de la base de données pg ?

Est-ce que cela a du sens et si oui, comment le faire, idéalement sans modifier le code source ?

Merci beaucoup, L.

Vous pouvez construire une image, la pousser vers un dépôt, puis la démarrer en utilisant ./launcher start-cmd app pour obtenir la commande docker afin de démarrer le conteneur (mais vous substituerez votre dépôt de conteneur par celui local).

Et pourtant, vous devez ensuite migrer la base de données, précompiler les actifs, et ainsi de suite.

Si c’est le temps d’arrêt que vous souhaitez éviter, la configuration à deux conteneurs vous permet de construire un nouveau conteneur pendant que l’ancien continue de fonctionner, puis elle gère les migrations et autres.

Si vous souhaitez être encore plus prudent, vous pouvez définir SKIP_POST_DEPLOYMENT_MIGRATIONS dans votre app.yml, puis exécuter rake db:ensure_post_migrations db:migrate après le démarrage du nouveau conteneur. Ne pas le faire peut migrer la base de données de telle sorte que l’ancien conteneur ne puisse plus l’utiliser. Ce n’est pas souvent un problème, et alors, pas très longtemps.

Le temps d’arrêt n’est pas un problème pour moi.

Deux applications auxquelles je pense seraient - virtuellement identiques - mais pas les mêmes.

Deux applications seraient des sites différents, ce qui signifie des bases de données, des volumes, des ports, des noms différents… mais elles auraient le même - pour ainsi dire - discours de base (+ les mêmes plugins, la même chose qui pourrait être critique pour ce cœur/cette base).

Dans le monde idéal de Discourse - si cela n’existe pas encore - pour un tel scénario, une nouvelle image une fois construite en premier/une seule fois, pourrait être utilisée même directement avec les outils docker - et la base de données ou tout ce qui devrait être « migré » vers cette nouvelle image/version de Discourse, le processus de démarrage de ce conteneur « secondaire » déciderait - peut-être avec l’aide de variables d’environnement - de vérifier/effectuer les migrations nécessaires des bases de données.

L’avantage principal - auquel beaucoup ont déjà dû penser - est une image unique pour les deux (ou beaucoup plus si certaines personnes font cela) conteneurs/applications.

Vous pouvez le faire comme je l’ai décrit. Il y a aussi un nouveau système en cours d’élaboration qui permet d’utiliser une seule image sans reconstruire. Il n’est pas pris en charge, vous devrez donc bien chercher ici ou sur github.