Packager Tuleap dans un container Docker (partie 1)

Chez Enalean, nous utilisons des containers depuis le premier jour, il y a 3 ans (merci @christianbayle pour Centos 5 et 6, et les images LXC ). Nous savons à quel point c’est fiable tant pour les environnements de développement que ceux en production.
Docker est le nouveau venu en la matière et change la donne sur la façon dont les applications sont fournies aux étapes de dév et de production. Je ne vais pas refaire une introduction du Docker, il y en a partout sur le web et les meilleurs articles sont déjà sur https://docker.io. Je vais essayer de résumer les différentes choses que nous avons faites pour packager Tuleap pour Docker.

Avertissement: ceci est une première tentative et pour rendre les choses plus simple nous mettons tout dans un seul container. Si vous êtes déja un fan de docker, vous savez que ce n’est pas la façon dont les personnes de Docker voient le monde (elles poussent plus à adopter un container par application). Néanmoins, l’approche tout-en-un fonctionne bien et c’est une première étape.

Premier travail

Le premier travail a été fait par @Erwyn à un moment où l’image Centos n’était pas vraiment à jour, ni stable. La documentation était limité sur la façon “à la Redhat” de faire les choses. Une des astuce (non documentée) était d’autoriser manuellement le réseau:

RUN echo "NETWORKING=yes" > /etc/sysconfig/network

La partie web était presque fonctionnelle mais les éléments liés au système (git, backend) ne l’étaient pas.

Etape 1: Git, ssh et installation dans Dockerfile

Préparer le terrain: démons et supervisord

Au printemps, une nouvelle version de l’image Centos est apparue et nous avons tenté une nouvelle fois empaquetage

Cette fois, l’objectif était de faire tourner le backend de Tuleap (dépendant du cron) et Git (dépendant de sshd). Ca a été assez compliqué et surtout non documenté, les services refusaient de démarrer (ni avec /usr/sbin/service, init.d ni supervisord) ou, une fois démarrés, n’étaient pas fonctionnels. Pour les deux, la solution a été de mettre à jour la configuration PAM pour désactiver le module pam_loginuid.

 RUN yum install -y cronie; yum clean all RUN sed -i '/session    required   pam_loginuid.so/c#session    required   pam_loginuid.so' /etc/pam.d/crond  RUN yum install -y openssh-server; yum clean all RUN sed -i '/session    required     pam_loginuid.so/c#session    required     pam_loginuid.so' /etc/pam.d/sshd  

Une fois que cela était fait, tous les services fonctionnaient correctement.
La dernière étape pour avoir une image de base fonctionnelle était de traiter le problème avec supervisord. Supervisord est la façon recommandée (par Docker) pour lancer et gérer les démons à l’intérieur des containers. Souvenez-vous, un container s’arrete dès que le processus s’arrete, donc vous avez besoin de quelque chose qui lance le démon et conserve le premier plan, c’est supervisord.

Centos 6 a des paquets pour supervisord mais ils ne sont pas suffisamment à jour. Il manque des fonctionnalités clefs comme pidproxy, exigé pour la gestion de mysql, donc vous devez l’installer avec pip.

 RUN yum install -y python-pip && pip install pip --upgrade RUN pip install supervisor 

Cela nous amène à tuleap-base-image.

Installer Tuleap

Sur la base de cette image, vous pouvez installer les packages Tuleap.
La première version faisait juste une série de “yum install -y tuleap-???” suivi d’un setup.sh . Cette version était plutôt efficace: construire une image une fois et lancer un container de partout, sans étapes de configurations supplémentaire.

 ## Utiliser la distribution offcielle docker pour Centos ## FROM enalean/tuleap-base:1.0  ## Installer les dépendances ## RUN rpm --import https://apt.sw.be/RPM-GPG-KEY.dag.txt RUN rpm -i https://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm ADD rpmforge.repo /etc/yum.repos.d/  RUN rpm -i https://mir01.syntis.net/epel/6/i386/epel-release-6-8.noarch.rpm  ## Déployer Tuleap ## RUN yum install -y which redhat-lsb-core mysql-server openssh-server  ADD Tuleap.repo /etc/yum.repos.d/ RUN yum install -y tuleap RUN yum install -y tuleap-plugin-tracker RUN yum install -y tuleap-theme-experimental RUN yum install -y tuleap-theme-tuleap   RUN yum install -y tuleap-core-subversion RUN /sbin/service sshd start && yum install -y --enablerepo=rpmforge-extras tuleap-plugin-git  # Installer Tuleap RUN bash /usr/share/tuleap/tools/setup.sh --sys-default-domain=localhost --sys-org-name=Tuleap --sys-long-org-name=Tuleap  ADD supervisord.conf /etc/supervisord.conf  CMD ["/usr/bin/supervisord"]  EXPOSE 22 80 443  

Rien de bien sorcier jusqu’ici, avec seulement une astuce pour le plugin Git. Au moment de l’installation, nous avons de besoin de Gitolite et donc de SSH, d’où le fait que nous ayons eu besoin de relancer manuellement le service auparavant.
Une deuxième version est venue rapidement ensuite pour bénéficier de nos recettes Chef. Cette fois, le Dockerfile est encore plus simple.

 ## Utiliser la distribution officiel docker pour Centos ## FROM enalean/tuleap-base:1.0  # Installer Chef RUN yum install curl; yum clean all RUN curl -L https://www.opscode.com/chef/install.sh | bash  # Comes from ADD vagrant-tuleap /root/vagrant-tuleap  RUN /sbin/service sshd start && chef-solo -c /root/vagrant-tuleap/solo/solo.rb -j /root/vagrant-tuleap/solo/rpm.json  ADD supervisord.conf /etc/supervisord.conf  CMD ["/usr/bin/supervisord"]  EXPOSE 22 80 443  

Étant tant donné que chef synthétise tous les processus de configuration, le Dockerfile est maintenant simple comme bonjour.

A venir

Dans les prochains posts, je détaillerai comment nous avons géré les mises à jour des applications, la persistance des données et bien plus encore.

About the Author

How great is the challenge of creating economic value for a company with a libre software. I enjoy this! It encourages me to think business and communication in a disruptive way. I believe in the core value of FLOSS and agile spirit: open minded listening, transparency and co-creation. I'm Marketing Manager at Enalean.

Write Your Comment

6 + 19 =

You may use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Websites located at enalean.com and other enalean.com subdomains need to store and access cookies on your device. We need your acceptance. Get more information.

Yes, I agree No, I disagree