Labo 7 - Création d'images Nous allons voir dans cette exemple comment customiser une image officielle php. D'abord créons le conteneur et on se retrouve dans la console php du conteneur sudo docker run -ti php Nous allons utiliser Soap (qui permet de créer des web services) new SoapClient(); Nous voyons que le module Soap n'est pas présent sur l'image officielle de php téléchargée précédemment Pour l'installer, il faut d'abord se connecter au conteneur php en bash depuis un terminal de la machine hôte sudo docker exec -ti bash Pour trouver comment installer l'extension souhaitée, il faut aller sur le hub de docker dans explore, puis php Donc dans le terminal bash du conteneur docker-php-ext-install soap Visiblement il manque une librairie : libxml-2.0 Pour là trouver de retour dans le terminal bash du conteneur : apt update && apt-cache search libxml2 Puis faire apt install -y libxml2-dev Et maintenant relançons l'installation de soap docker-php-ext-install soap Si nous relançons la commande new SoapClient depuis le terminal php cela ne fonctionnera pas puisque php est déjà lancé et il n'a pas l'extension précédemment installée. Depuis le terminal bash, lançons d'abord php -a (pour se remettre en mode php, puis new SoapClient('http://webservices.oorsprong.org/webexamples.countryinfo/CountryInfoService.wso?WSDL'); Le webservice a été déplacé... mais cela n'empêche en rien la création de l'image. La création de l'image passe par un Dockerfile De retour dans le terminal hôte nous allons éditer un Dockerfile sudo vi Dockerfile Puis copier coller le texte dedans en sauvegardant FROM php:7.0.31-cli RUN apt update RUN apt install -y libxml2-dev RUN docker-php-ext-install soap Pour construire l'image, il faut sudo docker build -t php_soap:7.0.31 . build -> construction de l'image à l'aide du Dockerfile -t -> permet de donner un tag à notre image . -> chemin courant où se trouve le Dockerfile (pour un Dockerfile avec un nom personnalisé, il faut rajouter -f MonDockerFile .) J'ai choisi de personnaliser le nom de mon Dockerfile donc je lance la commande sudo docker build -t php_soap:7.0.31 -f MonDockerFile . On vérifie que l'image soit bien dans le cache : sudo docker images Testons notre image pour voir si le module soap a bien été installé : sudo docker run -ti php_soap:7.0.31 L'image customisée avec soap est bien présente ! Maintenant il est également possible de faire évoluer la version de notre image par exemple en 7.2.8 Modifions notre fichier customisé MonDockerFile sudo vi MonDockerFile sudo docker build -t php_soap:7.2.8 -f MonDockerFile . Même chose que plus haut, vérifions sudo docker run -ti php_soap:7.2.8 Cela a fonctionné. Il ne nous reste plus qu'à arrêter l'ancien conteneur et mettre en marche le nouveau