Haut de page

Conseils pour utiliser Docker pour vos applications Atlassian


Publié par
Romain Lory

4 juillet 2018

Docker est un système lancé en 2013 permettant d’exécuter une ou plusieurs applications dans un environnement isolé (on parlera de container). Docker peut être exécuté sur plusieurs plateformes, initialement développé pour Linux, il a ensuite été porté sur OS X et Windows.

Docker est proposé sous deux distributions:

  • « Docker CE » (Docker Community Edition) qui est une distribution open-source sous licence Apache 2.0.
  • « Docker EE » (Docker Docker Enterprise Edition), qui est une distribution payante incluant des fonctionnalisées supplémentaires et du support. Elle est proposée sous trois niveaux : Basic, standard, Advanced.

Pourquoi utiliser Docker plutôt que la virtualisation classique ?

La virtualisation classique, telle qu’on la connait avec VMware ou d’autres solutions, permet aussi d’isoler des applications au sein de machines virtuelles (VM), mais pour cela, elle exécute au sein de la VM un système d’exploitation. Si on exécute 3 VM, alors 4 systèmes d’exploitation tournent (1 pour l’hôte et 1 pour chaque VM). Alors que Docker utilise uniquement le système d’exploitation de l’hôte.

Ceci a pour effet d’alléger considérablement le poids des containers Docker par rapport aux VMs, à la fois d’un point de vue de l’espace disque, mais surtout d’un point de vue des ressources système (RAM et Processeur).

Source: https://www.docker.com/what-container

L’autre avantage de Docker porte sur sa structure modulaire. En effet, le container est une exécution contextualisée d’une image. Ainsi, l’image peut être exécutée plusieurs fois dans des contextes différents, limitant ainsi grandement les tâches d’initialisation d’une nouvelle instance.

Applications supportées

Atlassian propose depuis fin 2017, des images sur le Hub Docker (https://hub.docker.com/u/atlassian/), construites à son initiative pour plusieurs produits, dont Confluence (à partir de la version 6.0.7). Néanmoins, Atlassian ne reconnait la compatibilité de Confluence avec Docker (Supported Plateforms) qu’à partir de la version 6.4. Rien n’est en revanche annoncé pour Jira à ce stade.

Mais je vous rassure, j’ai vu Jira fonctionner parfaitement sous Docker à plusieurs reprises. Cela nécessite la création de sa propre image.

Il faut cependant se poser la question du support Atlassian. En cas d’intervention du Support Atlassian, ils pourraient effectivement ne pas vouloir traiter le problème, justifiant que ce dernier peut avoir été causé par l’utilisation de Docker.

Les images fournies par Atlassian le sont à des fins de test. Elles sont construites autour de OpenJDK qui n’est pas supporté en production. Pour un usage en production, il sera donc nécéssaire de construire ses propres images.

Cas d’usage & niveau de personnalisation : Plateforme de test

Pour déployer un container Confluence, nul besoin de connaitre Docker. Il suffit d’installer Docker et d’exécuter les commandes documentées par Atlassian.

docker run -v /data/your-confluence-home:/var/atlassian/application-data/confluence --name="confluence" -d -p 8090:8090 -p 8091:8091 atlassian/confluence-server

 

Il est toujours possible d’ajouter facilement des paramètres tel que JVM_MINIMUM_MEMORY, JVM_MAXIMUM_MEMORY, …

docker run -e JVM_SUPPORT_RECOMMENDED_ARGS=-Djavax.net.ssl.trustStore=/var/atlassian/application-data/confluence/cacerts -v confluenceVolume:/var/atlassian/application-data/confluence --name="confluence -d -p 8090:8090 -p 8091:8091 atlassian/confluence-server

 

Suite à cette commande, une instance Confluence répond sur le port 8090 de votre hôte local (http://localhost:8090).

Détaillons un peu la première requête :

  • on fait appel au processus docker: docker
  • on définit l’action à exécuter: run 
  • on rend visible à notre hôte une partie de l’arborescence de Confluence: -v /data/your-confluence-home:/var/atlassian/application-data/confluence
  • on nomme le container pour mieux le reconnaître: –name= »confluence »
  • on expose le port 8090 interne au container sur le port 8090 de notre hôte: -d -p 8090:8090
  • de même pour le port 8091: -p 8091:8091
  • on définit l’image source qu’il faut utiliser : atlassian/confluence-server

La mise à jour n’a jamais été aussi simple

Pour mettre à jour la version de notre Confluence, rien de plus simple. On arrête Confluence.

docker stop confluence

On supprime le container Confluence. Les données (Confluence Home et la base de données) ayant été externalisées sur l’hôte, elles seront conservées.

docker rm confluence

On relance l’instance. L’image ayant été mise à jour, notre instance est maintenant à jour.

docker run -v /data/your-confluence-home:/var/atlassian/application-data/confluence --name="confluence" -d -p 8090:8090 -p 8091:8091 atlassian/confluence-server
Il n’est pas possible de modifier les fichiers contenus dans le container. Si un tel besoin apparaît, il faut effectuer la modification au niveau de l’image avant de la démarrer.

Pour aller plus loin

Il faut d’abord créer sa propre image. Il est possible d’utiliser le matériel fourni par Atlassian. Pour cela, il faut récupérer avec SourceTree le code source stocké dans Bitbucket : atlassian/docker-atlassian-confluence-server. L’essentiel du travail consiste ensuite à personnaliser le fichier Dockerfile.

Par exemple, pour mettre à jour Confluence avec la version 6.7.3 : « ARG CONFLUENCE_VERSION=6.7.3 » (ce qui installera la version 6.7.3 de Confluence au lieu de la 6.6.1)

On crée ensuite l’image et on relance le container :

cd /confluence_source
docker build -t confluence-server:latest .
docker stop confluence
docker rm confluence
docker run -v /data/your-confluence-home:/var/atlassian/application-data/confluence --name="confluence" -d -p 8090:8090 -p 8091:8091 confluence-server
 Beaucoup d’informations sont disponibles dans les tutoriels Docker, ainsi que dans le Confluence d’Atlassian dédié à la documentation (notamment sur comment passer l’image docker sur JDK).

Utiliser Docker en Production

Pour l’utilisation en production, nous l’avons vu, il faut donc créer ses propres images. Il y a ensuite plusieurs options intéressantes (même sur la version Docker CE et évidement encore plus sur la version EE) :

  • La clusterisation des Hôtes Docker facilite le partage des images et la haute disponibilité.
  • Docker propose également des déploiements en service permettant de redémarrer automatiquement en cas de redémarrage de l’hôte.
  • Docker permet des déploiements d’infrastructure (on peut par exemple déployer en une fois : un container MySQL, un container HTTPD, un container Jira et un container Confluence)

Industrialisation

En couplant Docker avec une plateforme IC/DC (telle quel Bamboo), il est possible d’automatiser la construction des images et le déploiement dans des containers de recettes, puis des containers de production.

Si on y ajoute Ansible pour effectuer les opérations de préparation de l’Hôte, nous obtenons une plateforme performante, sécurisée, facile à faire évoluer et peu gourmande en ressources.

Mon article vous donne une bonne vision des avantages à utiliser Docker et des conseils pour l’utiliser au mieux. Si vous avez des problématiques spécifiques, nous pouvons certainement vous aider car c’est notre métier. Contactez-nous pour discuter de vos projets.