GNU/Linux >> Linux Esercitazione >  >> Panels >> Docker

Come eseguire SSH nei contenitori Docker [Passo dopo passo]

Quando è necessario risolvere i problemi o dare una rapida occhiata a un container Docker, SSH è un'ottima opzione. SSH ti consente di connetterti rapidamente a un container in esecuzione e vedere cosa sta succedendo. Ma la connessione a un container Docker richiede prima alcune impostazioni e hai alcune opzioni diverse.

In questo tutorial imparerai come eseguire SSH nei contenitori Docker usando docker run comando e un Dockerfile.

Iniziamo!

Prerequisiti

Se desideri seguire passo dopo passo, assicurati di avere quanto segue:

  • Un host Linux. Questo tutorial utilizza Ubuntu 18.04.5 LTS.
  • Docker installato sull'host Linux. Questo tutorial utilizza Docker v19.03.8.

Avvio di un container e SSH in container Docker con docker run

La docker run command è un comando Docker che esegue un comando quando viene visualizzato per la prima volta un nuovo contenitore. Usando docker run , puoi avviare una sessione SSH interattiva in un container utilizzando i passaggi seguenti.

Prima di iniziare questa sezione, assicurati di avere un'immagine Docker scaricata e disponibile. Questo tutorial utilizza l'ultima immagine Docker di Ubuntu disponibile su Docker Hub.

Per SSH nei contenitori Docker con docker run :

1. Apri un terminale sul tuo computer locale.

2. Esegui docker run comando che fornisce:

  • Il name del contenitore da eseguire (ubuntu_container_ssh )
  • Il i flag che indica che desideri aprire una sessione SSH interattiva nel contenitore. Il i flag non chiude la sessione SSH anche se il contenitore non è collegato.
  • Il t flag assegna uno pseudo-TTY molto usato per eseguire comandi in modo interattivo.
  • L'immagine di base da cui creare il contenitore (ubuntu ).
# Creating the container named ubuntu_container_ssh and start a Bash session.
sudo docker run --name ubuntu_container_ssh -i -t ubuntu

A questo punto, sei collegato tramite SSH al container e puoi eseguire tutti i comandi che desideri.

3. Quindi, esegui qualsiasi comando, come il touch comando. Il comando touch creerà una nuova cartella denominata myfolder nel tmp directory, come mostrato di seguito.

touch /tmp/myfolder

Ora puoi eseguire tutti i comandi che desideri!

Infine, quando hai finito di eseguire i comandi, digita exit per chiudere la sessione.

SSH in esecuzione di contenitori Docker con docker exec

Nella sezione precedente, hai appreso come eseguire i comandi SSH all'avvio di un nuovo contenitore Docker. Ma cosa succede se hai bisogno di SSH in contenitori Docker che sono già in esecuzione? Esegui docker exec comando.

Il docker exec comando crea una shell Bash all'interno di un contenitore in esecuzione ed è un ottimo modo per inviare comandi SSH in un contenitore.

Prima di iniziare questa sezione, assicurati di avere un'immagine Docker scaricata e disponibile. Questo tutorial utilizza l'ultima immagine Docker NGINX disponibile su Docker Hub.

In SSH in un contenitore Docker in esecuzione con docker exec :

1. Apri un terminale sul tuo computer locale.

2. Quindi, esegui docker run comando per avviare il contenitore. Assicurati di specificare il -d flag per eseguire il contenitore in background per mantenerlo attivo fino a quando non lo rimuovi. Il comando seguente avvia un contenitore chiamato nginx-testing .

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

3. Ora, esegui il comando docker ps per verificare che il contenitore sia in esecuzione. La docker ps comando elencherà tutti i contenitori in esecuzione in esecuzione sull'host Docker.

4. Infine, esegui docker exec , come mostrato di seguito, in SSH nel contenitore in esecuzione chiamato nginx-testing . Nello snippet di codice seguente:

  • docker exec viene eseguito il comando (/bin/bash ) per ottenere una shell Bash nel contenitore.
  • -it flag ti consente di eseguire un contenitore in modalità interattiva, ovvero puoi eseguire comandi all'interno del contenitore mentre è ancora in esecuzione.
  • nginx-testing è il nome del contenitore.
sudo docker exec -it nginx-testing /bin/bash

Configurazione di un server OpenSSH e connessione con un Dockerfile

Fino ad ora, il tutorial ha presupposto che ti stai connettendo a un container su cui è già installato un server SSH. Ma cosa succede se non lo fa? Forse l'immagine che stai utilizzando non ha già installato OpenSSH e devi prima configurarlo?

Utilizzando un Dockerfile, puoi configurare tutte le attività necessarie non solo per SSH nei contenitori Docker, ma anche per configurare da zero un server OpenSSH.

Supponendo che tu abbia ancora il tuo terminale locale aperto:

1. Facoltativamente, creare una directory in cui archiviare il Dockerfile. Questo tutorial utilizzerà il ~/DockerFileContainerTest directory.

2. Apri il tuo editor di testo preferito, copia/incolla il Dockerfile sottostante e salva il file come Dockerfile all'interno di ~/DockerFileContainerTest directory. Questo Dockerfile contiene tutti i comandi e le configurazioni per creare una nuova immagine Docker sopra qualsiasi immagine di base e configurare OpenSSH.

Il File Docker di seguito contiene vari passaggi/istruzioni che costruiranno il contenitore:

  • FROM Definisce ubuntu:16.04 immagine di base da utilizzare.
  • RUN – Esegue i comandi in un nuovo livello nella parte superiore dell'immagine di base.
  • CMD – CMD consente di eseguire i comandi. Esistono due modi in cui i comandi vengono eseguiti tramite exec o utilizzando i formati della shell.
  • EXPOSE – Informa Docker che il contenitore è in ascolto sulle porte di rete specificate in fase di esecuzione. Il contenitore sarà esposto sul vaso 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. Quindi, esegui docker build comando per creare l'immagine Docker. Il t flag tagga l'immagine sshd_container e. consente a Docker di selezionare tutti i file necessari dalla directory di lavoro attuale.

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

4. Ora, esegui le docker images comando per ispezionare l'immagine creata. Nota il REPOSITORY attributo. Questo attributo è il tag creato con -t flag nel passaggio precedente.

5. Esegui docker run per creare ed eseguire il contenitore dall'immagine dicendo a Docker di eseguire l'immagine in background (-d ),

Il comando seguente indica a Docker di creare ed eseguire il contenitore chiamato test_sshd_container sullo sfondo (-d ), utilizzando sshd_tagged_image immagine di nuova creazione creata nel passaggio 3 e per pubblicare tutte le porte definite nel Dockerfile come porte casuali.

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

Dopo l'esecuzione riuscita del comando di esecuzione Docker, vedrai che l'ID del contenitore viene generato di seguito.

6. Esegui docker port per verificare la connettività SSH tra l'host Docker e il container. La docker port command list sono le mappature delle porte o una mappatura specifica per il container.

sudo docker port test_sshd_container

Dovresti vedere l'output di 22/TCP → 0.0.0.0:32769 , che indica che la porta 22 del container è mappata sulla porta esterna 32769 .

7. Quindi, trova l'indirizzo IP del contenitore. Per farlo, esegui docker inspect comando. La docker inspect Il comando interroga le informazioni Docker e visualizza i risultati nell'array JSON utilizzando un format parametro.

Vedrai il format parametro parametro di seguito utilizza l'range per trovare l'indirizzo IP del contenitore controllando NetworkSettingsNetworksIPAddress .

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

8. Infine, ora che hai l'indirizzo IP per SSH, prova a inviare SSH al contenitore e dovrebbe funzionare!

ssh [email protected] 

Conclusione

Ora dimostri di conoscere alcuni modi per SSH in un contenitore Docker utilizzando alcuni approcci diversi. Utilizzando uno di questi approcci, dovresti essere in grado di risolvere i problemi e gestire i tuoi container.

Con questa nuova conoscenza, come pensi di inviare SSH al tuo container ora?


Docker
  1. Come creare, elencare ed eliminare contenitori Docker su Linux

  2. Come SSH in un contenitore Docker

  3. Come montare una directory host in un contenitore Docker

  4. Come eseguire il backup e il ripristino dei container Docker

  5. Come mettere in pausa e riprendere i contenitori Docker

Come rimuovere i contenitori Docker

Come fermare i container Docker

Come rinominare o rinominare i contenitori Docker

Come SSH in un Docker Container

Come gestire i container Docker

Come elencare/avviare/arrestare/eliminare i contenitori docker