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.
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 ...
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.
> 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 :
Autre solution :
netstat -abno | more
Get-NetTCPConnection
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.
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 :
Mission 1 :
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.
Mission 3 :
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.
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 .
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