Les développeurs débutants rencontrent souvent des difficultés telles que des mises à jour, versions et déploiements de code inefficaces, ainsi que des problèmes de cohérence d’environnement. Un code qui fonctionne parfaitement dans l’environnement de développement peut générer des erreurs sur une machine différente. À l’ère du cloud computing, déployer du code avec des méthodes traditionnelles semble dépassé. Cet article de blog vous présente Docker.
Docker, basé sur le langage Go et open source sous licence Apache 2.0, est un moteur de conteneurs d’applications. Cette technologie de conteneurisation permet aux développeurs d’empaqueter leurs applications et dépendances dans des conteneurs légers et portables. Ces conteneurs peuvent être déployés sur n’importe quelle machine Linux populaire sans se soucier des différences d’environnement.

Docker vs Machines Virtuelles (VM)
Comme mentionné, Docker utilise la virtualisation. Lorsqu’on parle de virtualisation, les machines virtuelles (VM) viennent inévitablement à l’esprit. Les deux reposant sur la virtualisation, il est naturel de se demander quelles sont leurs différences. Examinons cela.
Tout d’abord, regardons un diagramme d’architecture de VM typique. Au-dessus de l’infrastructure (représentant le matériel sous-jacent), se trouve un hyperviseur. Agissant comme intermédiaire entre le serveur physique et les systèmes d’exploitation, il permet à plusieurs systèmes d’exploitation et applications de partager le matériel sous-jacent. Les machines virtuelles exécutent plusieurs systèmes d’exploitation distincts au-dessus du système d’exploitation hôte et utilisent l’hyperviseur pour accéder au matériel sous-jacent.
Si vous deviez exécuter trois applications isolées, vous créeriez trois machines virtuelles. Cela signifie que trois systèmes d’exploitation s’exécuteraient au-dessus de l’hyperviseur, entraînant une surcharge importante des ressources.

un diagramme d’architecture de VM typique
(Note : le diagramme devrait idéalement montrer un système d’exploitation hôte au-dessus de l’hyperviseur)
Docker, en revanche, est remarquablement léger. Son démon (Docker Daemon) remplace l’hyperviseur, s’exécutant directement sur le système d’exploitation. Le code source de l’application et ses dépendances sont empaquetés dans une image Docker. Le moteur Docker utilise ensuite cette image pour créer un conteneur. Différentes applications s’exécutent dans des conteneurs isolés.
De plus, le démon Docker communique directement avec le système d’exploitation pour allouer des ressources aux conteneurs Docker. Sans la surcharge d’un système d’exploitation complet, le temps de démarrage d’un conteneur passe de quelques minutes pour les machines virtuelles à quelques millisecondes pour les conteneurs Docker, améliorant considérablement l’efficacité et économisant de l’espace disque et d’autres ressources système.
Bien que Docker offre des avantages convaincants, il ne remplace pas complètement les machines virtuelles. Chaque technologie a ses forces. Les machines virtuelles excellent dans l’isolation de l’environnement d’exécution complet, couramment utilisées par les fournisseurs de cloud pour séparer les utilisateurs via des VM. Docker, quant à lui, isole généralement différentes applications.
Comment utiliser Docker
Installation de Docker (exemple sur CentOS 7)
- Installer les outils système essentiels :
yum install -y yum-utils device-mapper-persistent-data lvm2
- Mettre à jour le noyau et le cache yum :
yum update
yum makecache fast
- Installer Docker et le démarrer :
yum -y install docker-ce
systemctl start docker
- Tester si Docker est installé avec succès :
docker run hello-world
Si vous voyez “Hello from Docker” sur votre écran, félicitations ! L’installation est terminée.
Concepts
Avant d’approfondir Docker, passons en revue quelques concepts clés pour une expérience d’apprentissage plus fluide.
- Images Docker : une image Docker est un modèle utilisé pour créer des conteneurs Docker
- Conteneur Docker : Docker crée des conteneurs à partir d’images pour exécuter un ensemble d’applications indépendantes
- Registre Docker : dépôt de code pour sauvegarder les images
En général, nous téléchargeons l’image appropriée depuis un registre Docker et l’utilisons pour créer des conteneurs afin d’exécuter nos applications.
Exemples
Relions ces concepts à travers deux exemples courants pour illustrer comment utiliser Docker.
Installer Python avec Docker
Comme mentionné, la première étape pour utiliser un conteneur Docker est de télécharger l’image correspondante depuis un dépôt. Cela nous amène à la première commande de notre tutoriel :
docker search
- Objectif : Rechercher une image spécifique dans le dépôt d’images.
- Syntaxe :
docker search [OPTIONS] TERM - Exemple :
docker search python - Explication : Rechercher des images liées à Python dans le dépôt.
[root@novita ~]# docker search pythonINDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
docker.io docker.io/python Python is an interpreted, interactive, obj... 4356 [OK]
docker.io docker.io/django Django is a free web application framework... 856 [OK]
docker.io docker.io/pypy PyPy is a fast, compliant alternative impl... 196 [OK]
docker.io docker.io/kaggle/python Docker image for Python scripts run on Kaggle 125 [OK]
docker.io docker.io/arm32v7/python Python is an interpreted, interactive, obj... 38
docker.io docker.io/centos/python-35-centos7 Platform for building and running Python 3... 36
Nous choisirons l’image officielle avec le tag (version) 3.7.
docker pull
- Objectif : Tirer ou mettre à jour une image spécifiée depuis le dépôt d’images.
- Syntaxe :
docker pull [OPTIONS] NAME:TAG - Exemple :
docker pull python:3.7 - Explication : Télécharger l’image Python avec le tag 3.7 depuis le dépôt.
[root@novita ~]# docker pull python:3.7
Trying to pull repository docker.io/library/python ...3.7: Pulling from docker.io/library/python
5ae19949497e: Downloading [=============> ] 13.72 MB/50.38 MB
ed3d96a2798e: Download complete
f12136850781: Downloading [============================================> ] 8.789 MB/9.978 MB
1a9ad5d5550b: Downloading [==> ] 2.628 MB/51.77 MB
6f18049a0455: Waiting
ce39fa9d79d1: Waiting
Digest: sha256:d8718f4c8f28360c88d2d8b53681edb3c95e6a7bacedabd32eb5b1d120a75dc5
Status: Downloaded newer image for docker.io/python:3.7
Docker a maintenant téléchargé l’image spécifiée. Pour voir les images Docker existantes :
docker images
- Objectif : Lister les images locales.
- Syntaxe :
docker images [OPTIONS] [REPOSITORY[:TAG]] - Exemple :
docker images - Explication : Voir toutes les images Docker locales.
[root@novita ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/python 3.7 42d620af35be 6 days ago 918 MB
docker.io/rabbitmq 3-management 7aae48fa6ef6 7 days ago 179 MB
docker.io/golang latest f50db16df5da 9 days ago 774 MB
L’image python3.7 est présente. Créons un conteneur en l’utilisant.
docker run
Avant de créer le conteneur, parlons brièvement des ID. Dans Docker, les ID identifient de manière unique les images ou les conteneurs. Nous interagissons avec eux en utilisant “commande + ID”. Par exemple, dans le code précédent, l’ID de l’image python3.7 est 42d620af35be.
- Objectif : Créer un nouveau conteneur.
- Syntaxe :
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
Pour tester l’environnement Python, créons un fichier hello.py localement :
#!/usr/bin/python
import sys
print("Hello, Docker!")
print(sys.version) # Output the Python version number
En supposant que ce code est sauvegardé dans /root/code/python :
[root@novita python]# docker run -v $PWD:/usr/src/code -w /usr/src/code python:3.7 python hello.py
Hello, Docker!
3.7.4 (default, Jul 13 2019, 14:04:11) [GCC 8.3.0]
Détaillons cette commande :
docker run: Crée un conteneur.-v $PWD:/usr/src/code: Monte le répertoire local dans le conteneur Docker. Ici, il monte le répertoire où la commande est exécutée vers /usr/src/code à l’intérieur du conteneur. Les deux points séparent le chemin local du chemin du conteneur. Vous pouvez utiliser des chemins absolus à la place de $PWD.-w /usr/src/code: Définit le répertoire de travail du conteneur. Puisque le répertoire du code Python est monté dans /usr/src/code, nous le définissons comme répertoire de travail.python:3.7: Spécifie l’image. Vous pouvez utiliser l’ID de l’image à la place.python hello.py: Exécute cette commande dans le conteneur.
Expérience de réflexion : Si vous avez un fichier hello.go dans /root/data/ et que vous souhaitez l’exécuter en utilisant un conteneur Golang avec l’ID d’image f50db16df5da, quelle serait la commande ? (Indice : la commande pour exécuter du code Go est go run NOMDUFICHIER)
Installer MariaDB avec Docker
En supposant que vous savez maintenant rechercher et télécharger une image MariaDB, concentrons-nous sur son démarrage.Les services comme les bases de données nécessitent que les ports correspondants soient ouverts sur l’hôte. Comment faire cela avec Docker ? Nous utiliserons le mappage de ports, similaire au montage de répertoires.
[root@novita python]# docker run -d -v /data/mysql/:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 --restart unless-stopped 3a2ef06682ac
-d: Exécute le conteneur en arrière-plan.-p 3306:3306: Mappe le port 3306 du conteneur au port 3306 de l’hôte.-e MYSQL_ROOT_PASSWORD=123456: Définit le mot de passe root pour MariaDB à 123456.--restart unless-stopped: Redémarre automatiquement le conteneur s’il s’arrête de manière inattendue.3a2ef06682ac: L’ID de l’image pour créer le conteneur.
Vérifions maintenant si le service de base de données est en cours d’exécution :docker ps
- Objectif : Lister les conteneurs.
- Syntaxe :
docker ps [OPTIONS]
[root@novita ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
107b52416c13 3a2ef06682ac "docker-entrypoint..." 5 minutes ago Up 5 minutes 0.0.0.0:3306->3306/tcp quizzical_mcnulty
Ensuite, nous accéderons à l’environnement interne du conteneur.docker exec
- Objectif : Exécuter une commande dans un conteneur en cours d’exécution.
- Syntaxe :
docker exec [OPTIONS] CONTAINER COMMAND [ARG...] - Exemple :
docker exec -it 107b52416c13 bash - Explication : Accéder au conteneur avec l’ID 107b52416c13 et exécuter la commande
bash.
À l’intérieur du conteneur, vous pouvez interagir avec lui comme avec un environnement Linux classique. En utilisant les identifiants précédemment définis, vous pouvez accéder à MariaDB.
[root@novita ~]# docker exec -it 107b52416c13 bash
root@107b52416c13:/# mysql -u root -p123456
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 11
Server version: 10.4.6-MariaDB-1:10.4.6+maria~bionic mariadb.org binary distribution
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>
Vous avez maintenant appris les bases de Docker. Essayez d’explorer davantage.
Novita AI est la plateforme cloud tout-en-un qui donne vie à vos ambitions en IA. Grâce à des API parfaitement intégrées, du calcul sans serveur et une accélération GPU, nous vous offrons les outils rentables dont vous avez besoin pour créer et faire évoluer rapidement votre activité basée sur l’IA. Éliminez les problèmes d’infrastructure et commencez gratuitement - Novita AI fait de vos rêves d’IA une réalité.
