Nous allons voir comment paramétrer les connexions réseaux et les partages de fichiers entre les conteneurs Docker, la machine virtuelle Linux et la machine physique Windows.
Nous prenons comme exemple un conteneur disposant d'un serveur SSH pour pouvoir s'y connecter depuis la machine virtuelle et depuis Windows. Nous créerons également un répertoire partagé entre Windows et la machine virtuelle et aussi avec le conteneur, ce qui permet de modifier les fichiers du répertoire du conteneur depuis le répertoire de Windows.
Tapper la commande suivante pour se connecter en SSH sur la VM via Vagrant :
Une fois connecté en SSH sur la VM, passer en utilisateur
Créer le fichier
avec le contenu suivant :
Se placer dans le répertoire
Lancer la commande de création de l'image
Vous devez avoir obtenu dans la sortie console la ligne suivante :
Tapper la commande suivante pour vérifier que l'image a bien été créée :
Cette commande retourne la liste des images qui doit contenir l'image
Recopier le numéro d'identifiant situé à la place de
, ce qui donne :
Lançons maintenant une connexion en SSH sur ce conteneur depuis la VM :
Une fois connecté en SSH, passer en
Revenir en tant qu'utilisateur
Le répertoire partagé
Modifier ce fichier via un éditeur dans Windows et enregistrer ce fichier
Dans la console SSH, lancer la commande suivante pour voir les modifications :
Nous nous déconnectons de la connexion SSH :
Nous sommes revenu sur la console de la VM
Aller dans le répertoire
Se déconnecter de la VM :
Nous sommes maintenant connecté en tant qu'utilisateur
Tapper la commande suivante pour voir le contenu du fichier
Quitter la connexion SSH :
Passer en utilisateur
Vérifier que le conteneur est en cours d'exécution :
Arrêter le conteneur que nous venons de lancer
Vérifier que le conteneur a été supprimé :
Supprimer le conteneur :
Nous prenons comme exemple un conteneur disposant d'un serveur SSH pour pouvoir s'y connecter depuis la machine virtuelle et depuis Windows. Nous créerons également un répertoire partagé entre Windows et la machine virtuelle et aussi avec le conteneur, ce qui permet de modifier les fichiers du répertoire du conteneur depuis le répertoire de Windows.
Pré-requis
Il est nécessaire d'avoir lu les articles suivants :
Installation
Il faut installer Vagrant et VirtualBox en suivant l'article suivant :
Nous avons la configuration suivante entre la machine virtuelle Linux et la machine physique Windows :
- Répertoires partagés :
- Le répertoire
vagrant-docker\data
dans Windows est mappé sur le répertoire/data
de la machine virtuelle ce qui permet d'éditer et de copier les fichiers depuis Windows - Connexions réseaux :
- L'adresse IP de la VM est :
192.168.33.10
sur Windows
Créer une image Docker contenant un serveur SSH
Le serveur OpenSSH va nous permettre de se connecter en SSH sur le conteneur démarré.Démarrer la VM et y accéder en SSH via Vagrant
- Ouvrir un terminal de commandes
- Tapper la commande suivante pour démarrer la VM via Vagrant :
vagrant up
vagrant ssh
- A la question 'passphrase', appuyer sur Entrée sans rien saisir
- Saisir le mot de passe :
vagrant
root
:sudo su
Création de l'image de conteneur SSH
- Créer un répertoire
images/ssh
dans le répertoire/data
mkdir /data/images mkdir /data/images/ssh
Dockerfile
dans le répertoire /data/images/ssh
:nano /data/images/ssh/Dockerfile
/data/images
:cd /data/images
ssh
: docker build -t ssh ssh
Successfully built [identifiant]
- , avec
[identfiant]
: l'identifiant de l'image qui vient d'être créée.
docker images
ssh
:REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE ssh latest [identifiant] 3 minutes ago 322.2 MB
[identifiant]
de l'exemple ci-dessusDémarrer le conteneur SSH
- Démarrer le conteneur à partir de l'image
ssh
: -
docker run -d -p 10022:22 -v /data/ssh:/data [identifiant]
- , avec les options :
-p 10022:22
: indique que le port 10022 de la machine physique est mappé sur le port 22 du conteneur-v /data/ssh:/data
: indique que le répertoire/data/ssh
de la machine virtuelle est monté en tant que répertoire/data
dans le conteneur.
- Nous obtenons l'organisation suivante :
- Répertoires partagés :
- Le répertoire
/data/ssh
de la machine virtuelle est monté en tant que répertoire/data
dans le conteneur. - Comme le répertoire
/data
de la machine virtuelle est lui-même partagé sur la machine physique Windows, le contenu du répertoire/data
du conteneur est disponible dans le répertoirevagrant-docker\data\ssh
dans Windows, ce qui permet de modifier et d'y copier des fichiers depuis Windows afin qu'ils soient directement disponibles dans le conteneur - Nous pouvons ainsi imaginer avoir un serveur Apache dans un conteneur avec le répertoire
www
contenant le contenu des sites Web qui soient directement acessibles sous Windows en développement et ainsi tester les impacts en temps réel sur un serveur Apache tournant sur Linux - Connexions réseaux :
- Le port 10022 de la machine physique est mappé sur le port 22 du conteneur
- Ainsi, nous pouvons ouvrir une connexion SSH directe entre Windows et le conteneur via le port 10022 de la machine virtuelle
- Tapper la commande suivante pour voir que le conteneur est cours de fonctionnement :
docker ps
PORTS : 0.0.0.0:10022->22/tcp
: ceci indique que le port 10022 de la machine hôte est redirigé vers le port 22 du conteneur
Accéder au conteneur en SSH depuis la VM
- Dans la VM, lancer la commande
ifconfig
pour récupérer l'adresse IP du conteneur :
$ ifconfig docker0 Link encap:Ethernet HWaddr f6:ff:cc:dd:aa:a8 inet addr:172.17.42.1 Bcast:0.0.0.0 Mask:255.255.0.0 inet6 addr: ff80::ee7d:eff:de44:eee0/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:21539 errors:0 dropped:0 overruns:0 frame:0 TX packets:22509 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:943006 (943.0 KB) TX bytes:41970172 (41.9 MB)
- L'adresse IP du conteneur est dans cet exemple :
172.17.42.1
ssh docker@172.17.42.1 -p 10022
- Le mot de passe est
docker
: c'est celui que nous avons défini pour l'utilisateurdocker
dans le fichierVagrantfile
root
:su root
- Le mot de passe est
docker
: c'est celui que nous avons défini pour l'utilisateurroot
dans le fichierVagrantfile
docker
:exit
Partage de fichiers entre le conteneur, Windows et la VM
- Nous allons maintenant ajouter un fichier dans le répertoire
/data
partagé avec la machine hôte :
echo "Hello" > /data/hello.txt
vagrant-docker\data\ssh
dans Windows contient maintenant ce fichier hello.txt
cat /data/hello.txt
- => Nous voyons que le partage de fichiers fonctionne entre le conteneur, la machine virtuelle et la machine physique Windows
exit
/data/ssh
qui contient maintenant le fichier hello.txt
exit
Accès au conteneur en SSH depuis Windows
- Nous sommes revenu sur le terminal de commandes de Windows
- Tapper la commande suivante pour se connecter en SSH au conteneur depuis Windows :
ssh docker@192.168.33.10 -p 10022
- Saisir le mot de passe
docker
docker
sur le conteneur via une connexion SSH ouverte depuis Windows vers la machine virtuellehello.txt
:cat /data/hello.txt
exit
Arrêt et suppression du conteneur
- Se reconnecter à la machine virtuelle :
vagrant ssh
- A la question 'passphrase', appuer sur Entrée sans rien saisire
- Le mot de passe est :
vagrant
root
:sudo su
docker ps
docker ps|sed "1 d"|grep "ssh:latest"|awk '{print $1}'|xargs docker stop
docker ps -a
docker ps -a|sed "1 d"|grep "ssh:latest"|awk '{print $1}'|xargs docker rm
Conclusion
Nous venons de voir un exemple de conteneur dont le port est mappé sur un des ports de la machine hôte de Docker. Ainsi il est possible de communiquer avec ce conteneur depuis la machine virtuelle et depuis l'extérieur de la machine virtuelle.
Nous avons également vu le partage de fichiers entre le conteneur, la machine virtuelle Linux et la machine physique Windows.
Nous avons également vu le partage de fichiers entre le conteneur, la machine virtuelle Linux et la machine physique Windows.