Tuto Docker | Démarrer avec Docker
Article publié le 09/02/2017
Mis à jour le 22/08/2018
Après pas mal de temps, j'ai enfin décidé à me mettre à étudier Docker. Étant très hésitant au départ, je me suis vite aperçu que Docker est un outil extrêmement puissant, flexible avec un potentiel Devops incroyable.
La question que se posent beaucoup de personnes est: qu'est-ce que c'est Docker? Contrairement à la virtualisation classique ou vous virtualisez l'intégralité de la machine et tout se qu'elle héberge, Docker n'héberge que les applications et les librairies!
I) Installation
Sous Debian:
On ajoute les dépôts docker et on installe:
sudo apt-get install apt-transport-https ca-certificates curl gnupg2 software-properties-common
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install docker-cesystemctl enable dockersystemctl start docker
Sous Centos:
On ajoute les dépôts docker et on installe:
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-cesystemctl enable dockersystemctl start docker
usermod -a -G docker <votre user>
II) Création d'un container
Dans l'exemple ci-dessous, on va chercher une image nginx:
docker search nginx
On rapatrie l'image sur notre machine :
docker pull nginx
On vérifie notre liste d'images:
docker images
On s’aperçoit que notre image nginx a bien été rapatrié:
On installe le container
docker run -d --name=ServeurNginx nginx:latest
On vérifie que le container est bien installé:
docker ps -a
On démarre notre container:
docker start <container id>
docker start 1f8b15c5b642
Nous allons maintenant inspecter la configuration de notre container afin de déterminer l'adresse IP local du container:
docker inspect <id du container>
Vous verrez toutes les informations de votre container et notamment un élément qui nous intéresse:
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
L'IP ci-dessus correspond à l'interface virtuel de votre container. Si vous tentez de vous connecter en HTTP via l'adresse de votre container, le serveur nginx hébergé dans votre container va répondre:
elinks 172.0.0.2
Bon j'imagine que vous allez me poser la question suivante: "comment on fait pour que notre container soit accessible de l'extérieur?"
Pour cela rien de plus simple, nous allons créer un deuxième container depuis l'image nginx avec quelques arguments en plus:
docker run -d -p 9876:80 --name=Webserver3 nginx:latest
Votre container sera joignable via le port 9876 depuis l'extérieur:
III) DockerFile
Il est possible avec Docker de créer un container à partir d'un fichier de configuration nommé Dockerfile.
Pour cela créer un fichier nommé Dockerfile.
Dans notre fichier nous allons créer un container Debian et installer un serveur apache2 accessible depuis l'extérieur.
Ci-dessous le contenu du Dockerfile
# ImageFROM debian:stable#Information sur le propriétaire du container
MAINTAINER [email protected]
# Commande RUN utilisé uniquement lors de la creation du container (necessite un docker build)
RUN apt-get update && apt-get upgrade -y && apt-get install -y apache2 telnet elinks openssh-server
# Creation variable
ENV VARIABLE ma-variable
# PORT 80 Ouvert
EXPOSE 80# On expose le port SSH pour pouvoir se connecter sur la machineEXPOSE 22
# Commande passé une fois le container créé (ne neccessite pas un docker build juste un run)
# Commande 1er arg 2eme arg
CMD ["/usr/sbin/apache2ctl","-D","FOREGROUND"]
docker build -t myapache .
docker run -d -P 9999:80 --name=Debianapache myapache:latest
IV) Autre commandes utiles
docker rm `docker ps -a -q`
docker start <container>docker stop <container>
docker rm `docker ps -a -q`
docker rmi <image>
docker run -it <votre container> /bin/bash
VI) Repository
Un tuto pour créer votre propre Registry Docker est disponible ici
VII) Docker Compose
Docker-compose est un outil officiel Docker absolument génial qui permet de gérer à 100% vos container uniquement un fichier de configuration yml. Cet outil est d’autant plus pratique si vos applications nécessite l’installation de plusieurs containers pour fonctionner.
Le tutoriel sur docker-compose est disponible ici:
VIII) Docker Swarm
Docker swarm est l'orchestrateur de container officiel Docker. Un tutoriel sur son déploiement est disponible:
IX) Registry Privé
Un tutoriel sur l'installation d'un registry privé Docker est disponible:
Tutoriel | Installation, configuration et utilisation d’un Docker Registry
X) Kubernetes
Kubernetes est un puissant orchestrateur de container extrêmement utilisé aujourd'hui. Un tutoriel sur son déploiement est disponible:
Tutoriel | Installez facilement un cluster Kubernetes sous Debian ou Centos
XI) Portainer
Portainer est un outil puissant permettant de gérer vos environnement Docker via une interface Web extrêmement simple d'utilisation:
Juste une précision pour ceux qui seraient tentés de prendre le raccourci docker = virtualisation = secure:
Docker = conteneurisation ≠ virtualisation
Conteneurisation = pas d’isolation
Une appli root du conteneur qui s’échappe = un attaquant root sur la machine physique
Ce n’est pas vraiment vrai.
Le root au sein d’un conteneur n’est pas le même root que sur l’hôte (merci les namespaces).
Il a moins de privilèges et ceux qu’il a ne sont pas suffisant pour mettre sérieusement à mal l’hôte.
https://docs.docker.com/engine/security/security/#linux-kernel-capabilities
Merci Monsieur Dahmane!
C’est très bien détaillé!
Cordialement,
Francis
a a l’air assez compliqué par rapport à photoshop… Moi qui pensait que Gimp est un logiciel plus simple %D *useless, pardon, je sort*
Merci pour ce tuto, ça sera utile ^^
___________________________________________________________________________________________
9AppsVidMateMobdro
Mon papi il était docker avant, maintenant il fait que la mintenance sur les bateaux
Merci pour ce super tuto qui me permet de mieux appréhender les bases de Docker.
J’ai fait le tour de beaucoup de tutos mais celui-ci est top!
Merci pour ce tuto super détaillé, j’ai découvert ton site en cherchant des tutos docker, tu es rajouté dans mes signets .
Bonne continuation 😉
Merci!
well explained tutorial 😀 thanks a alot
bonjour faute il faire en root ou creer un user ????
Les deux. Par défaut vous pourrez administrer Docker via le user root. Sinon rajoutez votre user dans le groupe docker
Merci, très bon Tutorial
thanks a lot for such nice tutorials.
bonjour faute il faire en root ou creer un user ????
Merci pour ce tuto super détaillé, j’ai découvert ton site en cherchant des tutos docker, tu es rajouté dans mes signets .
I discovered your site while looking for docker tutorials, you are added to my bookmarks.
Nice amazing and excellent info providing by your post about docker I really like to read it thank you so much for sharing with us.