Unlimited WordPress themes, graphics, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. DevOps
Code

Docker de Ground Up: Travailler avec des conteneurs, Partie 1

by
Difficulty:IntermediateLength:MediumLanguages:
This post is part of a series called Docker from the Ground Up: Working with Containers.
Docker From the Ground Up: Working With Containers, Part 2

French (Français) translation by New Lune (you can also view the original English article)

Il s'agit de la première partie d'une série en deux parties concernant le travail avec les conteneurs Docker. Dans cette partie, nous nous concentrerons sur les nombreuses façons et les options pour exécuter une image et comment l'hôte peut interagir avec un conteneur Docker.

Dans la deuxième partie, nous couvrons la liste, le démarrage, l'arrêt et le redémarrage des conteneurs, ainsi que l'exécution des commandes sur les conteneurs en cours d'exécution. Les images Docker sont les unités de déploiement. Lorsque vous exécutez une image, vous instanciez un conteneur Docker qui exécute un processus unique dans son environnement isolé pour l'arborescence des fichiers, des réseaux et des processus.

Les conteneurs Docker sont très flexibles et permettent de nombreux cas d'utilisation trop lourds, complexes et/ou coûteux avec d'autres technologies comme les machines virtuelles et les serveurs en métal nu.

Avant de commencer, assurez-vous que Docker est installé correctement dans votre environnement. Selon la façon dont il est installé et votre utilisateur, vous devrez peut-être l'exécuter en tant que sudo. Je saute le sudo.

Exécuter une image

Vous lancez un conteneur Docker en exécutant une image. Il existe plusieurs façons d'exécuter un conteneur qui affecte la facilité avec laquelle gérer tous les conteneurs. Lorsque le conteneur commence, il exécute généralement la commande définie dans le Dockerfile. Voici le Dockerfile pour le conteneur hello-world:

La commande exécute simplement le "hello" binaire qui a été copié à la racine du conteneur lors de la construction de l'image.

Premier plan vs. Détaché

Un conteneur peut fonctionner au premier plan où il bloque jusqu'à la fin du processus et le conteneur cesse de fonctionner. En mode au premier plan, le conteneur imprime sa sortie sur la console et peut lire l'entrée standard. En mode détaché (lorsque vous fournissez l'indicateur -d), le contrôle retourne immédiatement et le conteneur

Exécution d'un conteneur sans nom

La manière la plus simple d'exécuter un conteneur est: docker run <image id or name>.

Lorsque vous exécutez un conteneur à l'aide de cette commande, Docker lui assignera un nom composé de deux mots aléatoires. Par exemple: docker run hello-world.

Si vous avez déjà l'image du hello world, Docker l'exécutera. Si vous ne le faites pas, il l'extraira du DockerHub officiel du dépôt Docker, puis l'exécutera. La sortie devrait ressembler à:

Le programme hello sort après avoir affiché le message, qui met fin au processus qui se déroule à l'intérieur du conteneur et termine le conteneur. Le conteneur s'arrête toujours au cas où vous souhaitez vous connecter, examiner les registres ou toute autre chose. Pour afficher le conteneur, vous pouvez exécuter la commande suivante:

J'expliquerai plus tard comment faire la liste des conteneurs et toutes les options pertinentes. Pour l'instant, concentrons-nous sur la section Noms. Docker a généré le nom "clever_liskov" automatiquement, et je devrai l'utiliser ou l'ID du conteneur pour faire référence à ce conteneur à des fins telles que le redémarrage, le suppression ou l'exécution d'une commande.

Exécuter un conteneur nommé

L'utilisation d'ID de conteneur ou de noms générés automatiquement est parfois gênant. Si vous interagissez fréquemment avec un conteneur que vous recréez fréquemment, il obtiendra un ID différent et un nom généré automatiquement. En outre, le nom sera aléatoire.

Docker vous permet de nommer vos conteneurs lorsque vous les exécutez en fournissant un argument de ligne de commande "--name <container name>". Dans des cas simples, où vous avez juste un conteneur par image, vous pouvez nommer le conteneur après votre image: docker run --name hello-world hello-world.

Maintenant, si nous regardons le processus (j'ai supprimé clever_liskov plus tôt), nous verrons que le conteneur s'appelle hello-world:

Il existe plusieurs avantages pour un conteneur nommé:

  • Vous avez un nom stable pour vos conteneurs que vous utilisez de manière interactive et dans les scripts.
  • Vous pouvez choisir un nom significatif.
  • Vous pouvez choisir un nom abrégé pour plus de commodité lorsque vous travaillez de manière interactive.
  • Il vous empêche d'avoir accidentellement plusieurs conteneurs de la même image (aussi longtemps que vous fournissez toujours le même nom).

Regardons la dernière option. Si j'essaie d'exécuter la même commande run avec le même nom "hello-world", j'ai un message d'erreur clair:

Exécution d'une image de suppression automatique

Les conteneurs mangent par défaut. Parfois, vous n'en avez pas besoin. Au lieu d'enlever manuellement les contenants sortants, vous faites que le conteneur disparaisse seul. L'argument --rm line de commande fait l'affaire: docker run --rm hello-world.

Exécuter un autre commandement

Par défaut, Docker exécute la commande spécifiée dans le Dockerfile utilisé pour construire l'image (ou directement le point d'entrée si aucune commande n'est trouvée). Vous pouvez toujours l'annuler en fournissant votre propre commande à la fin de la commande d'exécution. Sortons ls -la sur l'image busybox (l'image hello-world n'a pas d'exécutable ls):

Interagir avec l'hôte

Les conteneurs Docker exécutent des processus isolés dans leur propre petit monde. Mais il est souvent nécessaire et utile de fournir un accès à l'hôte.

Passer des variables d'environnement à un conteneur

Les conteneurs Docker n'héritent pas automatiquement de l'environnement du processus hôte qui les a exécutés. Vous devez fournir explicitement des variables d'environnement au conteneur lorsque vous l'exécutez à l'aide du drapeau de ligne de commande -e. Vous pouvez passer plusieurs variables d'environnement. Voici un exemple:

La première ligne exécute le conteneur busybox, en passant la variable ENV_FROM_HOST, puis dans le conteneur en cours d'exécution env indique que le ENV_FROM_HOST est correctement configuré.

Vous pouvez également utiliser des variables d'environnement hôte. Cela définit quelques variables d'environnement hôte et les utilise dans la commande Run:

À l'intérieur du conteneur, ils sont maintenant visibles:

Montage des répertoires d'hôtes

L'une des interactions les plus utiles consiste à installer les répertoires de l'hôte. Cela permet plusieurs cas d'utilisation intéressants:

  • Stockage partagé entre conteneurs fonctionnant sur le même hôte.
  • Affichage et édition de fichiers à l'aide de votre environnement hôte et de vos outils et utilisation des fichiers dans le conteneur.
  • Persistance au niveau de l'hôte au-delà de la durée de vie d'un conteneur.

Ici, je crée un fichier sur l'hôte: $ echo "Yeah, it works!"> ~/data/1.txt

Ensuite, je cours l'image busybox en montant le ~/data directory dans /data dans le conteneur et en affichant le contenu du fichier sur l'écran:

J'ai utilisé la commande cat /data/1.txt ici.

Exposer les ports à l'hôte

Si vous exposez un port dans votre Dockerfile en utilisant EXPOSE, il sera accessible uniquement à d'autres conteneurs docker. Pour le rendre accessible sur l'hôte, vous devez utiliser l'argument de ligne de commande -p. La syntaxe est -p <hostport>:<exposed container port>.

Voici l'image nginx, qui expose le port 80 et utilise l'argument de ligne de commande -p pour le rendre visible sur l'hôte sur le port 9000:

Notez que contrairement aux commandes précédentes qui ont effectué certaines tâches et complétées, le conteneur nginx continuera à courir et à écouter les requêtes entrantes. Vérifions que nginx est vraiment opérationnel et répond aux demandes sur le port 9000. Je préfère l'excellent client httpie HTTP sur le curl pour frapper les serveurs Web et les services à partir de la ligne de commande:

Conclusion

Il existe plusieurs façons d'exécuter une image Docker pour créer un conteneur, et il existe de nombreuses options. Chaque combinaison prend en charge une utilisation particulière. Il est très utile lorsque vous travaillez avec des conteneurs Docker pour saisir pleinement les détails et utiliser la meilleure méthode pour lancer vos conteneurs.

En outre, l'ajout de volumes d'hôtes et les ports d'exposition et de publication permettent une intégration étroite avec l'hôte et une multitude de scénarios d'utilisation. Dans la deuxième partie, nous nous pencherons sur la gestion d'un tas de contenants et en profitant de la puissance totale fournie par Docker.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.