Gibmedia

Docker et l’héritage inter-conteneur

le 11 février 2015 dans Technique par Gibmedia

Docker est un système de conteneur Linux de plus en plus utilisé dans le monde du développement. Il est écrit en GO et nombreuses sont ses qualités (performance, isolation, etc…) , pour notre part ce qui nous a séduit et poussé vers son utilisation est la facilité à mettre en place un puissant système d’héritage inter-conteneur.

Cela est possible notamment grâce à l’instruction Docker « FROM ». Cette fonctionnalité est très intéressante pour rester le plus DRY possible.

Dans cet article, je n’exposerai pas l’installation ou la configuration de docker. Nous nous pencherons particulièrement sur le sujet de l’héritage inter-conteneur et notamment les Dockerfiles qui le paramètrent.

Pour l’installation et la configuration que nous n’aborderons pas, vous trouverez tout le nécessaire dans les liens suivants :

Ci-dessous le schéma de la hiérarchie des images que nous allons utiliser :

docker

Les Dockerfiles

Il s’agit de fichier de configuration constitués d’instructions propres à Docker (exemple : FROM, RUN) et de commandes propres à l’environnement concerné (exemple : centos6, …) qui seront exécutées et qui permettent de monter un environnement dans son intégralité. C’est ici que vous ajouterez les commandes d’installation des composants et modules que vous désirez trouver sur vos images.

Dockerfile #1 : Base
FROM    centos:centos6
#on installe ci-dessous les repositories et applications communes et utiles à tous
RUN rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
RUN rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
RUN yum localinstall -y --nogpgcheck http://dl.iuscommunity.org/pub/ius/stable/CentOS/6/x86_64/ius-release-1.0-13.ius.centos6.noarch.rpm --enablerepo=epel

RUN yum install -y yum-plugin-replace
RUN yum -y install openssh-server
RUN yum -y install openssh-client

RUN yum -y install supervisor --enablerepo=epel
RUN mkdir -p /var/log/supervisor
RUN sed -i -e "s/^nodaemon=false/nodaemon=true/" /etc/supervisord.conf

#on boot supervisor
CMD ["/usr/bin/supervisord"]
Dockerfile #2 : LAMP
FROM    my-registry.com/base
#installation de LAMP
RUN yum -y install httpd mariadb --enablerepo=epel
RUN yum -y install php php-common php-gd php-pear php-devel\
    php-xml php-xmlrpc php-mbstring php-soap \
    php-pecl-memcache php-pecl-http1 php-intl php-mysql\
    curl curl-devel --enablerepo=remi
RUN yum --enablerepo=remi-php56,remi update -y php\*
RUN pecl install pecl_http
RUN yum install -y mysql --enablerepo=remi

# on ajoute httpd à liste des services à booter au démarrage
RUN echo [program:httpd] >> /etc/supervisord.conf
RUN echo 'command=/usr/sbin/httpd -DFOREGROUND' >> /etc/supervisord.conf
RUN echo >> /etc/supervisord.conf
EXPOSE 80
Dockerfile #3 : APP 1
FROM    my-registry.com/lamp
#la config propre à votre application ici…
Dockerfile #4 : APP 2
FROM    my-registry.com/lamp
#la config propre à votre application ici…
Dockerfile #n : APP n
FROM    my-registry.com/lamp
#la config propre à votre application ici…

Comme on peut le voir chaque image se base sur l’image mère grâce à la fameuse instruction « FROM ».

On utilise un registry docker appelé « my-registry.com » dans l’exemple pour partager beaucoup plus simplement les images de bases (Base et LAMP) .

De ce fait, si on veut installer une nouvelle extension PHP pour nos trois applications, on peut l’installer en le rajoutant avec une instruction « RUN » sur l’image mère (LAMP) et quelques build plus tard, le tour est joué !


Auteur : Jérémiah Valérie – Développeur chez Gibmedia

Laisser un commentaire