Par rapport à une machine virtuelle classique, Docker est une solution est plus légère, en terme de ressources. Les conteneurs apportent un gain significatif au niveau du stockage et la possibilité d'historiser les conteneurs.
Docker fourni aujourd'hui avec les docker files et docker-compose, un moyen de décrire les propriétés d'un conteneur, de le construire et de l'exécuter. Avec docker-compose on va pouvoir construire un ensemble de conteneurs, et donc on va pouvoir virtualiser des architecture n-tiers, applications micro-services et autres architectures découplées.
Avec un outils de provisionnement [Ansible, Puppet, Chef, etc...], on pourra disposer d'une infrastructure as code [IaC] que l'on pourra instancier sur un orchestrateur de conteneurs comme Kubernetes. Il sera aussi possible de reproduire de façon automatisée cet environnement chez un fournisseur cloud [OVH, GCP, etc...].
Installer Docker-CE sur le poste de travail
Télécharger Docker-CE :
https://store.docker.com/editions/community/docker-ce-desktop-mac
docker --version
docker info
1 - Les conteneurs
1.1 - Test de l'installation avec le conteneur hello-world
docker run hello-world
1.2 - Commande de bases
Liste des images téléchargées :
docker image ls
Liste de conteneurs (running, all, all in quiet mode) :
docker container ls
docker container ls --all
docker container ls -aq
1.3 - Création d'une image Debian 9 avec un Dockerfile
Création d'un dossier :
mkdir deb9
cd deb9
Création du fichier Dockerfile :
nano Dockerfile
FROM debian:latest
1.3.1 - Build d'une image
docker build -t debian .
Vérification de la présence de limage :
docker image ls
1.3.2 - Ajout de paquets et sauvegarde du conteneur
On souhaite ajouter des paquets à notre conteneur et sauvegarder une nouvelle image. Afin de pouvoir connecter ansible, on va activer la connexion ssh pour l'utilisateur root :
docker run -ti debian /bin/bash
apt-get update && apt-get upgrade
apt-get install nano ssh
nano /etc/ssh/sshd_config
Port 22
PermitRootLogin yes
Installation d'Ansible :
apt-get install ansible sshpass
Quitter le conteneur :
ctrl + d
Sauvegarde du conteneur :
docker commit ID_CONTAINER deb9/ansible
Exécution du conteneur :
docker run -ti deb9/ansible /bin/bash
1.4 - Exécution du conteneur
Avec accès en ligne de commande :
docker run -ti debian /bin/bash
Pour exécuter en tache de fond :
docker run -dt debian
Pour rendre le conteneur accessible depuis le sytème hôte :
docker run -dt -p 2222:22 -p 80:80 debian
On indique en premier le port du système hôte et en second le port du conteneur.
Arrêt du conteneur :
docker container stop CONTAINER_ID
1.5 - Arrêt et suppression des conteneurs
Arrêt de tous les conteneurs :
docker stop $(docker ps -a -q)
Suppression de tous les conteneurs :
docker rm $(docker ps -a -q)
1.6 - Suppression des images
Suppression de l'image locale :
docker rmi app/test:v1
Liste des images "dangling" :
docker images -f dangling=true
Les images "dangling" désignent celles qui n'ont pas de relation avec une image taggée.
Suppression des images dangling" :
docker images purge
1.7 - Partage d'une image sur hub.docker.com
Vous devez au préalable disposer d'un compte sur hub.docker.com et d'avoir créer un dépôt pour l'image qu'on souhaite partager.
docker login
Tag de l'image :
docker tag image username/repository:tag
exemple : docker tag debian user/test:v1
Chargement de l'image sur le dépôt :
docker push username/repository:tag
exemple : docker push user/app:v1
Pull de l'image depuis le dépôt :
docker run -p 80:80 username/repository:tag
exemple : docker run -p 80:80 app/test:v1
Important : Une quantité d'images sont téléchargeables sur le net, il est important de valider la fiabilité des sources et des configurations employés.