GNU/Linux >> Tutoriels Linux >  >> Panels >> Docker

Améliorez votre jeu DevOps avec ces exemples d'exécution Docker

L'docker run La commande est l'une des premières commandes que vous devez apprendre après avoir installé Docker. Mais vous êtes-vous demandé comment utiliser autrement docker run commandes pour déployer et gérer efficacement vos applications ? Passer en revue un exemple d'exécution Docker (docker run) serait génial. Mais devinez quoi, vous en apprendrez plus sur ce didacticiel !

Dans cet article, vous apprendrez à améliorer votre jeu DevOps avec un exemple d'exécution Docker que vous pouvez utiliser pour améliorer votre flux de travail.

Continuez à lire et ne vous perdez plus jamais lors de l'exécution des commandes Docker !

Prérequis

Ce tutoriel sera une démonstration pratique. Si vous souhaitez suivre, assurez-vous d'avoir les éléments suivants.

  • Une machine Linux :cette démo utilise Ubuntu 20.04, mais n'importe quelle distribution Linux fonctionnera. Voici comment installer Ubuntu.
  • Docker installé sur la machine.
  • Un compte utilisateur avec des privilèges root/sudo.

Exemple d'exécution Docker 1 :Exécuter un conteneur de manière interactive

Vous utilisez peut-être des conteneurs depuis un certain temps maintenant, mais saviez-vous qu'il existe quelques situations préférables pour exécuter un conteneur Docker en mode interactif ?

Docker vous permet d'exécuter des conteneurs en mode interactif lorsque :

  • Vous résolvez un problème et avez besoin de voir le résultat des commandes exécutées à l'intérieur du conteneur.
  • Vous expérimentez une nouvelle commande Docker et souhaitez voir les résultats de la commande en temps réel.
  • Vous exécutez un processus dans le conteneur qui nécessite une saisie manuelle de votre part.

Lors de l'exécution d'un exemple d'exécution Docker ( docker run ) sans option, le comportement par défaut consiste à exécuter le conteneur en mode interactif. Lorsque vous exécutez un conteneur en mode interactif, vous pouvez voir la sortie des commandes que vous exécutez dans le conteneur sur votre terminal au fur et à mesure de leur exécution.

1. Exécutez la commande suivante pour exécuter un conteneur (my_nginx ) en mode interactif et publier (-p ) port 80 du conteneur au port 8080 de votre machine hôte. Vous pouvez modifier le nom du conteneur comme vous le souhaitez.

La commande utilise le nginx image du hub Docker pour créer le conteneur et supprime automatiquement (--rm ) le conteneur lorsque le conteneur est arrêté.

docker container run --rm --name my_nginx -p 8080:80 nginx

Puisque vous utilisez un utilisateur non root avec privilèges sudo , il n'est pas nécessaire d'ajouter sudo lors de l'exécution des commandes Docker

Vous verrez directement la sortie du journal du serveur Web nginx dans votre terminal, comme indiqué ci-dessous.

L'exécution d'un conteneur interactif fournit de nombreuses informations, mais vous préférez peut-être filtrer les informations dont vous avez uniquement besoin. Si tel est le cas, ajoutez l'indicateur -a et spécifiez un flux standard (-a) pour le conteneur, comme indiqué ci-dessous.

La spécification d'un flux standard indique à Docker d'afficher uniquement la sortie stdout du conteneur my_nginx.

docker container run -a stdout --rm --name my_nginx -p 8080:80 nginx

Par défaut, si vous ne fournissez pas l'indicateur -a, stdin, stdout et stderr sont tous attachés au terminal. L'indicateur -a prend les arguments suivants et aide à désencombrer votre sortie pour ne voir que les informations pertinentes :

  • -a stdin – attache stdin au conteneur, en envoyant toutes les entrées de votre terminal au conteneur.
  • -a stdout – attache stdout au conteneur, affichant toutes les sorties générées par le conteneur sur votre terminal.
  • -a stderr – attache stderr au conteneur, affichant tous les messages d'erreur générés par le conteneur sur votre terminal.

Vous pouvez voir ci-dessous que la sortie est moins encombrée maintenant.

2. Ensuite, ouvrez un autre terminal et exécutez le docker ps commande pour voir la liste des conteneurs en cours d'exécution sur votre machine hôte.

docker ps

Ci-dessous, vous pouvez voir votre conteneur my_nginx répertorié dans la sortie.

3. Enfin, exécutez le curl commande ci-dessous pour tester le serveur Web nginx.

curl http://localhost:8080

Vous pouvez voir ci-dessous que la sortie du journal du serveur Web nginx s'affiche dans votre terminal (côté gauche) dès que la sortie est générée.

Exemple d'exécution Docker 2 :Exécuter le conteneur en mode détaché

Vous venez d'apprendre à exécuter vos conteneurs en mode interactif et à voir la sortie dans votre terminal au fur et à mesure de leur exécution. Mais si vous ne recherchez pas les sorties du conteneur dans votre terminal, vous pouvez exécuter le conteneur en mode détaché.

En mode détaché, le conteneur s'exécute en arrière-plan et vous ne voyez pas la sortie des commandes que vous exécutez dans le conteneur dans votre terminal.

Exécutez la commande suivante pour exécuter un conteneur (my_nginx ) en mode détaché (-d ).

docker container run --rm --name my_nginx -d -p 8080:80 nginx

Une fois que le conteneur s'exécute en mode détaché, Docker redirige la sortie vers les journaux du conteneur. À ce stade, le conteneur my_nginx s'exécute dans les sorties de commande en arrière-plan, comme indiqué ci-dessous.

Vous pouvez également voir l'ID unique du conteneur dans la sortie. Vous pouvez utiliser cet ID pour attacher le conteneur ou démarrer/arrêter/supprimer le conteneur.

Maintenant, lancez le docker ps commande pour voir la liste des conteneurs en cours d'exécution sur votre machine hôte.

Étant donné que le conteneur (my_nginx) s'exécute en arrière-plan, vous pouvez exécuter n'importe quelle commande sans ouvrir de nouveau terminal.

docker ps

Vous verrez la sortie suivante, qui montre que le my_nginx le conteneur fonctionne maintenant en mode détaché.

Si, pour une raison quelconque, vos serveurs Web NGINX ne fonctionnent pas correctement alors que votre conteneur fonctionne en mode détaché, vous devrez attacher votre terminal au conteneur en cours d'exécution. Vous pouvez vous attacher à un conteneur en cours d'exécution en exécutant le docker attach commande suivie de l'ID ou du nom du conteneur (my_nginx ), comme indiqué ci-dessous.

docker container attach my_nginx

Comme vous le voyez ci-dessous, vous avez réussi à vous connecter à my_nginx récipient. Vous pouvez maintenant trouver la cause première du problème et le résoudre.

Création d'un réseau pont

L'un des avantages d'utiliser Docker est qu'il gère pour vous la mise en réseau de vos conteneurs. Avec Docker, vous n'avez pas à vous soucier de la configuration de votre réseau. Docker configure automatiquement la mise en réseau pour vous. Y compris la création de réseaux, la connexion de conteneurs aux réseaux et la gestion des adresses IP.

Découvrez comment Docker configure la mise en réseau de vos conteneurs et crée un réseau de pont.

1. Exécutez le docker commande ci-dessous pour exécuter un conteneur Ubuntu avec un accès complet aux ressources réseau sur la machine hôte (--net=host ), ce qui est pratique pour le débogage.

Les options -ti indiquent à Docker de garder le conteneur en mode interactif. Vous devez spécifier cette option lorsque vous travaillez avec le shell Bash. L'exécution de cette commande comme dans la section "Exécution interactive d'un conteneur" ne fonctionne pas.

docker run -ti --rm --net=host ubuntu bash

2. Ensuite, exécutez la apt update commande dans le conteneur pour mettre à jour la liste des packages.

apt update -y

3. Exécutez la commande ci-dessous pour install les bridge-utils emballer. Ce package est nécessaire pour créer et gérer des périphériques de pont.

apt install bridge-utils

4. Maintenant, exécutez le brctl show suivant pour répertorier les réseaux de pont sur votre système.

brctl show

Vous verrez une liste de réseaux de ponts similaire à la sortie suivante. Notez qu'il existe un périphérique pont nommé docker0. Ce réseau est le réseau virtuel que Docker utilise pour créer des réseaux virtuels pour vos conteneurs si vous ne spécifiez pas de réseau virtuel de pont personnalisé.

5. Ouvrez un autre terminal et exécutez le docker network commande ci-dessous pour créer un nouveau réseau. Vous pouvez nommer le réseau différemment, mais dans ce tutoriel, le réseau est nommé my-ata-network .

docker network create my-ata-network

Vous verrez un identifiant de réseau unique renvoyé, comme indiqué ci-dessous. Notez l'ID de réseau car vous l'associerez ultérieurement au nouvel ID de réseau de pont (étape 6).

6. Revenez à votre terminal de conteneur Ubuntu et exécutez la commande suivante pour répertorier le réseau de pont (show ) sur votre système à nouveau.

brctl show

Comme indiqué ci-dessous, vous verrez un nouveau réseau de pont répertorié dans la sortie nommée br-d9ba7f94ac73. Vous pouvez voir que la partie d9ba7f94ac73 correspond à l'ID de réseau renvoyé à l'étape cinq.

Cette sortie confirme que Docker a créé un nouveau réseau de pont nommé my-ata-network et a ajouté le conteneur Ubuntu à ce réseau de pont.

Exemple d'exécution Docker # 3 :Exécution d'un conteneur avec redirection de port

Docker utilise les fonctionnalités de pare-feu intégrées du noyau Linux, à savoir iptables commande, pour créer des règles de pare-feu. Ces règles de pare-feu contrôlent le moment où les paquets sont envoyés entre les ponts et deviennent ainsi disponibles pour les conteneurs attachés à ces ponts.

Découvrez comment Docker réalise la redirection de port sous le capot avec iptables .

1. Exécutez la commande suivante pour démarrer un conteneur Ubuntu privilégié (--privileged=true ) avec un accès complet à toutes les ressources réseau sur l'hôte, y compris la redirection de port.

docker run -ti --rm --net=host --privileged=true ubuntu bash

2. Ensuite, exécutez la commande ci-dessous pour update la liste des packages et install iptables .

apt update && apt install iptables

3. Exécutez iptables commande ci-dessous sur le conteneur Ubuntu privilégié à lister (-L ) le nat règle du tableau.

iptables -n -L -t nat

Ce que vous pouvez voir ci-dessous ne sont que les règles par défaut livrées avec Ubuntu.

4. Maintenant, exécutez la commande ci-dessous, lancez un Ubuntu conteneur avec redirection de port vers votre hébergeur sur le port 8080 .

docker run -ti --rm -p 8080:8080 ubuntu bash

5. Enfin, relancez le iptables commande ci-dessous pour lister le nat règle du tableau.

iptables -n -L -t nat

Notez ci-dessous qu'une nouvelle règle est ajoutée, transférant tous les paquets du port de l'hôte (8080) vers le port du conteneur (8080). Vous pouvez voir que l'exposition des ports dans Docker est simplement une redirection de port au niveau de la couche réseau.

Création d'un réseau défini par l'utilisateur

Votre examen Docker DCA peut vous demander de créer des réseaux de pont pour les développeurs. Comment? Utilisation du docker network , vous pouvez créer un réseau pont (un réseau virtuel défini par l'utilisateur). Le docker network fournit un moyen pour les conteneurs sur différents réseaux de communiquer.

1. Exécutez le docker network commande ci-dessous pour créer un nouveau réseau de pont nommé ata-app-net en utilisant le bridge conducteur.

docker network create --driver bridge ata-app-net

2. Ensuite, exécutez la commande suivante pour lister (ls ) les réseaux de pont sur votre hôte.

docker network ls

Notez ci-dessous qu'un nouveau réseau de pont défini par l'utilisateur nommé ata-app-net a été créé.

3. Exécutez la commande ci-dessous pour afficher (inspect ) les détails du ata-app-net réseau de ponts.

docker network inspect ata-app-net

Ci-dessous, notez que le réseau de pont ata-app-net a un seul sous-réseau (172.21.0.0/16). Ce sous-réseau est automatiquement attribué lorsque vous créez un réseau de pont. Vous pouvez également voir le pilote (pont) associé au réseau de ponts.

4. Maintenant, exécutez cet exemple d'exécution Docker ( docker run ) ci-dessous pour exécuter quelques conteneurs alpins sur vos réseaux de pont définis par l'utilisateur pour essayer de se cingler mutuellement.

docker run -dit --name ata-app1 --network ata-app-net alpine ash

5. Exécutez le docker ps commande pour lister les conteneurs en cours d'exécution.

docker ps

Comme vous le voyez ci-dessous, les deux conteneurs sont maintenant en cours d'exécution.

6. Réexécutez la commande docker network ci-dessous pour inspect votre ata-app-net réseau de pont.

docker network inspect ata-app-net

Vous pouvez voir ci-dessous que vos deux conteneurs sont maintenant connectés au réseau de pont ata-app-net avec leurs adresses IP et leurs noms.

7. Maintenant, exécutez le docker container attach ci-dessous pour vous connecter à votre ata-app1 récipient.

docker container attach ata-app1

8. Ping vers ata-app2 pour vérifier que les conteneurs peuvent communiquer entre eux.

ping ata-app2

9. Ensuite, envoyez un ping à google.com pour vérifier que ata-app1 peut communiquer avec Internet.

ping google.com

10. Enfin, répétez les étapes sept à neuf pour vous connecter à ata-app2 et ping ata-app1 .

Assurez-vous d'appuyer sur CTRL + PQ pour vous détacher du conteneur ata-app1 et le faire fonctionner. Sinon, le conteneur s'arrêtera et lorsque vous pingerez ata-app1 depuis ata-app2, la commande ping échouera.

docker container attach ata-app2
ping ata-app1
ping google.com

Ci-dessous, vous pouvez voir que tous les paquets sont transmis et reçus, ce qui confirme que les deux conteneurs peuvent communiquer entre eux et avec Internet.

Conclusion

Dans ce didacticiel, vous avez appris de nombreux exemples d'exécution de Docker (docker run ) que vous pouvez utiliser pour faciliter le déploiement et la gestion de vos applications. Vous pouvez désormais utiliser Docker plus efficacement en comprenant comment docker run s et comment Docker configure la mise en réseau de vos conteneurs.

À ce stade, vous savez déjà comment tirer parti de l'exemple d'exécution de Docker ( docker run ) pour améliorer votre jeu DevOps.

Fort de ces connaissances, pourquoi ne pas déployer vos applications de manière plus efficace et évolutive ?


Docker
  1. Installer ModSecurity avec Apache dans un conteneur Docker

  2. Comment exécuter un programme dans un conteneur Docker ?

  3. Comment déployer un conteneur nginx avec Docker sur Linode

  4. Comment exécuter MySQL dans un conteneur Docker

  5. Comment exécuter une commande sur un conteneur Docker en cours d'exécution

Comment exécuter PHPMyAdmin dans un conteneur Docker

Comment exécuter Grafana dans un conteneur Docker

Tutoriel de démarrage avec Azure Docker

Comment copier des fichiers avec Docker cp dans votre conteneur Docker

Comment exécuter des conteneurs Docker

Exécuter Docker Container en arrière-plan (mode détaché)