Installation et configuration de Docker : créer le premier conteneur
Docker est un outil Open Source qui nous permet d’effectuer une virtualisation légère, avec laquelle nous pouvons packager des environnements et des applications que nous pouvons ensuite déployer sur n’importe quelle machine sur laquelle la technologie Docker est installée sur son système. Pour ce faire, Docker étend LXC (Linux Containers), qui est un système de virtualisation qui permet de créer plusieurs systèmes totalement isolés les uns des autres, sur la même machine ou système hôte.
La principale différence entre une machine virtuelle et un conteneur Docker est que la machine virtuelle doit contenir l’intégralité du système d’exploitation, tandis qu’un conteneur Docker tire parti du système d’exploitation sur lequel il s’exécute. Le conteneur partage le noyau du système d’exploitation hôte, et même une partie de ses bibliothèques.
Du point de vue de la consommation du processeur et de la RAM, les conteneurs utilisent beaucoup plus efficacement le système hôte, n’utilisant ainsi que la mémoire et la capacité de calcul dont ils ont strictement besoin. C’est parce que le conteneur système partage le noyau et une partie des bibliothèques comme nous l’avons mentionné précédemment.
D’autres avantages notables d’utilisation seraient:
- Les instances démarrent en quelques secondes.
- Il est facile à automatiser et à mettre en œuvre dans des environnements d’intégration continue.
- De nombreuses images peuvent être librement téléchargées et modifiées.
Comme inconvénients, nous pouvons souligner:
- Il ne peut être utilisé nativement que dans des environnements Unix, bien qu’il puisse être virtualisé grâce à boot2docker sur OSX et Windows.
- Les images ne peuvent être basées que sur des versions Linux modernes (noyau 3.8 minimum).
- Comme il est relativement nouveau, il peut y avoir des erreurs de code entre les versions.
Images et conteneurs
Les termes à traiter avec Docker sont principalement 2, les images et les conteneurs. Les images pourraient être considérées comme un composant statique, car elles ne sont rien de plus qu’un système d’exploitation de base, avec un ensemble d’applications packagées. Un conteneur est l’instanciation ou l’exécution d’une image, pouvant exécuter plusieurs conteneurs à partir d’une même image.
Installation des dockers
Nous irons sur la page principale de Docker et téléchargerons la version correspondante pour notre système d’exploitation. Dans mon cas, je vais télécharger la version MacOS . Il suffit de faire glisser l’icône Docker dans notre dossier Applications.
Lorsque nous démarrons Docker pour la première fois, nous devrons mettre notre clé de démarrage sur le système pour des raisons de sécurité.
Une fois les étapes d’installation terminées, nous ouvrirons une fenêtre de terminal. Dans ce cas, nous exécuterons la commande Docker et la liste des options apparaîtra.
Étapes pour créer une virtualisation légère
Une fois que Docker est correctement installé, nous allons commencer à jouer avec, pour cela, nous allons sur Docker Hub , qui est un référentiel d’images préconfigurées prêtes à l’emploi (en d’autres termes, un GitHub d’images). DockerHub contient les images officielles de postgresql, redis, mysql, ubuntu, rabbitmq, sonarqube, mongodb, ainsi qu’une multitude d’images que les utilisateurs créent et téléchargent dans le référentiel.
Dans cet exemple, nous allons utiliser l’image officielle de sonarqube pour créer un conteneur avec Sonar installé. Dans le référentiel sonarqube , nous trouverons des informations relatives à l’image et à son utilisation, plus ou moins ce que nous allons décrire ci-dessous.
La première étape serait de télécharger l’image :
docker pull sonarqube
Nous pouvons lister les images que nous avons sur notre ordinateur avec la commande suivante :
docker images
Une fois que nous avons l’image, nous sommes prêts à instancier un conteneur à partir de celle-ci. Cette commande soulève un conteneur avec les paramètres suivants :
docker run -d --name sonarqube -p 9000:9000 sonarqube
- -d : Élever le conteneur en arrière-plan
- –Nom : Nom associé au conteneur
- -p : Nous cartographions le port 9000 de nos équipements avec les 9000 du conteneur
Nous pouvons vérifier les conteneurs qui sont levés :
docker ps
Pour accéder au sonar installé dans le conteneur, il suffirait d’ouvrir un navigateur avec l’URL http://localhost:9000.
docker inspect <containerID>
Nous pouvons maintenant accéder à notre sonar, comme vous pouvez le voir ci-dessous :
Et si nous avons besoin d’un autre sonar ? Bon, rien, on instancie à nouveau l’image pour créer un autre conteneur.
Il suffit de changer le nom et le mappage des ports, on revérifie les conteneurs actifs… et là nous avons nos deux conteneurs :
docker run -d --name sonarqube2 -p 7000:9000 sonarqube
docker ps
Nous pouvons accéder au nouveau sonar :
On peut arrêter un conteneur avec la commande «docker stop sonarqube», comme vous pouvez le voir ci-dessous :
On voit comment seul sonarqube2 resterait actif, on peut lister les containers quel que soit leur état avec :
docker ps -a
Pour supprimer un conteneur, nous devons exécuter la commande suivante :
docker rm sonarqube
docker rm sonarqube2
Il faut garder à l’esprit que, lors de la suppression d’un conteneur, nous perdrions les modifications que nous y avions apportées. L’une des options que nous aurions si nous voulions que les modifications que nous apportons au conteneur soient permanentes serait de générer une image à partir du conteneur, pour cela, nous procéderions comme suit :
docker commit -m "<comentario>" -a "<autor>" <id_contenedor> <nombre_imagen>:<etiqueta_imagen>
Dockerfile
Dans cette dernière section, nous allons voir comment créer une nouvelle image via un fichier appelé Dockerfile. Un Dockerfile est simplement un fichier texte qui nous permet de définir les instructions à suivre pour construire une image, autrement dit, c’est comme une recette pour créer nos images, qui serviront plus tard à faire fonctionner nos conteneurs.
Dans cet exemple nous allons créer une image avec un OS Ubuntu et nous allons installer le serveur web Apache, pour cela nous avons un Dockerfile :
FROM ubuntu
MAINTAINER Redes Zone
ENV http_proxy http://user:pass@proxy/
ENV https_proxy http://user:pass@proxy/
RUN apt-get update
RUN apt-get install apache2 -y
RUN echo "<h1>Apache with Docker</h1>" > /var/www/html/index.html
EXPOSE 80
ENTRYPOINT apache2ctl -D FOREGROUND
Décrivons les commandes Dockerfile :
- FROM : Indique l’image que nous prenons comme base, en l’occurrence l’image officielle d’Ubuntu
- MAINTAINER : Spécifie l’auteur de l’image.
- ENV : Nous définissons certaines variables d’environnement dans l’image de base.
- http_proxy http : // utilisateur : pass @ proxy / – On définit la variable http_proxy
- https_proxy http : // utilisateur : pass @ proxy / – On définit la variable https_proxy
- RUN : Exécute une instruction sur l’image de base
- apt-get update : mettre à jour les référentiels Ubuntu
- apt-get install apache2 -y : Installer Apache
- echo «<h1> Apache avec Docker </h1>»> /var/www/html/index.html : crée un fichier index.html
- EXPOSE : Nous exposons le port 80 du conteneur afin qu’il puisse être mappé par la machine hôte.
- ENTRYPOINT : Nous indiquons qu’apache2ctl -D FOREGROUND doit être exécuté à chaque démarrage du conteneur.
Une fois que nous avons défini le Dockerfile, nous allons construire l’image :
docker build –t redeszone / apache.
Nous disons à docker de créer une image avec le nom redeszone / apache à partir du DockerFile qui se trouve dans le même chemin où nous exécutons la commande.
Nous listons les images disponibles :
Nous sommes maintenant prêts à démarrer un conteneur à partir de l’image que nous avons créée :
docker run --name apache1 -d -p 90:80 redeszone/apache
Nous démarrons un conteneur, que nous appellerons apache1, mappant le port 80 du conteneur avec le port 90 de notre machine, à partir de l’image redeszone/apache.
Jusqu’à présent, nous sommes arrivés avec ce manuel Docker, comme vous l’avez vu, au début cela peut sembler un peu compliqué, mais une fois que nous connaissons l’essentiel, la virtualisation des conteneurs est vraiment facile, rapide et très efficace.