• Home  / 
  • Docker
  •  /  Docker, découverte et mise en place

Docker, découverte et mise en place

By KrustyHack / a couple of years ago

Docker, qu’est-ce que c’est ?

Pour faire simple, Docker est un système de packaging d’applications. Léger, portable, rapide et distribuable il permet de placer dans un environnement un ensemble d’applications et de les utiliser ensuite sur différentes plateformes, serveurs, …

Par exemple, et ce sera le thème d’un article futur, nous désirons mettre en place un Metasploit sur notre serveur. Et bien Docker est là pour nous aider à la tâche. De plus, ceci nous permettra également de le déployer autre part sans craindre des problèmes de compatibilités système. Pratique !

Mais pour commencer, nous allons déployer un Nginx sur notre machine locale grâce à Docker.

Les prérequis

Pour pouvoir commencer il vous faut tout d’abord l’exécutable Docker. Vous pouvez l’installer facilement via curl get.docker.io | sh.

Une fois docker installé, tapez docker pour avoir une liste des commandes disponibles. Celles-ci sont assez explicites et faciles à utiliser.

Celles qui vont nous intéresser sont docker pull et docker run.

On commence

Première étape, il nous faut aller sur le répertoire des images Docker disponibles pour pouvoir chercher une image Nginx. Moi, j’ai pris celle-ci: https://registry.hub.docker.com/u/dockerfile/nginx/ pour la démonstration.

Ramener l’image chez soi

C’est bien beau d’avoir trouvé une image qui correspond à nos besoins, mais encore faut-il la ramener chez soi pour l’utiliser ! C’est là que docker pull nous est utile !

On tape donc docker pull dockerfile/nginx et hop, Docker va nous télécharger l’image. Cela peut prendre un certain temps selon la taille de l’image et la qualité de votre réseau.

╭─root@krustyhack ~ 
╰─➤ docker pull dockerfile/nginx
Pulling repository dockerfile/nginx
f0a28564d5f3: Download complete 
511136ea3c5a: Download complete 
c7b7c6419568: Download complete 
70c8faa62a44: Download complete 
d735006ad9c1: Download complete 
04c5d3b7b065: Download complete 
eba518419980: Download complete 
66dcd1a5a80b: Download complete 
36b611dedf15: Download complete 
2c408b961c19: Download complete 
c6c48617d3b8: Download complete 
4bd274e9ec62: Download complete 
46ae86358da7: Download complete 
1a6521fe4fc8: Download complete 
9127ba94bdb0: Download complete 
c7ecb0a77927: Download complete 
9ed6b075180e: Download complete 
b87ac0aa7faf: Download complete

Bon, notre image a fini d’être téléchargée, prochaine étape, lancer un container à partir de cette image.

Lancer un container

La commande qu’on pourrait lancer pour démarrer notre Docker Nginx serait, comme indiqué dans la page de l’image: docker run -d -p 80:80 dockerfile/nginx. Mais comme on aimerait bien pouvoir ajouter des vhosts à notre Nginx, ajouter des certificats ssl ou voir les logs, on va plutôt lancer docker run -d -p 80:80 -v <sites-enabled-dir>:/etc/nginx/sites-enabled -v <certs-dir>:/etc/nginx/certs -v <log-dir>:/var/log/nginx dockerfile/nginx.

Explication:

  • run dit à Docker que l’on veut démarrer l’image.
  • -d dit à Docker de détacher le container pour le faire tourner en background et d’en imprimer l’id.
  • -p 80:80 dit à Docker de binder le port 80 de notre container au port 80 de la machine hôte. On aurait bien évidemment pu faire -p 1234:80 ou même -p 0.0.0.0:1234:80 pour binder et écouter publiquement.
  • -v <sites-enabled-dir>:/etc/nginx/sites-enabled dit à Docker que le dossier /etc/nginx/sites-enabled de notre container sera le dossier <sites-enabled-dir> sur la machine hôte.
  • C’est similaire pour les autres -v. En fait on indique un ou plusieurs volumes lors du démarrage de l’image. Ca permet de partager des fichiers et dossiers entre la machine hôte et le container.
  • dockerfile/nginx indique à Docker le nom de l’image à démarrer. Ici, c’est celle que l’on vient de récupérer. Remarque, on aurait pu sauter l’étape du docker pull et faire directement un docker run ! Docker ce serait chargé de puller l’image pour nous.

Hop, on lance tout ça en modifiant bien évidemment les chemins des volumes à monter (, et ):

╭─root@krustyhack ~ 
╰─➤ docker run -d -p 80:80 -v /etc/nginx/sites-enabled:/etc/nginx/sites-enabled -v /etc/nginx/certs:/etc/nginx/certs -v /var/log/nginx:/var/log/nginx dockerfile/nginx
52f2eb1f9822de77d38496b86d34cc291829e25943dde84668699a2fed53a9da

Puis on fait un docker ps afin de lister les containers en fonctionnement afin de vérifier que notre container Nginx tourne correctement puis on curl localhost et là, miracle:

╭─root@krustyhack ~ 
╰─➤ docker ps
CONTAINER ID        IMAGE                     COMMAND             CREATED             STATUS              PORTS                         NAMES
52f2eb1f9822        dockerfile/nginx:latest   "nginx"             4 seconds ago       Up 3 seconds        443/tcp, 0.0.0.0:80->80/tcp   naughty_wilson
╭─root@krustyhack ~ 
╰─➤ curl localhost
Welcome to nginx on Debian!

Welcome to nginx on Debian!

If you see this page, the nginx web server is successfully installed and working on Debian. Further configuration is required. For online documentation and support please refer to nginx.org Please use the reportbug tool to report bugs in the nginx package with Debian. However, check existing bug reports before reporting a new bug. Thank you for using debian and nginx.

Notre container est prêt à l’utilisation ! Il suffit pour ça de rajouter nos vhosts dans le volume précédement spécifié et de redémarrer notre Nginx !

Conclusion

En peu de temps il est possible de déployer des applications sans problèmes (ou presque, comme d’hab’ :p) et de les transporter dans différents environnements. Comme ici je pourrais très bien aller déployer un Nginx sur un serveur X puis le déployer sur un serveur Y sans me soucier de problèmes de compatibilité de plateforme.

N’hésitez pas à parcourir le registry Docker qui est déjà bien fourni avec des images officielles et non officielles. Vous pouvez également construire votre propre image, mais ça, c’est pour un autre article !

P.S: pour ceux qui ont suivi mon 1er article sur SaltStack, sachez qu’il est possible de déployer des container Docker avec SaltStack !

Leave a comment: