Utiliser un autre outil que le dockerfile pour construire une image Docker
- 27/10/2016
Développement://
Utiliser un autre outil que le dockerfile pour construire une image DockerDans le cadre d'un projet, j'ai eu besoin de déployer Pentaho DI en l'emballant dans un container Docker pour faciliter le déploiement. Je manquais un peu de temps, et j'avais déjà écrit un playbook Ansible pour un déploiement serveur. La solution simple, un peu trichée, qui a été retenue fut :
- un Dockerfile minimaliste qui installe quelques paquets et un script entrypoint dans une image de base
- le script entrypoint qui lance le service Pentaho DI (qui n'est pas encore présent au moment de sa création)
- un inventaire Ansible qui précise l'option "ansible_connection=docker" derrière le nom du container
- un script bash qui construit l'image, lance un container, exécute le playbook pour installer le logiciel, puis exporte le container sous forme d'une nouvelle image
C'est cette dernière image qui servira à démarrer les containers.
Cette astuce me mène à l'idée qu'il est possible d'utiliser n'importe quel outil de provisionning ou scripting en lieu et place du script Dockerfile. Ansible est bien plus puissant et concis par exemple, et je peux utiliser des scripts existants pour fabriquer des images Docker. Il suffit ensuite d'avoir un serveur de build qui les construise et les pousse dans ma registry privée, et cela revient quasiment au même.
Le script de build ressemble à cela :#!/bin/bash
image=pentahodi_base
image_done=pentahodi_full
cnt=pentaho_cnt
source=<> #chemin contenant le zip de PentahoDI
pathAnsible=<> #dossier de mes playbooks Ansible
docker build -t $image .
docker kill $cnt 2>/dev/null
docker rm $cnt 2>/dev/null
docker run -d --name $cnt $image
echo "$cnt ansible_connection=docker" > inventory.txt
docker cp $sources/pdi-ce-6.0.1.0-386.zip $cnt:/space/pentaho/
ansible-playbook -i inventory.txt $pathAnsible/pentahodi/pentahodi.yml
docker exec -ti $cnt rm /space/pentaho/pdi-ce-6.0.1.0-386.zip
docker exec -ti $cnt rm /etc/apt/apt.conf.d/01proxy
docker commit $cnt $image_done
docker save $image_done | gzip > ~/pentahodi_complet.tgz
docker kill $cnt 2>/dev/null
docker rm $cnt 2>/dev/null
Rubriques des billets
- Agilité (22)
- Archerie (10)
- Avis (76)
- Cultures (26)
- Délires (44)
- Démocrachie (12)
- Développement (61)
- Développement web (36)
- Ergonomie (20)
- Geekerie (12)
- Inclassable (6)
- Informatique (27)
- Japon (9)
- Littératures (39)
- PHP (12)
- Poor Lonesome Coder (31)
- Régalons-nous (6)
- Sortons! (3)
- Travail (20)
- Vivre mieux (40)
- Voyages (4)
- Webmasteriat (20)
Commentaires(s)
Ecrire votre commentaire
27/10/2016 - Systeme