Vous êtes sur la page 1sur 19

Définition de docker :

Docker est une plate-forme logicielle qui vous permet de


concevoir, tester et déployer des applications rapidement.
Docker intègre les logiciels dans des unités normalisées
appelées conteneurs, qui rassemblent tous les éléments
nécessaires à leur fonctionnement, dont les bibliothèques,
les outils système, le code et l'environnement d'exécution.
Avec Docker, vous pouvez facilement déployer et
dimensionner des applications dans n'importe quel
environnement, avec l'assurance que votre code
s'exécutera correctement.

C’est une solution open source, sécurisée et économique Quels sont


les différents éléments de Docker ? a plateforme Docker repose
sur plusi eurs technologies et composants. Voici les principaux
éléments.

Avant de découvrir Docker, vous devez comprendre ce qu’est un


conteneur. Il s’agit d’un environnement d’exécution léger, et d’une
alternative aux méthodes de virtualisation traditionnelles basées sur les
machines virtuelles.

L’une des pratiques clés du développement de logiciel moderne


est d’isoler les applications déployées sur un même hôte ou sur un
même cluster. Ceci permet d’éviter qu’elles interfèrent.

Pour exécuter les applications, il est toutefois nécessaire d’exploiter des


packages, des bibliothèques et divers composants logiciels. Pour
exploiter ces ressources tout en isolant une application, on utilise depuis
longtemps les machines virtuelles.

Celles-ci permettent de séparer les applications entre elles sur un même


système, et de réduire les conflits entre les composants logiciels et la
compétition pour les ressources. Cependant, une alternative a vu le
jour : les conteneurs.

La technologie du conteneur et Docker :

1
La technologie du conteneur n’est pas nouvelle, elle date des années 2000,
notamment avec les Linux Containers ou « LCX ». Docker est une surcouche
qui rend le développement et le déploiement des conteneurs beaucoup plus
simple tout en les standardisant. La première version de Docker 1.0 est très
récente mais son adoption par les plus grands comptes de l’informatique en fait
déjà un outil de référence.
Qu’est-ce qu’un conteneur ?
Un conteneur est une enveloppe virtuelle qui permet de packager une
application avec tous les éléments dont elle a besoin pour fonctionner : fichiers
source, runtime, librairies, outils et fichiers. Ils sont packagés en un ensemble
cohérent et prêt à être déployé sur un serveur et son OS.
Contrairement à la virtualisation de serveurs et à une machine virtuelle, le
conteneur n’intègre pas d’OS, il s’appuie directement sur le système
d’exploitation du serveur sur lequel il est déployé.

Cette technologie a été développée sur une base Linux, mais devrait être
rapidement disponible sous Windows Server

Les diferentes element de docker :

Docker Engine :

Le Docker Engine est l’application à installer sur la machine hôte pour


créer, exécuter et gérer des conteneurs Docker. Comme son nom
l’indique, il s’agit du moteur du système Docker.

C’est ce moteur qui regroupe et relie les différents composants entre


eux. C’est la technologie client-serveur permettant de créer et
d’exécuter les conteneurs, et le terme Docker est souvent employé pour
désigner Docker Engine.

On distingue le Docker Engine Enterprise et le Docker Engine


Community. La Docker Community Edition est la version originale,
proposée en open source gratuitement

Docker Daemon :

Le Docker Daemon traite les requêtes API afin de gérer les différents
aspects de l’installation tels que les images, les conteneurs ou les
volumes de stockage.

2
Docker Client :

Le client Docker est la principale interface permettant de communiquer


avec le système Docker. Il reçoit les commandes par le biais de
l’interface de ligne de commande et les transmet au Docker Daemon.

Dockerfile :

Chaque conteneur Docker débute avec un ” Dockerfile “. Il s’agit


d’un fichier texte rédigé dans une syntaxe compréhensible, comportant
les instructions de création d’une image Docker.

Un Docker file précise le système d’exploitation sur lequel sera basé


le conteneur, et les langages, variables environnementales,
emplacements de fichiers, ports réseaux et autres composants requis.

Les images Docker :

Une image Docker est un modèle en lecture seule, utiliser pour créer
des conteneurs Docker. Elle est composée de plusieurs couches
empaquetant toutes les installations, dépendances, bibliothèques,
processus et codes d’application nécessaires pour un environnement de
conteneur pleinement opérationnel.

3
La fonctionnement de docker :

Le fonctionnement de Docker repose sur le noyau Linux et les fonctions


de ce noyau, comme les groupes de contrôle cgroups et les espaces de
nom. Ce sont ces fonctions qui permettent de séparer les processus
pour qu’ils puissent s’exécuter de façon indépendante.

En effet, le but des conteneurs est d’exécuter plusieurs processus et


applications séparément. C’est ce qui permet d’optimiser l’utilisation de
l’infrastructure sans pour autant atténuer le niveau de sécurité par
rapport aux systèmes distincts.

Tous les outils de conteneurs comme Docker sont associés à un modèle


de déploiement basé sur une image. Ce modèle simplifie le partage
d’une application ou d’un ensemble de services entre plusieurs
environnements.

Pourquoi utiliser Docker

Docker vous permet d'envoyer du code plus rapidement,


de standardiser les opérations de vos applications, de
migrer aisément du code et de faire des économies en
améliorant l'utilisation des ressources. Avec Docker, vous
obtenez un objet unique que vous pouvez exécuter
n'importe où de manière fiable. Grâce à sa syntaxe simple,
Docker vous confère le contrôle total. Comme Docker est
adopté à grande échelle, il s'accompagne d'un solide
écosystème d'outils et d'applications standard.

ENVOYER PLUS DE LOGICIELS, PLUS VITE

En moyenne, les utilisateurs de Docker envoient 7 fois


plus souvent des logiciels. Docker vous permet d'envoyer
des services isolés aussi souvent que nécessaire.

4
STANDARDISATION DES OPÉRATIONS

Les petites applications conteneurisées facilitent le


déploiement, l'identification des problèmes et le retour à
une version antérieure pour leur résolution.

MIGRATION AISÉE

Vous pouvez effectuer facilement la migration des


applications basées sur des conteneurs Docker depuis vos
machines locales de développement jusqu'à des
déploiements dans l'environnement de production sur
AWS.

ÉCONOMIES CONSÉUENTES

Les conteneurs Docker vous permettent d'exécuter plus


facilement plus de code sur chaque serveur, améliorant
ainsi votre utilisation et vous faisant économise.

Le fonctionnement de Docker :

CgroupsSous Linux il existe deux systèmes de gestion des conteneurs :


OpenVz et cgroups (LXC). OpenVz est développé par une entreprise et n’est
pas directement inclus dans les distributions Linux. Le mode cgroups/LXC est
lié maintenant à Linux et incorporé dans le noyau, il est proposé dans toutes
les distributions récentes. Même si openVz possède des fonctionnalités non

5
présentes dans les cgroups (déplacement d’un conteneur à chaud entre deux
serveurs), c’est sur ce LXC qu’est basé Docker.
Grâce aux cgroups, Docker possède la couche de virtualisation de serveurs
nécessaire au fonctionnement des environnements virtuels, il va apporter la
couche de gestion, d’outils et des méthodes qui vont faciliter et même
révolutionner l’usage de cette technologie de virtualisation.
Docker Registry
Une des premières briques de Docker est son registre (registry). C’est une
bibliothèque d’images d’applications qui peut être publique, privée ou locale. Il
met à disposition les images, s’occupe du versionning de celles-ci, permet de
très facilement récupérer un conteneur en HTTP.
Docker demon client :
Il crée les environnements LXC sur le serveur, et s’occupe de paramétrer et
d’instancier le conteneur. On le pilote via une API RestFULL, qui offre une
grande souplesse dans la gestion des opérations (via un client local, un serveur
gestion de tous les conteneurs, etc.). C’est ce pilotage qui décuple la puissance
des conteneurs.
Dockerfile
C’est un fichier texte qui décrit la création d’un conteneur. Il permet d’avoir des
modèles de conteneur très personnalisables.

Les avantages de la solution de conteneurs/Docker

Nous voyons plusieurs avantages à l’utilisation de Docker dans les domaines du


Web mais aussi de l’IT. Les services IT proposent de plus en plus de services
orientés web, les conteneurs pourraient être un élément clef pour accélérer leurs
transitions vers le cloud.
Légèreté des conteneurs
Contrairement à un serveur virtuel sous Linux, le conteneur n’a besoin que de
quelques centaines Mo de disques. L’empreinte mémoire est aussi réduite, car
nous n’avons que de la mémoire utilisée pour l’application (pas de couche OS).
Il est ainsi plus rapide à démarrer mais aussi à déplacer d’une machine à une
autre.
Rapidité et facilité de déploiement des applications
Après la récupération d’un template, qui se fait en une commande, il suffit d’une
autre commande pour exécuter le conteneur, celui-ci démarre en quelques
secondes. On peut ajouter des paramètres lors du démarrage qui seront transmis
au conteneur. On va par exemple spécifier l’accès à la base de données ou
d’autres paramètres d’automatisation.
L’idéal reste la mise en place d’une gestion de configuration, grâce à elle, vos
conteneurs seront autonomes. On gère ses conteneurs comme on gère un

6
package logiciel, cette facilité permet au développeur de pouvoir provisionner
les environnements qui sont déployés en production par exemple sans
connaissance particulière d’infrastructures ou d’administration système.
Portabilité et multi cloud Il y a peu de formats d’enveloppes virtuelles qui
soient nativement multi-cloud. Il est toujours compliqué de récupérer sur sa
ferme VMware son POC fait sur AWS, ou encore migrer sa machine virtuelle
Openstack sur une Ressource Group Azure…
Avec Docker, vous pouvez, en quelques secondes, déployer votre test fait en
local sur votre poste, en production sur la très grande majorité des Clouds (pour
ne pas dire tous).
Orientation micro-services
Les nouvelles applications métiers, sites Web et nouvelles applications IT se
composent maintenant de micro-services, à l’inverse d’une application contenue
dans un seul serveur et une seule application.
On va trouver des serveurs HTTP, des serveurs de cache, des répartiteurs de
charge, des bases de données clés/valeurs, moteur d’API en nodejs….
Cette tendance répond à plusieurs objectifs :
 Améliorer l’élasticité d’une application,
 Augmenter la performance, chaque brique a un usage précis, dans laquelle
elle est optimisée,
 L’architecture logicielle est aussi orientée microservices, le déploiement en
continu est facilité car on n’impacte pas tout le code de l’application lors
d’une modification,.

Pour suivre ce tutoriel, vous aurez besoin des éléments suivants :

 Un serveur Ubuntu 20.04 configuré en suivant le guide de configuration


initiale de serveur Ubuntu 20.04, comprenant un utilisateur non root avec
privilèges sudo et un pare-feu.
 Un compte sur Docker Hub si vous souhaitez créer vos propres images
et les pousser vers Docker Hub, comme indiqué dans les Étapes 7 et 8.

Étape 1 — Installation de Docker

Le package d’installation Docker disponible dans le référentiel officiel


Ubuntu peut ne pas être la dernière version. Pour être sûr de disposer
de la dernière version, nous allons installer Docker à partir du référentiel
officiel Docker. Pour ce faire, nous allons ajouter une nouvelle source de
paquets, ajouter la clé GPG de Docker pour nous assurer que les
téléchargements sont valables, puis nous installerons le paquet. Tout
d’abord, mettez à jour votre liste de packages existante : Tout d’abord, mettez à jour

7
Ensuite, installez quelques paquets pré-requis qui permettent à apt d’utiliser les
paquets sur HTTPS :
1. sudo apt update
2.
Copy
Ensuite, installez quelques paquets pré-requis
qui permettent à apt d’utiliser les paquets sur
HTTPS :
1. sudo apt install apt-transport-
https ca-certificates curl
software-properties-common
2.
Copy
Ensuite, ajoutez la clé GPG du dépôt officiel
de Docker à votre système :
1. curl -fsSL
https://download.docker.com/linux/
ubuntu/gpg | sudo apt-key add -
2.
Copy
Ajoutez le référentiel Docker aux sources
APT :
1. sudo add-apt-repository "deb
[arch=amd64]
https://download.docker.com/linux/
ubuntu focal stable"
8
2.
Copy
Ensuite, mettez à jour la base de données des
paquets avec les paquets Docker à partir du
référentiel qui vient d’être ajouté :
1. sudo apt update
2.
Copy
Assurez-vous que vous êtes sur le point
d’installer à partir du dépôt Docker et non du
dépôt Ubuntu par défaut :
1. apt-cache policy docker-ce
2.
Copy
Vous verrez un résultat comme celui-ci, bien
que le numéro de version du Docker puisse
être différent :
Output of apt-cache policy docker-ce
docker-ce:
Installed: (none)
Candidate: 5:19.03.9~3-0~ubuntu-
focal
Version table:

9
5:19.03.9~3-0~ubuntu-focal
500
500
https://download.docker.com/linux/
ubuntu focal/stable amd64 Packages
Notez que le docker-ce n’est pas installé,
mais que le candidat à l’installation provient
du dépôt Docker pour Ubuntu 20.04 (focal).
Enfin, installez Docker :
1. sudo apt install docker-ce
2.
Copy
Le Docker devrait maintenant être installé, le
démon démarré, et le processus autorisé à
démarrer au boot. Vérifiez qu’il tourne :
1. sudo systemctl status docker
2.
Copy
La sortie devrait être similaire à ce qui suit,
montrant que le service est actif et en cours
d’exécution :
Output
● docker.service - Docker
Application Container Engine

10
Loaded: loaded
(/lib/systemd/system/docker.servic
e; enabled; vendor preset:
enabled)
Active: active (running)
since Tue 2020-05-19 17:00:41 UTC;
17s ago
TriggeredBy: ● docker.socket
Docs:
https://docs.docker.com
Main PID: 24321 (dockerd)
Tasks: 8
Memory: 46.4M
CGroup:
/system.slice/docker.service
└─24321
/usr/bin/dockerd -H fd:// --
containerd=/run/containerd/contain
erd.sock
L’installation de Docker vous donne
maintenant non seulement le service Docker
(démon) mais aussi l’utilitaire en ligne de
commande docker, ou le client Docker. Nous
allons voir comment utiliser la
commande docker plus loin dans ce tutoriel.

11
Étape 2 — Exécution de la commande Docker
sans sudo (facultatif)
Par défaut, la commande docker ne peut
être exécutée que par l’utilisateur root ou par
un utilisateur du groupe docker, qui est
automatiquement créé lors du processus
d’installation de Docker. Si vous essayez
d’exécuter la commande docker sans la faire
précéder de sudo ou sans être dans le
groupe docker, vous obtiendrez un résultat
comme celui-ci :
Output
docker: Cannot connect to the
Docker daemon. Is the docker
daemon running on this host?.
See 'docker run --help'.
Si vous voulez éviter de taper sudo chaque
fois que vous exécutez la commande docker,
ajoutez votre nom d’utilisateur au
groupe docker :
1. sudo usermod -aG docker ${USER}
2.
Copy
Pour appliquer la nouvelle appartenance au
groupe, déconnectez-vous du serveur et
reconnectez-vous, ou tapez ce qui suit :
12
1. su - ${USER}
2.
Copy
Vous serez invité à saisir le mot de passe
utilisateur pour continuer.
Vérifiez que votre utilisateur est maintenant
ajouté au groupe docker en tapant :
1. id -nG
2.
Copy
Output
sammy sudo docker
Si vous devez ajouter un utilisateur au
groupe docker pour lequel vous n’êtes pas
connecté, déclarez ce nom d’utilisateur
explicitement :
1. sudo usermod -aG docker
username
2.
Copy
La suite de cet article suppose que vous exécutez la
commande docker en tant qu’utilisateur dans le groupe docker. Si vous
choisissez de ne pas le faire, veuillez faire précéder les commandes
de sudo.
Examinons maintenant la commande docker.
Étape 3 — Utilisation de la commande Docker
L’utilisation de docker consiste à lui faire passer une chaîne d’options et
de commandes suivie d’arguments. La syntaxe prend cette forme :
13
1. docker [option] [command]
[arguments]
2.
Copy
Pour voir toutes les sous-commandes
disponibles, tapez :
1. docker
Pour voir les options disponibles pour une
commande spécifique, tapez :
1. docker docker-subcommand --help
2.
Copy
Pour voir les informations sur Docker à
l’échelle du système, utilisez :
1. docker info
2.

Étape 4 — Travailler avec des images Docker


Les conteneurs Docker sont construits à partir d’images Docker. Par
défaut, Docker tire ces images de Docker Hub, un registre Docker géré
par Docker,

1. docker run hello-world


2.
Copy
14
La sortie indiquera que Docker fonctionne correctement :

Output
Unable to find image 'hello-
world:latest' locally
latest: Pulling from
library/hello-world
0e03bdcc26d7: Pull complete
Digest:
sha256:6a65f928fb91fcfbc963f7aa6d5
7c8eeb426ad9a20c7ee045538ef34847f4
4f1
Status: Downloaded newer image for
hello-world:latest

Hello from Docker!


This message shows that your
installation appears to be working
correctly.

...
Vous pouvez rechercher des images disponibles sur Docker Hub en
utilisant la commande docker avec la sous-commande search. Par
exemple, pour rechercher l’image Ubuntu, tapez :
1. docker search ubuntu
2.
Copy
Le script va parcourir Docker Hub et retourner une liste de toutes les
images dont le nom correspond à la chaîne de recherche. Dans ce cas,
la sortie sera similaire à celle-ci :
15
Output
NAME
DESCRIPTION
STARS OFFICIAL
AUTOMATED
ubuntu
Ubuntu is a Debian-based Linux
operating sys… 10908
[OK]
dorowu/ubuntu-desktop-lxde-vnc
Docker image to provide HTML5 VNC
interface … 428
[OK]
rastasheep/ubuntu-sshd
Dockerized SSH service, built on
top of offi… 244
[OK]
consol/ubuntu-xfce-vnc
Ubuntu container with "headless"
VNC session… 218
[OK]
ubuntu-upstart
Upstart is an event-based
replacement for th… 108
[OK]
ansible/ubuntu14.04-ansible
Ubuntu 14.04 LTS with

16
...
Une fois que vous avez identifié l’image que vous souhaitez utiliser, vous
pouvez la télécharger sur votre ordinateur à l’aide de la sous-
commande pull.
Exécutez la commande suivante pour télécharger l’image officielle
d’ubuntu sur votre ordinateur
1. docker pull ubuntu
vous pouvez alors lancer un conteneur en utilisant l’image téléchargée
avec la sous-commande run. Comme vous l’avez vu avec
l’exemple hello-world, si une image n’a pas été téléchargée
lorsque docker est exécuté avec la sous-commande run, le client
Docker téléchargera d’abord l’image, puis lancera un conteneur en
l’utilisant.

Pour voir les images qui ont été téléchargées sur votre ordinateur,
tapez :
1. docker images
2.
Copy
La sortie ressemblera à ce qui suit :
Output
REPOSITORY TAG
IMAGE ID CREATED
SIZE
ubuntu latest
1d622ef86b13 3 weeks ago
73.9MB
hello-world latest
bf756fb1ae65 4 months ago
13.3kB

17
Étape 5 — Exécution d’un conteneur Docker
Le conteneur hello-world que vous avez exécuté à l’étape
précédente est un exemple de conteneur qui fonctionne et qui quitte
après avoir émis un message de test. Les conteneurs peuvent être
beaucoup plus utiles que cela, et ils peuvent être interactifs.
hell dans le conteneur :

1. docker run -it ubuntu


Étape 6 — Gestion des conteneurs Docker
Après avoir utilisé Docker pendant un certain temps, vous aurez de
nombreux conteneurs actifs (en cours d’exécution) et inactifs sur votre
ordinateur. Pour voir les actifs, utilisez :
1. docker ps
2.
Copy
Vous verrez une sortie similaire à celle-ci :
Output
CONTAINER ID IMAGE
COMMAND CREATED

Pour voir tous les conteneurs, actifs et inactifs, exécutez docker


ps avec le commutateur -a :
1. docker ps -a
Étape 7 — Transformation d’un conteneur en une image Docker :

Ensuite, effectuez les modifications dans une nouvelle instance d’image


Docker à l’aide de la commande suivante.

1. docker commit -m "What you did


to the image" -a "Author Name"

18
container_id
repository/new_image_name

L’énumération des images Docker affichera à nouveau la nouvelle


image, ainsi que l’ancienne image dont elle est issue :

1. docker images

Étape 8 — Pousser des images Docker dans un référentiel Docker :

19

Vous aimerez peut-être aussi