Les conteneurs Docker fournissent des environnements isolés pour l’exécution des applications, garantissant ainsi la cohérence et la portabilité. Lorsque vous travaillez avec des conteneurs Docker, il est essentiel de pouvoir inspecter leurs shells et de s’y connecter. Cela vous permet d’exécuter des commandes, de résoudre des problèmes et de surveiller le comportement des conteneurs en temps réel.

Cet article explique comment accéder aux conteneurs Docker locaux et distants à des fins de maintenance et de mise à jour.

Pourquoi vous devez accéder à vos conteneurs ?

L’accès aux conteneurs est essentiel pour une gestion et un dépannage efficaces dans les environnements conteneurisés. Il vous permet d’analyser les journaux et les informations d’exécution du conteneur et d’identifier et de résoudre facilement les erreurs.

L’accès aux conteneurs vous permet également d’exécuter des commandes pour des mises à jour rapides de la configuration, des installations de paquets et d’autres tâches administratives. Sans accès, vous devriez reconstruire toute l’image du conteneur avec la configuration mise à jour, ce qui peut être long et inefficace.

Les conteneurs doivent également pouvoir communiquer entre eux dans un écosystème d’applications distribuées. Vous avez donc besoin d’un accès aux conteneurs pour diagnostiquer les commandes et vous assurer que la connectivité entre les conteneurs est saine.

Bien qu’il soit possible d’accéder aux conteneurs par le biais d’un protocole Secure Shell (SSH) traditionnel, Docker propose plusieurs méthodes intégrées pour vous aider à gagner du temps et de l’efficacité. Il s’agit notamment de :

  • docker exec
  • docker run
  • docker attach
  • docker compose exec
  • docker compose run

Chaque méthode présente des cas d’utilisation et des avantages spécifiques. Connaître la bonne commande pour votre cas d’utilisation peut vous aider à optimiser votre approche.

Comment et pourquoi utiliser docker exec

docker exec vous permet d’accéder à la session shell d’un conteneur en cours d’exécution et d’exécuter des commandes sans avoir besoin de démarrer une nouvelle instance. Notez que cette commande n’est pas persistante, ce qui signifie qu’elle ne sera pas ré-exécutée si le conteneur s’arrête ou redémarre.

Pour accéder à un conteneur en cours d’exécution, vous avez besoin de son nom ou de son ID (vous pouvez l’obtenir en exécutant docker ps -a). Saisissez-le ensuite dans la commande suivante :

docker exec -it  /bin/bash

Accéder à un conteneur avec docker exec
Accéder à un conteneur avec docker exec

Comment et pourquoi utiliser docker run

La commande docker run vous permet de démarrer un nouveau conteneur et d’accéder immédiatement à son shell. Ce conteneur n’est pas attaché à votre session shell actuelle par défaut, mais vous pouvez l’attacher en utilisant l’option -it.

La commande suivante vous permet de démarrer un nouveau conteneur, de l’attacher à votre session shell actuelle et de lancer un shell bash :

docker run -it  /bin/bash

Accéder à un conteneur avec docker run.
Accéder à un conteneur avec docker run.

Comment et pourquoi utiliser docker attach

La commande docker attach est utile pour surveiller et déboguer les opérations des conteneurs. Elle vous permet de vous connecter à un conteneur en cours d’exécution et de visualiser ses flux d’entrée, de sortie et d’erreur standard en temps réel.

Pour l’utiliser, démarrez votre conteneur en utilisant docker run. Ensuite, détachez-vous de lui en appuyant sur Ctrl+P et Ctrl+Q. Vous pouvez également fournir le drapeau -d pour ce conteneur.

Une fois que votre conteneur tourne en arrière-plan, accédez-y via la commande suivante :

docker attach 

Utilisation de docker attach pour accéder à un conteneur.
Utilisation de docker attach pour accéder à un conteneur.

Comment et pourquoi utiliser Docker Compose ?

Docker Compose vous permet de créer et d’exécuter des applications Docker multi-conteneurs. Vous pouvez l’utiliser pour définir les services qui composent votre application dans un fichier YAML, puis utiliser ce fichier pour démarrer et gérer tous les conteneurs ensemble. Il convient aux environnements de développement et de test dans lesquels vous devez créer rapidement des environnements complexes.

Pour accéder à un conteneur spécifique déjà en cours d’exécution, exécutez la commande docker compose suivante, suivie du nom du service et de la commande que vous souhaitez exécuter :

docker compose exec app /bin/bash

Cette commande lance un nouveau processus à l’intérieur du conteneur qui exécute la commande spécifiée. Vous pouvez l’utiliser pour exécuter n’importe quelle commande à l’intérieur du conteneur, y compris des shells interactifs comme bash.

De même, si vous souhaitez démarrer un nouveau conteneur à l’aide de Docker Compose et y accéder immédiatement, exécutez la commande suivante :

docker compose run app /bin/bash

Notez que docker compose a deux syntaxes différentes : docker-compose (version 1) et code>docker compose (version 2). La syntaxe de la version 2 est plus souple et plus puissante, il est donc recommandé de l’utiliser dans la mesure du possible.

Utiliser Docker Compose pour accéder aux conteneurs
Utiliser Docker Compose pour accéder aux conteneurs

Comment ajouter un serveur SSH à votre conteneur Docker

L’ajout d’un serveur SSH à votre conteneur Docker vous aide à gérer et à dépanner vos applications conteneurisées. Un serveur SSH vous permet d’accéder à distance aux conteneurs et de les gérer, d’exécuter des commandes et d’inspecter les journaux depuis n’importe où.

Vous pouvez ajouter un serveur SSH en l’incluant dans votre fichier Docker avant de construire le conteneur, puis en le connectant avec un client SSH. Vous pouvez également ajouter un accès SSH temporaire en créant un shell à l’intérieur d’un conteneur en cours d’exécution et en y installant un serveur SSH.

Inclure un serveur SSH lors de la construction de votre conteneur Docker

Lorsque vous construisez un conteneur Docker, il peut être utile d’inclure un serveur SSH à l’intérieur du conteneur si vous souhaitez y accéder de manière persistante. Cela permet l’accès à distance et le débogage du conteneur pendant le développement ou le dépannage. L’inclusion d’un serveur SSH à l’intérieur vous permet également de transférer en toute sécurité des fichiers vers et depuis le conteneur.

Pour intégrer un serveur SSH au moment de la construction, apportez quelques modifications au fichier Docker du conteneur. Voici un exemple de fichier Docker incluant un serveur SSH :

FROM debian:latest

RUN apt-get update && apt-get install -y openssh-server
RUN mkdir /var/run/sshd
RUN echo 'root:root123' | chpasswd
RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config

EXPOSE 22

CMD ["/usr/sbin/sshd", "-D"]

Conteneur Docker construit avec un serveur SSH
Conteneur Docker construit avec un serveur SSH

Ce code construit un conteneur avec la dernière image Debian et installe le serveur SSH. Il crée également un nouveau répertoire pour le serveur SSH, définit le mot de passe root et active la connexion root via la configuration SSH.

Enfin, il expose le port 22, le port par défaut de SSH.

Pour utiliser ce fichier Docker, construisez le conteneur à l’aide de la commande docker build, puis exécutez le conteneur à l’aide de docker run. Voici un exemple :

docker build . -t ssh-container 
docker run -d -p 2222:22 ssh-container

Cette commande construit un conteneur à l’aide du fichier Docker et lui attribue le nom de ssh-container. Utilisez -d pour exécuter le conteneur en mode détaché. Ensuite, mappez le port 22 à l’intérieur du conteneur au port 2222 sur la machine hôte avec -p.

Une fois que le conteneur est en cours d’exécution, vous pouvez vous y connecter en SSH à l’aide de la commande ssh:

ssh root@localhost-p 2222

Lorsque l’on vous demande le mot de passe, saisissez le mot de passe que vous avez défini dans le fichier YAML. Dans ce cas, il s’agit de « root123 » Vous êtes maintenant connecté au serveur SSH qui s’exécute dans le conteneur. Cela signifie que vous pouvez effectuer un débogage à distance ou transférer des fichiers depuis et vers le conteneur.

Ajouter temporairement un serveur SSH à un conteneur Docker en cours d’exécution

Vous pouvez également ajouter un serveur SSH à un conteneur en cours d’exécution à l’aide de la commande docker exec:

docker exec <container_name_or_id> /bin/bash

Une fois que vous avez accédé au conteneur, installez le serveur OpenSSH et démarrez le démon SSH :

apt update && apt install openssh-server && /usr/sbin/openssh -D

Cela ouvre une nouvelle instance du serveur SSH à l’intérieur du conteneur. Vous êtes maintenant prêt à vous y connecter à l’aide d’un client SSH sur votre machine locale.

Notez que vous ne pouvez vous connecter au conteneur via SSH que si vous ou votre équipe avez exposé le port SSH pendant la phase d’exécution ou de construction.

Se connecter au serveur SSH de votre conteneur

Commencez par identifier l’adresse IP ou le nom d’hôte du conteneur à partir de votre plateforme ou service de gestion de conteneurs.

Pour vous connecter à l’adresse IP, utilisez la commande ssh:

ssh [username]@[container-ip-address]

Lorsque vous y êtes invité, saisissez le mot de passe du nom d’utilisateur spécifié. Au lieu d’un mot de passe, certains serveurs SSH peuvent utiliser une sécurité basée sur une clé.

Vous devriez maintenant avoir une session de terminal à distance connectée au conteneur.

Résumé

Comme Docker devient de plus en plus populaire, il est important de pouvoir inspecter les conteneurs qui s’exécutent dans votre environnement. Cette fonctionnalité vous permet de diagnostiquer et de résoudre les problèmes pendant le développement.

Docker fournit également un ensemble polyvalent de commandes intégrées pour diverses tâches de développement. Vous pouvez utiliser ces commandes pour rationaliser votre flux de travail sans avoir à recourir aux méthodes SSH traditionnelles.

Découvrez Kinsta pour héberger vos applications, vos sites web WordPress ou vos bases de données. Avec Kinsta, vous disposez d’un hébergement rapide et sécurisé, vos projets étant déployés sur une infrastructure construite sur le Premium Tier Network et les C2 Machines de Google Cloud Platform. Choisissez entre les centres de données et un CDN compatible HTTP/3 avec 260+ PoPs. Restez en sécurité grâce à la technologie des conteneurs isolés, à deux pare-feu puissants et à une protection DDoS avancée alimentée par Cloudflare. Et vous pouvez intégrer des applications ou automatiser des flux de travail avec l’API Kinsta.

Marcia Ramos Kinsta

I'm the Editorial Team Lead at Kinsta. I'm a open source enthusiast and I love coding. With more than 7 years of technical writing and editing for the tech industry, I love collaborating with people to create clear and concise pieces of content and improve workflows.