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

Comment se connecter en SSH aux conteneurs Docker [étape par étape]

Lorsque vous avez besoin de dépanner ou de jeter un coup d'œil rapide dans un conteneur Docker, SSH est une excellente option. SSH vous permet de vous connecter rapidement à un conteneur en cours d'exécution et de voir ce qui se passe. Mais la connexion à un conteneur Docker implique d'abord une configuration, et vous avez plusieurs options différentes.

Dans ce didacticiel, vous apprendrez à vous connecter en SSH aux conteneurs Docker à l'aide de docker run commande et un Dockerfile.

Commençons !

Prérequis

Si vous souhaitez suivre étape par étape, assurez-vous d'avoir les éléments suivants :

  • Un hôte Linux. Ce didacticiel utilise Ubuntu 18.04.5 LTS.
  • Docker installé sur l'hôte Linux. Ce didacticiel utilise Docker v19.03.8.

Démarrer un conteneur et SSH dans les conteneurs Docker avec docker run

L'docker run command est une commande Docker qui exécute une commande lorsqu'un nouveau conteneur apparaît pour la première fois. Utilisation de docker run , vous pouvez lancer une session SSH interactive vers un conteneur en suivant les étapes ci-dessous.

Avant de commencer cette section, assurez-vous d'avoir téléchargé et disponible une image Docker. Ce tutoriel utilise la dernière image Ubuntu Docker disponible sur Docker Hub.

Pour SSH dans les conteneurs Docker avec docker run :

1. Ouvrez un terminal sur votre machine locale.

2. Exécutez l'docker run commande fournissant :

  • Le name du conteneur à exécuter (ubuntu_container_ssh )
  • Le i drapeau indiquant que vous souhaitez ouvrir une session SSH interactive vers le conteneur. Le i flag ne ferme pas la session SSH même si le conteneur n'est pas attaché.
  • Le t flag alloue un pseudo-TTY qui peut être utilisé pour exécuter des commandes de manière interactive.
  • L'image de base à partir de laquelle créer le conteneur (ubuntu ).
# Creating the container named ubuntu_container_ssh and start a Bash session.
sudo docker run --name ubuntu_container_ssh -i -t ubuntu

À ce stade, vous êtes connecté en SSH au conteneur et pouvez exécuter toutes les commandes que vous souhaitez.

3. Ensuite, exécutez n'importe quelle commande, telle que touch commande. La commande tactile créera un nouveau dossier nommé myfolder dans le tmp répertoire, comme indiqué ci-dessous.

touch /tmp/myfolder

Vous pouvez maintenant exécuter toutes les commandes que vous souhaitez !

Enfin, lorsque vous avez terminé d'exécuter les commandes, tapez exit pour fermer la session.

SSH dans l'exécution de conteneurs Docker avec docker exec

Dans la section précédente, vous avez appris à exécuter des commandes SSH lors du démarrage d'un nouveau conteneur Docker. Mais que se passe-t-il si vous avez besoin de vous connecter en SSH à des conteneurs Docker déjà en cours d'exécution ? Vous exécutez le docker exec commande.

Le docker exec La commande crée un shell Bash dans un conteneur en cours d'exécution et constitue un excellent moyen d'envoyer des commandes SSH dans un conteneur.

Avant de commencer cette section, assurez-vous d'avoir téléchargé et disponible une image Docker. Ce didacticiel utilise la dernière image NGINX Docker disponible sur Docker Hub.

Pour SSH dans un conteneur Docker en cours d'exécution avec docker exec :

1. Ouvrez un terminal sur votre machine locale.

2. Ensuite, exécutez le docker run commande pour démarrer le conteneur. Assurez-vous de spécifier le -d flag pour exécuter le conteneur en arrière-plan afin de le maintenir actif jusqu'à ce que vous le supprimiez. La commande ci-dessous démarre un conteneur appelé nginx-testing .

sudo docker run --name nginx-testing -d nginx

3. Maintenant, exécutez la commande docker ps pour vérifier que le conteneur est en cours d'exécution. Le docker ps La commande listera tous les conteneurs en cours d'exécution sur l'hôte Docker.

4. Enfin, exécutez docker exec , comme indiqué ci-dessous, à SSH dans le conteneur en cours d'exécution appelé nginx-testing . Dans l'extrait de code ci-dessous :

  • docker exec la commande s'exécute (/bin/bash ) pour obtenir un shell Bash dans le conteneur.
  • -it flag vous permet d'exécuter un conteneur en mode interactif, c'est-à-dire que vous pouvez exécuter des commandes à l'intérieur du conteneur pendant qu'il est toujours en cours d'exécution.
  • nginx-testing est le nom du conteneur.
sudo docker exec -it nginx-testing /bin/bash

Configuration d'un serveur OpenSSH et connexion avec un Dockerfile

Jusqu'à présent, le didacticiel supposait que vous vous connectiez à un conteneur sur lequel un serveur SSH était déjà installé. Mais que se passe-t-il si ce n'est pas le cas ? OpenSSH n'est peut-être pas déjà installé sur l'image que vous utilisez et vous devez d'abord la configurer ?

À l'aide d'un Dockerfile, vous pouvez configurer toutes les tâches nécessaires non seulement pour SSH dans les conteneurs Docker, mais également pour configurer un serveur OpenSSH à partir de zéro.

En supposant que votre terminal local est toujours ouvert :

1. Créez éventuellement un répertoire pour stocker le Dockerfile. Ce tutoriel utilisera le ~/DockerFileContainerTest répertoire.

2. Ouvrez votre éditeur de texte préféré, copiez/collez le Dockerfile ci-dessous à l'intérieur et enregistrez le fichier sous Dockerfile à l'intérieur de ~/DockerFileContainerTest annuaire. Ce Dockerfile contient toutes les commandes et configurations pour créer une nouvelle image Docker au-dessus de n'importe quelle image de base et configurer OpenSSH.

Le DockerFile ci-dessous contient diverses étapes/instructions qui permettront de créer le conteneur :

  • FROM Définit le ubuntu:16.04 image de base à utiliser.
  • RUN – Exécute les commandes dans un nouveau calque en haut de l'image de base.
  • CMD – CMD vous permet d'exécuter les commandes. Il existe deux manières d'exécuter les commandes soit via exec, soit en utilisant des formats shell.
  • EXPOSE – Informe Docker que le conteneur écoute sur les ports réseau spécifiés lors de l'exécution. Le contenant sera exposé sur le pot 22 .
# Instruction for Dockerfile to create a new image on top of the base image (ubuntu)

FROM ubuntu:16.04

RUN apt-get update && apt-get install -y openssh-server
RUN mkdir /var/run/sshd
RUN echo 'root:mypassword' | chpasswd
RUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
RUN sed '[email protected]\s*required\s*[email protected] optional [email protected]' -i /etc/pam.d/sshd
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]

3. Ensuite, exécutez la docker build commande pour créer l'image Docker. Le t flag marque l'image sshd_container et. permet à Docker de sélectionner tous les fichiers nécessaires dans le répertoire de travail actuel.

# Building the docker Image
sudo docker build -t sshd_tagged_image .

4. Maintenant, exécutez les docker images commande pour inspecter l'image créée. Notez le RÉPOSITOIRE attribut. Cet attribut est le tag créé avec le -t drapeau à l'étape précédente.

5. Exécutez docker run pour créer et exécuter le conteneur à partir de l'image en indiquant à Docker d'exécuter l'image en arrière-plan (-d ),

La commande ci-dessous demande à Docker de créer et d'exécuter le conteneur appelé test_sshd_container en arrière-plan (-d ), en utilisant le sshd_tagged_image image nouvellement construite que vous avez créée à l'étape 3 et pour publier tous les ports définis dans le Dockerfile en tant que ports aléatoires.

# Running the container using the newly built image
docker run -d -P --name test_sshd_container sshd_tagged_image

Après l'exécution réussie de la commande Docker run, vous verrez que l'ID du conteneur est généré ci-dessous.

6. Exécutez docker port pour vérifier la connectivité SSH entre l'hôte Docker et le conteneur. Le docker port liste de commandes les mappages de port ou un mappage spécifique pour le conteneur.

sudo docker port test_sshd_container

Vous devriez voir la sortie de 22/TCP → 0.0.0.0:32769 , ce qui indique que le port 22 du conteneur est mappé sur le port externe 32769 .

7. Ensuite, recherchez l'adresse IP du conteneur. Pour ce faire, exécutez le docker inspect commande. L'docker inspect la commande interroge les informations Docker et restitue les résultats dans un tableau JSON à l'aide d'un format paramètre.

Vous verrez le format l'argument de paramètre ci-dessous utilise la range attribut pour trouver l'adresse IP du conteneur en cochant NetworkSettingsNetworksIPAddress .

docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' test_sshd_container

8. Enfin, maintenant que vous avez l'adresse IP sur laquelle vous connecter en SSH, essayez de vous connecter en SSH au conteneur, et cela devrait fonctionner !

ssh [email protected] 

Conclusion

Vous montrez maintenant quelques façons de vous connecter en SSH à un conteneur Docker en utilisant différentes approches. En utilisant l'une de ces approches, vous devriez être en mesure de dépanner et de gérer vos conteneurs.

Avec ces nouvelles connaissances, comment prévoyez-vous de vous connecter en SSH à votre conteneur maintenant ?


Docker
  1. Comment créer, répertorier et supprimer des conteneurs Docker sous Linux

  2. Comment se connecter en SSH à un conteneur Docker

  3. Comment monter un répertoire hôte dans un conteneur Docker

  4. Comment partager des données entre des conteneurs Docker

  5. Comment répertorier les conteneurs Docker

Comment supprimer les conteneurs Docker

Comment arrêter les conteneurs Docker

Comment nommer ou renommer les conteneurs Docker

Comment se connecter en SSH à un conteneur Docker

Comment gérer les conteneurs Docker

Comment répertorier/démarrer/arrêter/supprimer les conteneurs docker