Article
· Sept 6, 2023 9m de lecture

Introduction à Docker - Partie 2 (Docker Compose, Docker File, Docker Volume)

Salut la communauté,


Dans mon article précédent, nous avons appris les sujets répertoriés ci-dessous :

  1. Qu’est-ce que Docker ?
  2. Certains des avantages de Docker
  3. Comment fonctionne Docker ?
  4. Image Docker
  5. Conteneur Docker
  6. Dépôt d'images Docker
  7. Dépôt d'images Docker d'InterSystems
  8. Installation de Docker
  9. Commandes de base de Docker
  10. Exécution de l'édition communautaire IRIS à l'aide de Docker
  11. Interface graphique du bureau Docker

Dans cet article, nous aborderons les sujets suivants

  1. Utilisation du fichier Docker Compose (un fichier YAML)
  2. Utilisation du fichier Docker (utilisé pour créer une image Docker)
  3. Utilisation du volume Docker

Alors commençons.

1. Utilisation du fichier Docker Compose (un fichier YAML)

Docker Compose est un outil développé pour aider à définir et partager des applications multi-conteneurs. Avec Compose, nous pouvons créer un fichier YAML pour définir les services, et avec une seule commande, nous pouvons tout faire tourner ou tout détruire.

Un gros avantage de l’utilisation de Compose est la possibilité de définir votre pile d’applications dans un fichier et de la conserver à la racine du dépôt de votre projet. Vous pouvez également permettre à quelqu’un d’autre de contribuer facilement à votre projet. Il leur suffirait de cloner votre dépôt et de démarrer l'application de composition.

Dans mon article précédent, nous avons utilisé la commande mentionnée ci-dessous pour créer et démarrer le conteneur avec l'image de la communauté InterSystems :

 

docker run -d -p 52773:52773 intersystemsdc/iris-community 

À ce stade, modifions cette commande et ajoutons un nom de conteneur, mappons plus de ports et définissons l'option de redémarrage

docker run -d -p 52773:52773 -p 53773:53773 -p 1972:1972 --name iris --restart=always intersystemsdc/iris-community

Permettez-moi de vous détailler la commande mentionnée ci-dessus

#commande docker run pour créer et démarrer le conteneur
docker run 
#-d est une option utilisée pour démarrer le conteneur en mode détaché
-d 
#-p -une option est utilisée pour mapper les ports
-p 52773:52773 
-p 53773:53773 
-p 1972:1972 
#nom du conteneur
--name iris 
#définir l'option de redémarrage sur toujours
--restart=always 
#image de base 
intersystemsdc/iris-community

Créer le fichier Docker Compose

Dans le dossier racine, créez un fichier nommé docker-compose.yml et écrivez les commandes mentionnées ci-dessus comme indiqué ci-dessous :

#spécifier la version de Docker-Compose
version: '3.6'
#détails des services/conteneur 
services:
  #Nom du conteneur
  iris:
    #Image de Base
    image: intersystemsdc/iris-community      
    #définir l'option de redémarrage
    restart: always
    #cartographie des ports
    ports:
      - 55036:1972
      - 55037:52773
      - 53773:53773

Le mappage de la commande docker run et d'un fichier docker-compose est illustré ci-dessous :Un capture écran de fichier Docker-compose est illustré ci-dessous :

Afin d'exécuter le code du fichier docker-compose, nous utiliserons la commande docker compose up :

docker compose up -d
  • -d ou --detach:  une option qui exécute la commande en arrière-plan et rend le contrôle au terminal.

Le conteneur est démarré. Exécutons la commande "docker ps" pour afficher la liste les conteneurs en cours d'exécution

Comme vous pouvez le constater, nous obtenons le même résultat avec le fichier docker-compose.

Créer et démarrer plusieurs conteneurs

Avec l'aide de docker-compose, nous pouvons non seulement exécuter plusieurs conteneurs, mais également les organiser et y ajouter plus de commandes.

Par exemple, dans le fichier docker-compose suivant, nous exécutons le conteneur MongoDB avec le conteneur IRIS :

#spécifier la version de Docker-Compose
version: '3.6'
#détails des services/conteneurs
services:
  #Nom du conteneur
  iris:
    #Image de Base 
    image: intersystemsdc/iris-community      
    #définir l'option de redémarrage
    restart: always
    #cartographie des ports
    ports:
      - 55036:1972
      - 55037:52773
      - 53773:53773
  
  #démarrer le conteneur MongoDB
  mongodb:
    image: mongo 
    ports:
    - 27017:27017 

Exécutons la commande docker compose up

Les conteneurs MongoDB et IRIS ont été créés et sont maintenant démarrés.

2. Le fichier Docker


Docker peut créer automatiquement des images en lisant les instructions d'un Dockerfile. Un Dockerfile est un document texte qui contient toutes les commandes qu'un utilisateur peut appeler sur la ligne de commande pour assembler une image.

Notre première question est donc simple : qu'est-ce qu'un Dockerfile ? C'est ce que Docker utilise pour créer l'image elle-même. Le Dockerfile contient essentiellement les instructions de construction expliquant comment créer l'image.

L'avantage d'un Dockerfile par rapport au simple stockage de l'image binaire est que les builds automatiques garantiront que vous disposez de la dernière version disponible. C'est une bonne chose du point de vue de la sécurité, car vous voulez vous assurer que vous n'installez aucun logiciel vulnérable.

Commandes courantes des fichiers Docker

Vous trouverez ci-dessous certaines des commandes Docker les plus couramment utilisées. Veuillez noter que toutes les commandes du docker doivent être en majuscules.


FROM 

La première est la commande FROM, qui indique sur quelle image était basée. C’est l’approche multicouche qui rend Docker si efficace et puissant. Dans ce cas, l'image Docker de la communauté IRIS a été utilisée, qui fait à nouveau référence à un fichier Docker pour automatiser le processus de construction.

FROM intersystemsdc/iris-community


WORKDIR

Cette commande est utilisée pour configurer un répertoire de travail dans lequel nous copierons les fichiers.
Par exemple, la commande mentionnée ci-dessous définira /opt/irisbuild comme répertoire de travail :

WORKDIR /opt/irisbuild

 

COPY

La commande COPY est aussi simple qu'elle en a l'air. Elle permet de copier des fichiers dans le conteneur.
Habituellement, nous copions des fichiers de configuration personnalisés, des fichiers sources d'applications, des fichiers de données, etc.

#copier Installer.cls à la racine du répertoire de travail. N'oubliez pas le point, en deuxième paramètre pour indiquer la cible
COPY Installer.cls .

#copiez les fichiers sources du dossier src vers le dossier src dans le répertoire de travail du conteneur Docker.
COPY src src

#copiez les fichiers sources du dossier data/fhir vers le dossier fhirdata dans le conteneur Docker.
COPY data/fhir fhirdata

 

ENV

Cela définit les variables d'environnement, qui peuvent être utilisées dans le Dockerfile et tous les scripts qu'il appelle.
L'instruction ENV définit la variable d'environnement <key> avec la valeur <value>

ENV USER_ID "SYSTEM"
ENV USER_PASSWORD "MANAGER"


RUN

La commande RUN  est utilisée pour exécuter des commandes pendant la phase de création d’image (la phase de build) :

#ici, nous donnons les droits à l'utilisateur et au groupe propriétaire d'iris qui exécutent IRIS.
RUN chown ${ISC_PACKAGE_MGRUSER}:${ISC_PACKAGE_IRISGROUP} /opt/irisapp   
#démarrage IRIS et exécution des instructions contenues dans le fichier iris.script 
RUN iris start IRIS \    
    && iris session IRIS < /tmp/iris.script

 

USER 

Par défaut, les conteneurs s'exécutent en tant que root, ce qui leur donne un contrôle total sur le système hôte. À mesure que la technologie des conteneurs évolue, des options par défaut plus sécurisées pourraient devenir disponibles. Pour l’instant, exiger root est dangereux pour les autres et peut ne pas être disponible dans tous les environnements. Votre image doit utiliser l'instruction USER pour spécifier un utilisateur non-root sous lequel les conteneurs doivent s'exécuter. Si votre logiciel ne crée pas son propre utilisateur, vous pouvez créer un utilisateur et un groupe dans le Dockerfile.

#here we switch user to a root to create a folder and copy files in docker.
USER root 

WORKDIR /opt/irisapp

#switching user from root to irisowner, to copy files
USER irisowner 

COPY src src

Pour plus de détails, veuillez lire la documentation officielle Docker

3. Volume du Docker

Un volume Docker est un système de fichiers indépendant entièrement géré par Docker. Il existe sous la forme d'un fichier ou d'un répertoire standard sur l'hôte où les données sont conservées.

Le but de l'utilisation des volumes Docker est de conserver les données en dehors du conteneur afin de les rendre disponibles pour la sauvegarde ou le partage.

Les volumes Docker dépendent du système de fichiers de Docker et sont les méthodes préférées de données persistantes pour les conteneurs et services Docker. Lorsqu'un conteneur est démarré, Docker charge la couche d'image en lecture seule, ajoute une couche en lecture-écriture au-dessus de la pile d'images et monte les volumes sur le système de fichiers du conteneur.

Nous utilisons l'option  -v ou --volume pour nous permettre de monter des fichiers locaux dans le conteneur.

Les volumes sont le mécanisme préféré pour conserver les données générées et utilisées par les conteneurs Docker. Alors que bind mounts dépendent de la structure des répertoires et du système d'exploitation de la machine hôte, les volumes sont entièrement gérés par Docker. Les volumes présentent plusieurs avantages par rapport aux montages liés :

  • Les volumes sont plus faciles à sauvegarder ou à migrer que les montages liés.
  • Vous pouvez gérer les volumes à l'aide des commandes Docker CLI ou de l'API Docker.
  • Les volumes fonctionnent sur les conteneurs Linux et Windows.
  • Les volumes peuvent être partagés de manière plus sûre entre plusieurs conteneurs.
  • Les pilotes de volume vous permettent de stocker des volumes sur des hôtes distants ou des fournisseurs de cloud, de chiffrer le contenu des volumes ou d'ajouter d'autres fonctionnalités.
  • Les nouveaux volumes peuvent avoir leur contenu pré-rempli par un conteneur.
  • Les volumes sur Docker Desktop ont des performances bien supérieures à celles des montages liés à partir d'hôtes Mac et Windows.

De plus, les volumes sont souvent une meilleure option que la persistance des données dans une couche inscriptible du conteneur, car un volume n'augmente pas la taille des conteneurs lors de son utilisation. De plus, le contenu du volume existe en dehors du cycle de vie d'un conteneur donné.

Volumes on the Docker host

Nous pouvons mentionner des volumes sous la section services dans le fichier docker-compose.

#spécifier la version de Docker-Compose
version: '3.6'
#détails des services/conteneurs
services:
  #Nom du conteneur
  iris:
    #Image de base
    image: intersystemsdc/iris-community      
    #définir l'option de redémarrage
    restart: always
    #cartographie des ports
    ports:
      - 55036:1972
      - 55037:52773
      - 53773:53773
    #création d'un volume du répertoire courant sur le répertoire /irisdev/app dans le conteneur
    volumes:
      - ./:/irisdev/app  

nous avons créé le volume irisdev/app.

Résumé

Docker est un outil puissant qui permet aux développeurs et aux équipes informatiques de créer, déployer et exécuter des applications dans un environnement conteneurisé. En offrant portabilité, cohérence, évolutivité, efficacité des ressources et sécurité, Docker facilite le déploiement d'applications dans différents environnements et infrastructures. Avec la popularité croissante de la conteneurisation, Docker devient un outil essentiel pour le développement et le déploiement de logiciels modernes.
Dans cet article, nous avons appris à utiliser Docker compose (un fichier YAML qui spécifie les options de configuration pour chaque conteneur de l'application), le fichier Docker (utilisé pour créer une image Docker) et le volume Docker (un mécanisme de stockage de données persistant exploité pour partager données entre les conteneurs Docker et la machine hôte.)

Merci pour la lecture!

Discussion (0)1
Connectez-vous ou inscrivez-vous pour continuer