Docker est un moyen de regrouper les applications et toutes leurs dépendances et configurations requises en une seule image. Essentiellement, cela transforme votre configuration de serveur en quelque chose qui peut être géré avec git
et synchronisé sur chaque machine.
Qu'est-ce que Docker et pourquoi est-il utile?
Docker facilite la gestion de la configuration de votre serveur de production. Plutôt que de configurer les serveurs manuellement, vous pouvez automatiser l'ensemble du processus à exécuter lorsque vous créez votre image de conteneur.
Cette image sera la même pour tous les membres de votre équipe, vous pourrez donc exécuter instantanément votre application avec toutes les dépendances requises gérées pour vous. Cela corrige également le problème classique «cela ne fonctionne pas sur ma machine», car les images Docker fonctionneront de la même manière partout.
Cette image peut également être facilement distribuée et exécutée sur une flotte de serveurs avec très peu d'impact sur les performances. Étant donné que Docker n'est pas une machine virtuelle, vous n'avez pas à gérer les frais généraux liés à l'exécution d'un système d'exploitation invité pour chaque application. Cela les rend bon marché et assez évolutifs.
Pour plus d'informations sur ce que fait Docker, et si vous devez ou non l'utiliser pour votre application, vous pouvez lire notre ventilation pour savoir si cela en vaut la peine. Pour l'instant, nous supposerons que vous êtes prêt à commencer et à plonger dans les détails techniques.
Créer un Dockerfile
Le point d'entrée pour la construction de votre conteneur est appelé Dockerfile. Créez un nouveau répertoire de projet pour héberger vos fichiers, puis créez un nouveau Dockerfile simplement nommé Dockerfile
sans extension:
toucher Dockerfile
Ouvrez ce fichier dans votre éditeur de texte préféré.
Vous ne voulez probablement pas tout recommencer à zéro, vous pouvez donc créer une image existante à partir du Docker Hub, comme Ubuntu:
DE ubuntu
Notez que même si vous le faites, vous devrez le faire De zéro
.
Pendant le processus de construction, Docker crée une «couche» modifiable que vous pouvez créer par-dessus. Vous êtes autorisé à copier des fichiers et à exécuter des commandes comme s'ils s'exécutaient sur la machine, de la même manière que pour la configuration manuelle d'un serveur. Vous ferez toute la configuration de votre serveur dans ce fichier, en automatisant essentiellement le processus que vous passeriez si vous allumiez une boîte Linux vierge et qu'on vous demandait de la mettre en production. Cela peut prendre du temps.
Vous pouvez exécuter la plupart de ces commandes à partir de la ligne de commande et configurer l'image manuellement. Si vous souhaitez obtenir un shell bash dans un conteneur, vous pouvez exécuter:
docker exec -it/ bin / bash
Et enregistrez vos modifications avec:
docker commit
Cependant, vous ne devez l'utiliser que pour les tests et effectuer toute votre configuration réelle dans un Dockerfile.
Commandes Dockerfile
Nous allons parcourir la plupart des commandes courantes et expliquer leur utilisation et les meilleures pratiques pour les appliquer. Pour une référence plus étendue, vous pouvez consulter ce cheatsheet, ou consultez le «Meilleures pratiques pour écrire des Dockerfiles» entrée de documents.
COPIE
le COPIE
L'instruction est assez simple: elle vous permet de remplir votre image Docker avec des données et une configuration.
COPIE
Par exemple, si vous aviez un dossier dans votre répertoire de projet appelé / config / nginx /
qui contenait votre nginx.conf
, sites disponibles /
et d'autres répertoires, vous pouvez copier cela vers l'emplacement de configuration par défaut de nginx dans votre conteneur:
COPIE / config / nginx / / etc / nginx /
De cette façon, vous pouvez conserver tous vos fichiers de configuration nginx dans le même répertoire de projet que tout le reste, ce qui signifie qu'ils seront contrôlés en version avec git
à côté du reste de votre code.
COURIR
le COURIR
exécute une commande dans votre conteneur et enregistre les modifications apportées au système de fichiers du conteneur.
Commande RUN
Chaque exécuter la commande crée une nouvelle «couche», vous voudrez donc probablement effectuer une configuration compliquée dans un script d'installation. Vous devrez copier ce script sur l'image, puis l'exécuter:
COPY install.sh. RUN ./install.sh
Dans ce script, vous êtes libre de faire toute configuration dont vous avez besoin, y compris l'installation de programmes à partir de apte
.
Si vous souhaitez réduire les temps de construction de votre conteneur, vous pouvez créer un conteneur de base avec tous les programmes dont vous avez besoin déjà installés, puis créer votre conteneur principal DE
ce conteneur, mais vous devrez ensuite gérer les dépendances et la configuration séparément.
CMD
CMD
définit l'exécutable utilisé par votre conteneur au démarrage si rien d'autre n'est spécifié. C'est ainsi que vous chargerez votre application une fois que tout sera terminé.
Exécutable CMD
Seulement le dernier CMD
la commande prend effet. Vous pouvez remplacer le CMD
au démarrage avec la syntaxe suivante:
Docker Run Containable Executable (Args)
POINT D'ACCÈS
POINT D'ACCÈS
est une version spéciale de CMD
qui permet au conteneur de fonctionner comme un exécutable. Par exemple, si tout le conteneur est exécuté nginx
, vous pouvez spécifier nginx
comme le POINT D'ACCÈS
:
ENTRYPOINT nginx
Et puis exécutez ce conteneur sur la ligne de commande, en passant des arguments comme arguments au point d'entrée:
conteneur runer docker (args)
EXPOSER
Expose marque certains ports de conteneur comme ouverts à l'hôte en cours d'exécution. Par exemple, si vous utilisez un serveur Web, vous souhaiterez probablement
EXPOSE 80
Cela ne lie pas automatiquement le port, mais il informe le runtime Docker que le port est disponible. Pour le lier, vous voudrez utiliser le -P
flag (majuscule) sans argument pour lier tous les ports exposés.
Exécuter votre application
Tout d'abord, vous devrez créer votre image:
docker build -t conteneur.
Vous pouvez exécuter votre conteneur avec docker run
:
conteneur de docker run
Cependant, ce n'est pas trop utile en soi, car il n'y a aucun moyen d'interagir avec lui. Pour ce faire, vous devrez lier des ports à l'aide de l'indicateur -p, comme ceci:
docker run -p 3000: 80 nginx
Cela exécute la nginx
conteneur et lie la sortie HTTP du conteneur au port 3000 sur la machine locale.
Cependant, avec une configuration standard, vous devrez reconstruire le conteneur Docker chaque fois que vous apportez des modifications à votre application. C'est évidemment loin d'être idéal, mais heureusement, il existe des moyens de contourner cela. Une façon consiste à monter un volume dans votre conteneur pour former un lien en temps réel entre votre conteneur et le système d'exploitation hôte (où vous effectuez votre développement). Par exemple, si votre source HTML se trouve dans le src / html /
dossier de votre répertoire de projet Docker, vous pouvez le monter dans / usr / local / nginx / html /
avec:
docker run -p 80:80 -v ./src/html/:/usr/local/nginx/html:ro container
Le "ro
»Indique que cette connexion est en lecture seule, de sorte que le conteneur Docker ne peut apporter aucune modification au système d'exploitation hôte. Cela peut également être utilisé pour permettre aux conteneurs Docker d'accéder aux données persistantes stockées sur le système d'exploitation hôte.