Comment interagir avec les conteneurs Docker

Comment interagir avec les conteneurs Docker

Cet article étend l'article Docker précédent et montre comment interagir avec les conteneurs Docker en exécutant des commandes à l'intérieur de conteneurs, en installant un logiciel à l'intérieur des conteneurs, en inspectant l'état des conteneurs, en accédant aux conteneurs à l'aide de bash,.

Dans ce tutoriel, vous apprendrez:

  • Comment exécuter des commandes à l'intérieur des conteneurs
  • Comment installer un logiciel à l'intérieur des conteneurs
  • Comment inspecter l'état du conteneur
  • Comment accéder aux conteneurs à l'aide de bash
  • Comment persister les transmissions en images
  • Comment supprimer des conteneurs et des images inutilisés
PHP installé.

Exigences et conventions logicielles utilisées

Exigences logicielles et conventions de ligne de commande Linux
Catégorie Exigences, conventions ou version logicielle utilisée
Système Toute distribution Linux
Logiciel Docker
Autre Accès privilégié à votre système Linux en tant que racine ou via le Sudo commande.
Conventions # - Exige que les commandes Linux soient exécutées avec des privilèges racine soit directement en tant qu'utilisateur racine, soit par l'utilisation de Sudo commande
$ - Exige que les commandes Linux soient exécutées en tant qu'utilisateur non privilégié régulier

Comment interagir avec les conteneurs Docker

Dans le premier article de cette série, vous avez appris les concepts Docker et certaines commandes de base et vu comment vous pouvez facilement exécuter des logiciels de manière compartimentée, sans toucher à la configuration du système d'exploitation de votre hôte. Allons maintenant plus loin, pénétrer dans un conteneur en cours d'exécution et exécuter certaines commandes.



Exécution des commandes à l'intérieur d'un conteneur en cours d'exécution

Dans l'article précédent, vous avez commencé un conteneur Apache. L'image sous-jacente n'a pas été installée par PHP, il était donc capable de servir des pages HTML statiques. Faisons un conteneur avec Apache et PHP installés dessus. Dans le cas où vous vous posez la question, il y a des images prêtes à être utilisées avec Apache et PHP installées, et elles peuvent être trouvées sur Docker Hub. Nous le faisons juste pour montrer comment une image peut être personnalisée selon vos besoins.

Alors, commençons une instance Debian en utilisant une ligne de commande similaire de l'article précédent, mais avec deux différences: donnons-lui un nom (--Nom Debian_Container), nous pouvons donc y faire référence plus tard, et allouer un terminal pour qu'il fonctionne (-il).

$ docker run -it --name debian_container -d -p 8000: 80 -v "$ pwd": / var / www / html debian 

Nous pouvons interagir avec un conteneur Docker en cours d'exécution. On vous a déjà dit que les conteneurs partagent le même noyau que le système d'exploitation hôte. Allons vérifier.

$ docker exec debian_container uname -a 

La commande docker ci-dessus exécute la commande donnée à l'intérieur du conteneur et afficher sa sortie.

Toutes les commandes Docker ont une aide associée, donc nous pouvons voir les options docker Accepte:

$ docker exec - help 

Vous pouvez maintenant jouer avec d'autres commandes:

$ docker exec debian_container ls -l $ docker exec debian_container pwd $ docker exec debian_container whoami $ docker exec debian_container cat / etc / émission 
Copie

Dans cette dernière commande, nous avons appris que le conteneur exécute Debian 9, malgré le système d'exploitation de votre machine. Comme mentionné précédemment, le système d'exploitation hôte et le conteneur ne partagent que le noyau.

Si vous avez essayé mais que vous ne pouviez pas exécuter une commande à l'intérieur du conteneur, il n'est probablement pas là. L'image (comme toutes les autres images) est construite à partir d'une configuration de Debian minimale, donc tout outil supplémentaire doit être installé. Il atteint deux objectifs: une taille de disque plus petite et une sécurité améliorée car moins de logiciel signifie moins de bogues à exploiter.

Maintenant, entrons dans le conteneur.

$ docker exec -it debian bash root @ b5c694a02248: / usr / local / apache2 # 
Copie

Remarquez que l'invite a changé et que vous êtes maintenant utilisateur racine à l'intérieur du conteneur (B5C694A02248 est le nom d'hôte à l'intérieur du conteneur) à l'intérieur d'une coquille bash.



Installation du logiciel dans un conteneur

Nous avons maintenant un shell à l'intérieur du conteneur avec l'utilisateur racine. Puisqu'il s'agit d'une version décortiquée de Debian, il n'y a même pas les commandes haut et ps. Allons-les installer.

# APT MISE À JOUR # APT INSTALLER PROCPS 
Copie

Vous pouvez voir ce qui fonctionne avec haut et ps -ef.

root@f5b423465e03:/# ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 19:46 pts/0 00:00:00 bash root 42 0 0 19:49 pts/1 00:00:00 bash root 310 42 0 19:53 PTS / 1 00:00:00 ps -ef root @ f5b423465e03: / # 
Copie

Oui, c'est frugal. Les conteneurs Docker ont généralement le nombre minimum absolu de processus d'exécution. Pour quitter le shell et retourner à votre système d'exploitation hôte, sortez simplement de bash (tapez sortie ou ctrl + d).

Notez que de nombreux fichiers ont été téléchargés par mise à jour apte et Installation apte. Ils existent tous dans le disque du conteneur en cours d'exécution. Ils existent toujours si le conteneur est arrêté et recommencé (docker stop debian_container; docker start debian_container). Mais ils n'existent pas dans l'image. Cela signifie que si vous supprimez ce conteneur (docker rm debian_continer) et démarrer un nouveau conteneur, vous devrez installer le package procps encore. De plus, si vous démarrez l'image Debian dans un autre hôte, vous devrez également installer procps encore. Nous verrons plus tard comment persister l'image avec des modifications du disque, donc la prochaine fois que vous démarrez un conteneur, tous les logiciels seront installés.

Maintenant, allons installer Apache et PHP. La commande ci-dessous mettra longtemps à terminer et à télécharger et à installer tous les packages de dépendance, y compris Apache et PHP - cela prendra quelques minutes. En fin de compte, démarrez Apache et accédez à LocalHost dans le port 8000 sur votre navigateur Web (http: // localhost: 8000). Vous devez voir la page Debian par défaut pour Apache.

# apt installer libapache2-mod-php # service apache2 start 
Copie

Page par défaut Apache Debian.

Maintenant, confirmons que PHP est là. Vous pouvez soit aller à / var / ww / html À l'intérieur du conteneur, ou quittez le shell de conteneur et tapez à partir du répertoire actuel de votre système d'exploitation hôte (n'oubliez pas que nous avons cartographié le répertoire courant dans / var / www / html à l'intérieur du conteneur?)

$ echo "> phpinfo.php 

Et voilà (http: // localhost: 8000 / phpinfo.php).

Informations PHP.

S'engager dans une image

Comme mentionné précédemment, les modifications apportées au conteneur persistent tant que le conteneur persiste, et les conteneurs devraient être éphémères - ils sont faits pour être détruits. Des modifications durables doivent être transformées en images.

L'article suivant montrera comment créer une image personnalisée de manière élégante (et fortement recommandée), en utilisant un dockerfile. Pour l'instant, vous apprendrez un hack qui peut être utile dans des situations spécifiques où il n'est pas possible ou souhaitable d'écrire un dockerfile. Extension des images avec un fichier docker si elle est préférée car elle peut être facilement modifiée lors de la mise en place de l'état de conteneur à une nouvelle image ne laisse aucune trace des modifications apportées à moins qu'une analyse de couche de système de fichiers laborieux ne soit effectuée.

La commande Docker s'engage A deux paramètres: nom de conteneur et Nouveau nom d'image et il créera une nouvelle image sur le cache d'images locales basée sur le conteneur. Dans la commande ci-dessous, debian_container est le nom du conteneur et debian-apache-php est le nouveau nom d'image.

$ docker commit debian_container debian-apache-php sha256: 3f01c0c71539c4dc6dfd7483ff68c41143b7e9aeb52de4a9892c8cc136eda236 
Copie

Listing des images dans le cache hôte.

$ Docker Images Repository Tag ID ID Créé Taille Debian-Apache-Php Dernier 3F01C0C71539 Il y a 10 minutes 235 Mo Debian Dernier BE2868BEBABA il y a 11 jours 101 Mo 
Copie

Notez qu'il y a une nouvelle image dans votre hôte. Une caractéristique intéressante de la gestion de l'image et des conteneurs est que Docker ne stockera que la différence de l'état du disque entre l'image actuelle et l'image sur laquelle il est basé, donc aucun espace disque redondant n'est gaspillé. Pour cela, Docker utilise un système de fichiers en couches qui utilise l'approche de copie-écriture: Lorsqu'un nouveau conteneur est créé, il hérite du même disque de l'image et, à mesure que les modifications sont apportées aux fichiers, ils sont écrits dans une nouvelle couche.



Inspection des conteneurs

Docker maintient de nombreuses informations sur les objets Docker. La commande Inspecte de docker est utilisé pour les voir.

$ docker inspecter debian_conntainer 

La commande récupérera un objet JSON avec des dizaines de lignes détaillant l'état du conteneur: ID de conteneur, date créée, état, image, chemin de journal, ports, volumes, réseaux, etc.

Contacteurs et images d'élagage

Après avoir joué avec des conteneurs et des images, le disque de l'hôte finira par se remplir d'entités abandonnées qui doivent être éliminées afin que vous puissiez récupérer l'espace disque.

La commande Docker Container Prune supprimera tous les conteneurs arrêtés. Soyez prudent: une fois le conteneur supprimé, tout état associé est perdu. Apporter une sauvegarde ou commettre des modifications à une image avant.

La commande Docker Image Prune Supprimera toutes les images inutilisées. Nous n'avons pas encore construit d'images, mais cette commande sera utile dans le prochain article.

Conclusion

Dans cet article, vous avez appris à interagir avec les conteneurs et à commettre des modifications dans les images, bien que cette approche ne soit pas recommandée.

Dans le prochain article, vous créerez vos propres images avec Dockerfile, le moyen recommandé de personnaliser les images Docker.

Plus dans cette série d'articles Docker

  • Une introduction pratique aux conteneurs Docker
  • Comment personnaliser les images Docker avec Dockerfiles

Tutoriels Linux connexes:

  • Une introduction à l'automatisation Linux, des outils et des techniques
  • Choses à installer sur Ubuntu 20.04
  • Masterring Bash Script Loops
  • Comment créer une pile de lampe basée sur Docker à l'aide de Docker sur…
  • Linux Apache n'exécute pas les fichiers PHP: solution
  • Mint 20: Mieux que Ubuntu et Microsoft Windows?
  • Choses à faire après l'installation d'Ubuntu 20.04 Focal Fossa Linux
  • Installation de WordPress OpenLitesPeed
  • Comment installer PHP sur Ubuntu Linux
  • Ampache Raspberry Pi Installation