Skip to main content

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

25.png

Nous allons utiliser Soap (qui permet de créer des web services)

new SoapClient();

26.png

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 <idduconteneur> bash

27.png

Pour trouver comment installer l'extension souhaitée, il faut aller sur le hub de docker dans explore, puis php

28.png

Donc dans le terminal bash du conteneur

docker-php-ext-install soap

29.png

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

30.png

Puis faire

apt install -y libxml2-dev

31.png

Et maintenant relançons l'installation de soap

docker-php-ext-install soap

32.png

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');

33.png

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 .

34.png

On vérifie que l'image soit bien dans le cache :

sudo docker images

35.png

Testons notre image pour voir si le module soap a bien été installé :

sudo docker run -ti php_soap:7.0.31

36.png

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

37.png

sudo docker build -t php_soap:7.2.8 -f MonDockerFile .

38.png

Même chose que plus haut, vérifions

sudo docker run -ti php_soap:7.2.8

39.png

Cela a fonctionné. Il ne nous reste plus qu'à arrêter l'ancien conteneur et mettre en marche le nouveau