Activité : publier le service SSH d'une image Docker

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.

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> :

si l’adresse IP réelle de l’hôte n’est pas indiquée, le système n’écoutera que sur localhost ;

si le port de l’hôte à mapper n’est pas indiqué, Docker en choisira un automatiquement.

Le principe est ensuite de lancer le service en même temps que le conteneur sachant que :

le service doit être lancé en premier plan (par exemple /usr/sbin/sshd -D pour le service ssh)

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 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).

Afficher les logs du 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.

Retour Accueil Docker

Docker