Dans notre précédent article, on présentait la configuration de votre laptop pour débuter avec les Docker Host et Nutanix. Nous allons maintenant nous concentrer sur la création des premiers containers grâce à la commande : “docker run”.
Création de vos premiers containers
Hello-world
Avant de s’attaquer à la configuration avancée de containers, il est bon de commencer par des exemples simple et ludiques. Docker utilise une librairie d’images de containers stockée sur chacun des hôtes, si une image n’est pas disponible elle est automatiquement récupérée depuis le Docker Hub.
Ainsi, notre premier conteneur sera un simple container qui se nomme “hello-world” (capture suivante). Ce dernier nous retourne seulement un message après sa création puis s’arrête. Comment comprendre l’exécution du container ? Avec les commandes suivantes :
1 2 3 4 5 6 7 8 |
#Création de notre conteneur hello-world docker run hello-world #Lister tous les conteneurs qui sont "running" docker ps #Lister tous les conteneurs (ceux en exited ou dead) docker ps -a |
Notre conteneur nous affiche un message dans le cmd qui confirme sa bonne exécution. Cependant, la commande “ps” nous retourne aucun container, car celui-ci s’est terminé directement (visible grâce à la commande “ps -a”). En effet le status du container est en “Exited”, il s’est donc terminé correctement. La commande “ps” ou “ps -a” liste tous les attributs d’un container :
- Container ID : identifiant unique de chaque container
- Image : à partir de quelle image a été déployé le container (ex : ubuntu, apache, debian…)
- Created : date de création
- Status : container en exécution ou arrêté
- Ports : redirection de port entre votre container et votre Docker host
- Names : nom de votre container
On remarque dans notre précédente exécution du container que l’image n’était pas présente dans la librairie de notre Docker Host (“Unable to find […] locally”). Il va être automatiquement “pull” (téléchargé) depuis le Docker HUB en ligne. Aucune version de container n’a été précisé donc le “:latest” est choisit par défaut.
Container interactif
Dans cette section, nous allons utiliser un container qui ne s’arrête pas directement, il sera possible d’interagir avec ces derniers. Premièrement, nous allons déployer une image debian et interagir avec ce dernier.
Dans notre commande nous introduisons des arguments supplémentaires :
1 |
docker run -it --name debianPL debian |
- –name : permet de retrouver facilement notre élément dans un “docker ps”
- -i : cette option permet de créer un connexion interactive en accrochant le STDIN de l’OS
- -t : assigne un terminal à l’interieur de l’OS
Une fois que notre container en exécution, nous avons directement la main sur ce dernier (en root sans avoir à taper notre mot de passe). Dans les captures suivantes, on montre alors comment faire une simple install de “vim” à l’intérieur de notre nouveau debian (apt-get update & apt-get install vim).
En faisant un simple “touch demo.txt” puis “vi demo.txt”, on peux éditer un petit fichier texte. Une fois que vous avez terminé de jouer avec votre debian, faites un “exit” afin de retourner sur votre Docker Host.
Avec un “docker ps -a”, on peut voir que notre container s’est terminé directement. Mais alors comment fait-on pour qu’il continue en arrière plan ? Il suffit de rajouter l’option “-d”.
1 2 3 4 5 6 7 8 9 10 11 |
##Run in background docker run -dit --name debianPL debian ##Retrouver le STDIN docker exec -it debianPL /bin/bash ##Stopper manuellement le container docker stop debianPL ##Le supprimer docker rm debianPL |
Ainsi on peut différer la connexion à notre container, et même un “exit” ne termine pas l’exécution.
Container web-app
Pour aller un peu plus loin dans l’interaction avec un container, on déploie cette fois-ci une nouvelle image qui contient une page HTLM avec l’ID de votre container et une jolie image de la petite baleine Docker :). Cette image tournera en arrière-plan et publie sa page HTML sur le port 80 du container, mais comment accéder à ce port et comment fonctionne le réseau à travers le Docker HOST ?
Notre Docker Host fait du NAT avec ces containers, ainsi il faut spécifier une redirection de port entre le container et l’hôte sous-jacent. Cette action peut être automatique ou manuelle.
1 2 3 4 5 |
##Create container ### -d pour le background ### -P pour la redirection de port automatique docker run -dP --name helloPL dockercloud/hello-world |
On peut remarquer dans les captures suivantes la redirection automatique de port : “0.0.0.0:32768 -> 80”. Par défaut le port de sortie du container est sur le 80 mais il est redirigé vers le 32768, qui est accessible depuis un navigateur WEB en tapant cette adresse :
- http://IP-de-votre-Docher-Host:votre-port
Pour aller plus loin, suivez ces commandes :
1 2 3 4 5 6 7 8 9 |
##Essayez avec les commmandes afin de voir le résultat : ### -p pour spécifier le port manuellement docker run –dp 80:80 --name helloPLmanuel dockercloud/hello-world ### remonte les process du container docker top helloPLmanuel ### afficher les logs en cours (recharger votre page web pour voir de nouvelles lignes) docker logs -f helloPLmanuel |
Vous avez compris le principe de base du container Docker, faites de nombreux containers afin que toutes ces commandes soient familières et instinctives. La prochaine étape de notre démonstration sera la création de votre propre image Docker (et non standard depuis le Docker Hub).