Dockerfiles de Picasoft
Ce dépôt centralise les Dockerfiles et autre ressources utilisées pour construire et déployer les images Docker tournant en production sur l'infrastructure de Picasoft.
Philosophie
Historiquement, Picasoft procède de la manière suivante :
- Construire ses Dockerfile à la main et les pousser sur un registre privé.
- Gérer un Docker Compose global par VM, qui contient la configuration et les secrets.
Cette approche pose plusieurs problèmes. Comment savoir ce qu'il y a dans une image, si on perd le Dockerfile ? Quel Dockerfile correspond à quelle version de l'image ? Si on perd l'accès à la machine, comment récupérer la configuration, remonter rapidement le service ? Comment versionner les changements de configuration ? Revenir à la version d'il y a deux semaines ?
L'objectif de ce dépôt est de rendre possible le déploiement de n'importe quel service Picasoft avec la procédure suivante :
- Cloner le dépôt
- Se rendre dans le répertoire du service
- Lancer un
docker-compose up -d
Son objectif secondaire est de pouvoir revenir à l'état antérieur d'un service. En versionnant toute la configuration nécessaire, revenir à une ancienne version du service revient à :
- Cloner le dépôt
- Checkout un commit quelconque
- Lancer le service normalement
Pour y arriver, il construit automatiquement les images de l'ensemble des services et les met à disposition sur un registre, avec une version. Mise à part les données à proprement parler du service, il n'y a donc aucune différence entre un service lancé sur une de nos machines et un service lancé à partir de ce dépôt sur une machine virtuelle quelconque, ce qui s'inscrit dans la philosophie Docker.
Contenu du dépôt
Ce dépôt contient toutes les ressources permettant de déployer les services que nous maintenons sur n'importe quelle machine virtuelle de l'infrastructure de Picasoft, sans prérequis.
Cela signifie que le bon fonctionnement d'un service n'est pas dépendant de la machine virtuelle sur laquelle on essaye de le lancer.
Ainsi, chaque service versionné sur ce dépôt contiendra :
- Un
Dockerfile
permettant de construire l'image, - Un fichier
docker-compose.yml
permettant de lancer le service, - Si possible, un ou des fichiers de configuration permettant de personnaliser le service selon nos besoins,
- Un fichier d'exemple de secrets (mot de passe...) nécessaire au lancement du service,
- Un
README.md
résumant les paramètres modifiables sur le dépôt, les mécanismes pour en rajouter, etc, - Pour les images maison, un
CHANGELOG.md
résumant les modifications faites au fil des version.
Il n'y a pas de Docker Compose global : chaque service a son propre Docker Compose.
Un exemple concret peut être trouvé au niveau de pica-mattermost ou pica-etherpad.
Mais je commence par où, bordel ?
Ce dépôt peut faire peur, mais pour la plupart des usages il est très simple à exploiter.
Je veux lancer un service existant sur une machine virtuelle
Si le service que vous souhaitez lancer est référencé sur ce dépôt, lisez la documentation de déploiement.
Je veux mettre à jour un service
Il faut pour cela utiliser la chaîne d'intégration de ce dépôt, qui construit automatiquement les images Docker. Lisez la documentation utilisateur de la chaîne d'intégration..
Je veux mettre en place un nouveau service
Il faudra d'une part respecter les conventions utilisées par la chaîne d'intégration.
Ensuite, il faudra jeter un oeil aux bonnes pratiques à l'oeuvre sur l'infrastructure de Picasoft.
Un dossier template prêt à copier est aussi disponible.
Je veux améliorer la chaîne d'intégration
Lisez la documentation "développeur" pour la chaîne d'intégration, qui rentre plus dans le détail.