Les images Docker facilitent le déploiement de plusieurs conteneurs sans avoir à conserver la même image sur plusieurs machines virtuelles. Vous pouvez utiliser un Dockerfile pour automatiser l'installation et la configuration d'une image et de ses dépendances. ADockerfile est un fichier texte des commandes (qui sont exécutées dans l'ordre) utilisé pour automatiser l'installation et la configuration d'une image Docker. Cet article développe notre guide Comment utiliser un Dockerfile pour créer une image Docker en couvrant l'utilisation approfondie des images Docker, des conteneurs et des Dockerfiles.
Avant de commencer
-
Familiarisez-vous avec notre guide de démarrage, créez et mettez à jour un Linode et installez Docker. Vous pouvez également déployer rapidement un Linode mis à jour et compatible Docker avec l'application Docker Marketplace.
-
Assurez-vous que votre Linode est sécurisé en suivant notre guide sur la configuration et la sécurisation d'une instance de calcul.
-
Ce guide suppose que vous maîtrisez l'utilisation de l'interface de ligne de commande Docker (CLI). Pour en savoir plus sur la CLI Docker, consultez leur documentation.
-
Consultez notre guide sur pour vous familiariser avec les bases de Dockerfiles.
Créer votre fichier Docker pour l'image Docker
Docker nécessite un Dockerfile fonctionnel pour ses builds. Ici, nous allons créer un Dockerfile qui configure une image Ubuntu avec Apache agissant comme un serveur Web et utilisant le port HTTP standard 80.
-
À l'invite de commande (soit via SSH ou Lish dans le Linode Manager), créez et changez de répertoire :
mkdir ~/mydockerbuild && cd ~/mydockerbuild
-
Créez un exemple de Dockerfile pour votre application Apache :
touch apache_dockerfile
-
Ouvrez le Dockerfile à l'aide de l'éditeur de texte de votre choix (pour cet exemple, nous utilisons nano) :
nano apache_dockerfile
-
Copiez l'exemple suivant dans votre Dockerfile. Cela crée un Dockerfile qui génère une image Ubuntu mise à jour, définit les informations du responsable, installe Apache, ouvre le port de conteneur 80 et démarre enfin un serveur Apache lorsqu'il est exécuté :
- Fichier :apache_dockerfile
1 2 3 4 5 6 7 8 9
FROM ubuntu MAINTAINER John Doe [email protected] ARG DEBIAN_FRONTEND=noninteractive RUN apt-get update RUN apt-get upgrade -y RUN apt-get install apache2 -y RUN apt-get clean EXPOSE 80 CMD ["apache2ctl","-D","FOREGROUND"]
Remarque Le
ARG DEBIAN_FRONTEND=noninteractive
L'instruction suivante garantit que l'instructionRUN apt-get
suivante les commandes s'exécutent sans nécessiter d'entrée supplémentaire de l'utilisateur lors de la création d'images. Cette instruction peut également être écrite en utilisantENV
au lieu deARG
pour que la variable d'environnement persiste dans les conteneurs déployés avec l'image. Étant donné que la non-interactivité n'est pas attendue lorsque vous travaillez dans de tels conteneurs,ARG
est recommandé dans ce cas. -
Enregistrez et fermez le fichier.
Construire une image Docker à partir du Dockerfile
-
Construire une image étiquetée
apache_image
à partir du Dockerfile en utilisant ledocker build
commande :docker build ~/mydockerbuild -f apache_dockerfile -t apache_image
-
Une fois la construction terminée et que vous êtes revenu à l'invite de commande, affichez les images disponibles de votre système avec la commande suivante :
docker images
La sortie devrait ressembler à ceci (le référentiel "ubuntu" est également disponible en raison de la ligne "FROM ubuntu" dans le Dockerfile) :
REPOSITORY TAG IMAGE ID CREATED SIZE apache_image latest 7e5c14739da5 7 seconds ago 215MB ubuntu latest 7e0aa2d69a15 6 weeks ago 72.7MB
Remarque
Par défaut, les images construites sont étiquetées « dernières ». Si vous souhaitez modifier la balise, par exemple en "développement", formatez la commande comme suit :
docker build ~/mydockerbuild -f apache_dockerfile -t apache_image:development
Exécuter vos images Docker en tant que conteneurs
Lorsque vous exécutez le docker run
commande, vous lancez un conteneur Docker lié à votre session de terminal. Ceci est également appelé exécuter un processus au premier plan . Lorsque votre processus racine est au premier plan et est lié à une session de terminal, votre conteneur se ferme dès que vous fermez la session de terminal. Si vous souhaitez que votre conteneur s'exécute même après la fermeture de votre session de terminal, vous pouvez exécuter votre conteneur en mode détaché mode. Cela exécute votre conteneur en arrière-plan .
Pour exécuter l'image Docker en tant que conteneur en mode détaché :
-
Entrez la commande suivante pour créer un conteneur nommé
apache
avec votre image, en utilisant le-d
argument pour garantir que votre conteneur s'exécute en arrière-plan :docker run --name apache -d apache_image
-
Une fois de retour à l'invite de commande, exécutez la commande suivante pour répertorier vos conteneurs actifs et confirmer que
apache
s'exécute en arrière-plan :docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1d5e1da50a86 apache_image "apache2ctl -D FOREG…" 3 minutes ago Up 3 minutes 80/tcp apache
-
Vous pouvez maintenant faire votre travail de développement avec le serveur Apache et avoir toujours accès à la ligne de commande. Cependant, votre conteneur n'est pas accessible au public car il manque des configurations de port supplémentaires. Dans la section suivante, vous allez reconstruire le conteneur avec des configurations de port qui vous permettent d'accéder au serveur Web. Pour l'instant, arrêtez le conteneur :
docker stop apache
Remarque Vous pouvez saisir l'ID du conteneur à la place de
apache
dans la commande ci-dessus. -
Entrez
docker ps
à nouveau pour vous assurer que tous vos fichiersapache
le conteneur n'est plus en cours d'exécution. -
Maintenant que le conteneur a été arrêté, vous pouvez le supprimer :
docker rm apache
AttentionLa suppression d'un conteneur de cette manière supprime toutes les données qu'il contient. Si vous avez effectué des ajustements que vous souhaitez reporter dans un nouveau conteneur, vous pouvez à la place utiliser
docker commit
pour créer une nouvelle image qui inclut vos mises à jour :docker commit apache apache_image_update
Ensuite, vous pouvez déployer un nouveau conteneur basé sur le nouveau
apache_image_update
image dans la section suivante.
Configurer les ports de votre conteneur Docker
Vous pouvez utiliser le run
options de la commande pour configurer différents aspects de votre conteneur. Lorsque votre conteneur s'exécute sur un hôte distant et sert son application, vous pouvez configurer ses ports pour exposer l'application aux utilisateurs.
Par exemple, vous pouvez configurer votre apache
conteneur pour utiliser le port hôte 8080
et port à conteneurs 80
comme dans l'exemple de commande ci-dessous. Remarquez le -d
option utilisée dans la commande pour exécuter le conteneur en tant que processus détaché.
docker run --name apache -p 8080:80 -d apache_image
La syntaxe générale de cette commande est la suivante :
docker run -–name <container name> -p <network port>:<container port> -d <container image label or ID>
Chaque paramètre est décrit dans la liste suivante :
<container name>
:Nom du conteneur Docker<host port>
:port hôte qui est mappé sur le port ouvert du conteneur<container port>
:Port où le conteneur Docker écoute<container image name>
:nom de l'image Docker utilisée pour votre déploiement
Maintenant, accédez à l'adresse IP de votre Linode sur le port hôte 8080 en accédant à http://<your Linode's IP address>:8080
dans un navigateur Web. Vous devriez voir la "page par défaut d'Apache2 Ubuntu" servie à partir de votre conteneur Docker.
Attention Lors du déploiement de conteneurs avec des configurations de port, Docker peut également créer des règles de pare-feu hôte pour autoriser l'accès public à ces conteneurs. Cela peut remplacer ou entrer en conflit avec les règles de pare-feu de l'hôte que vous avez configurées sur votre Linode.
Lectures complémentaires
Ce guide et Comment utiliser un Dockerfile pour créer une image Docker couvraient les bases de l'utilisation de Dockerfiles pour créer des images et des conteneurs, mais ils effleurent à peine la surface de ce que vous pouvez accomplir avec Docker. Pour plus d'informations :
-
visitez la documentation officielle des bonnes pratiques Dockerfile pour en savoir plus sur Dockerfiles ;
-
et, malgré son nom, le guide Docker'sGet Started est un didacticiel approfondi, qui mène à des guides encore plus approfondis, tels que le déploiement d'applications dans le cloud et la configuration de CI/CD (intégration et déploiement continus).
Plus d'informations
Vous pouvez consulter les ressources suivantes pour plus d'informations sur ce sujet. Bien que ceux-ci soient fournis dans l'espoir qu'ils seront utiles, veuillez noter que nous ne pouvons pas garantir l'exactitude ou l'actualité des documents hébergés en externe.
- Bonnes pratiques pour l'écriture de Dockerfiles
- Images Docker officielles sur Docker Hub
- Documents Docker