Table des matières

Activité : publier le service Web avec Docker

Pour rendre un service accessible, le conteneur doit être lancé en arrière plan.

Docker utilise la technique classique du mappage de port :

Docker dispose pour cela d’une interface réseau sur la machine hôte.

Sous Linux

ip a
…
docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
    link/ether 02:42:f6:de:8b:5b brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
...

Sous Windows

PS > ipconfig /all
...
Carte Ethernet vEthernet (WSL) :
 
   Suffixe DNS propre à la connexion. . . :
   Description. . . . . . . . . . . . . . : Hyper-V Virtual Ethernet Adapter
   Adresse physique . . . . . . . . . . . : 00-15-5D-61-F5-91
   DHCP activé. . . . . . . . . . . . . . : Non
   Configuration automatique activée. . . : Oui
   Adresse IPv6 de liaison locale. . . . .: fe80::a2f2:e355:be04:5818%80(préféré)
   Adresse IPv4. . . . . . . . . . . . . .: 172.30.16.1(préféré)
   Masque de sous-réseau. . . . . . . . . : 255.255.240.0
   Passerelle par défaut. . . . . . . . . :
   IAID DHCPv6 . . . . . . . . . . . : 1342182749
   DUID de client DHCPv6. . . . . . . . : 00-01-00-01-2A-76-DE-73-80-FA-5B-3F-40-3C
   Serveurs DNS. . .  . . . . . . . . . . : fec0:0:0:ffff::1%1
                                       fec0:0:0:ffff::2%1
                                       fec0:0:0:ffff::3%1
   NetBIOS sur Tcpip. . . . . . . . . . . : Activé
...

Une commande possible est la suivante :

docker run -d -p <IP:port-hôte:port-conteneur> --name <nom conteneur> <image> COMMANDE

Le paramètre permettant le mappage est -p <IP:port-hôte:port-container> :

Le principe est ensuite de lancer le conteneur sera lancé en arrière plan (sans laisser de console ouverte) en mode détaché : c’est l’option -d» qui permet cela.

Création d'un conteneur Apache

> docker run  -d -p 8080:8080 --name servweb bitnami/apache
02b1a1ec4cd35eaab20930ee9e9dcace4414874ec84811a262aeeee026a73ee5

Pour accéder au site par défaut en http à partir de n’importe quel poste :

Nous pouvons constater via la commande docker ps que l’attribut PORT est maintenant rempli :

...		PORTS				NAMES
PS C:\Users\Charles> docker ps
CONTAINER ID   IMAGE            COMMAND                  CREATED         STATUS         PORTS                              NAMES
1f8b8977e68b   bitnami/apache   "/opt/bitnami/script…"   4 minutes ago   Up 4 minutes   0.0.0.0:8080->8080/tcp, 8443/tcp   servweb
…

L’option -p peut être multiplié autant de fois que nécessaire (si par exemple il y a plusieurs services à exposer dans le conteneur).

Visualisation des ports ouverts (en écoute) sous Windows :

  • lancez le moniteur de ressources
  • Accédez à l'onglet Réseau puis sur le bouton Ports d’écoute.

Autre solution :

  • utiliser la commande netstat
netstat -abno | more
Get-NetTCPConnection

La persistance des données

Cela est pertinent pour construire une nouvelle image personnalisée mais pas pour utiliser le conteneur pour un service en ligne où les données sont modifiées sans cesse ou bien s’il est important de conserver certaines données comme les traces (logs).

Pour un site Web dynamique il est nécessite de disposer :

Le mécanisme le plus couramment utilisé avec Docker consiste à utiliser un stockage externe au conteneur et donc sur l’hôte ou sur n’importe quel autre support (baies SAN ou NAS) appelé volume de données.

Volume de données pour les pages Web

Le paramètre -v (volume) de la commande Docker permet :

De cette manière, une arborescence de fichiers du PC sera montée à l’intérieur du container permettant la publication du site Web utilisant le serveur Web Apache et le moteur de script php.

La commande à utiliser sera la suivante si les fichiers du site Web sont situés dans le dossier local c:\www\html\siteweb et les logs du serveur Apache externalisés dans le dossier c:\www\log\ :

docker run --name servweb -d -v c:\www\html\siteweb:/var/www/html -v c:\www\log:/var/log/apache2 -p 8001:80  php:8.1-apache

La commande à utiliser sera la suivante si les fichiers du site Web sont situés dans le dossier local /home/user/www/html/siteweb et les logs du serveur Apache externalisés dans le dossier /home/user/www/log :

docker run --name servweb -d -v /home/user/www/html/siteweb:/var/www/html -v /home/user/www/log:/var/log/apache2 -p 8001:80  php:8.1-apache

Le site Web est accessible à l'URL : http://localhost:8001

Toute page créée ou modifiée dans le dossier C:\www\html\siteweb est publiée dans le site Web.

Pour en savoir plus sur la gestion des volumes Docker :

Activité à faire

Mission 1 :

  • Créez un conteneur Docker à partir de l'image php:8.1-apache permettant d’accéder à la page Web du site Geststage.
  • Testez l’accès à la page d'accueil du site Geststage.

Mission 2 : Vous devez externaliser les logs du serveur Apache afin de pouvoir les consulter en cas de besoin et d'erreur de fonctionnement du site Web Geststage et du serveur.

  • Créez un conteneur Docker à partir de l'image bitnami/apache affichant la page Web par défaut et en configurant la persistance des logs en local en crééant un volume local pour le dossier /var/log/apache2 du conteneur.
  • Vérifiez la présence des fichiers de logs dans le dossier local (access.log ; error.log ; other_vhosts_access.log )

Mission 3 :

  • Lancez 2 conteneurs Docker (servweb1 et servweb2) à partir de l'image bitnami/apache permettant d’accéder à la page Web du site Geststage.
  • Testez l’accès à chacun des services Web.

Créer un conteneur personnalisé

L'image php:8.1-apache contient une configuration de php qui ne possède de pilote que pour gérer les accès à la base de données sqlite.

Pour pouvoir disposer d'une image contenant le serveur Web Apache mais aussi php configuré pour communiquer avec la base de données MariaDB, vous allez créer une nouvelle image à partir de l'image php:8.1-apache qui contiendra les pilotes nécessaires.

Dockerfile
FROM php:8.1-apache
RUN apt-get update && apt-get upgrade -y
RUN docker-php-ext-install mysqli && docker-php-ext-enable mysqli
RUN docker-php-ext-install pdo pdo_mysql
docker build -t charles/php .

Afficher les logs du conteneur

Si la persistance des logs en local n'est pas configurée, cette commande est utile notamment si la création du conteneur se passe mal et si l’accès au servoce Web n’est pas possible (cette commande ne renvoie rien dans ce cas si tout se passe bien).

docker logs servweb

Mémento Docker

Retour Accueil Docker