Pour rendre un service accessible, le conteneur doit être lancé en arrière plan. Docker utilise la technique classique du mappage de port : un port de l’hôte va être redirigé vers un port du container.
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 service en même temps que le conteneur sachant que :
docker run -d -p 192.168.0.120 :22222:22 --name servssh ar/ubuntu:ssh /usr/sbin/sshd -D 055fec843da0d633a6b1f3777c1f3b192f0e31ee2d02ba962f81e155a052f3a3
Pour accéder au docker en ssh, à partir de n’importe quel poste :
ssh user@192.168.0.120 -p 22222 The authenticity of host '[192.168.0.120]:22222 ([192.168.0.120]:22222)' can't be established. ECDSA key fingerprint is SHA256:zQ1fPQmICgv7LU/vl/Cz+dOuIm2JmfwPl5tD9XbZtCA. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '[localhost]:22222' (ECDSA) to the list of known hosts. user@192.168.0.120's password: ...
Nous pouvons constater via la commande « docker ps » que l’attribut PORT est maintenant rempli :
... PORTS NAMES … 0.0.0.0:22222→22/tcp servssh
L’option « -p » peut être multiplié autant de fois que nécessaire (si par exemple il y a plusieurs services à exposer dans le conteneur).
Il s’agit d’une commande utile notamment si la création du conteneur se passe mal et si l’accès en ssh n’est pas possible (cette commande ne renvoie rien dans ce cas si tout se passe bien).
docker logs servssh
Travail à faire :
* créez un conteneur à partir de l'image ubuntu_nettools * Installez le serveur Web apache2. * Créez une nouvelle image (vos_initiales/ubuntu:apache2) à partir du conteneur modifié. * Lancez 2 conteneurs (servweb1 et servweb2) à partir de cette nouvelle image permettant d’accéder à la page Web par défaut d’Apache (le premier mappé sur le port 8001 et le deuxième mappé sur le port 8002). * Testez l’accès à chacun des services Web.