GNU/Linux >> Tutoriales Linux >  >> Panels >> Docker

Cómo usar SSH en contenedores Docker [paso a paso]

Cuando necesite solucionar problemas o echar un vistazo rápido a un contenedor Docker, SSH es una excelente opción. SSH le permite conectarse rápidamente a un contenedor en ejecución y ver qué está pasando. Pero la conexión a un contenedor Docker primero implica cierta configuración y tiene algunas opciones diferentes.

En este tutorial, aprenderá a usar SSH en contenedores Docker usando docker run comando y un Dockerfile.

¡Comencemos!

Requisitos previos

Si desea seguir paso a paso, asegúrese de tener lo siguiente:

  • Un servidor Linux. Este tutorial usa Ubuntu 18.04.5 LTS.
  • Docker instalado en el host de Linux. Este tutorial usa Docker v19.03.8.

Inicio de un contenedor y SSH en contenedores Docker con docker run

La docker run command es un comando de Docker que ejecuta un comando cuando aparece un nuevo contenedor por primera vez. Usando docker run , puede iniciar una sesión SSH interactiva en un contenedor siguiendo los pasos a continuación.

Antes de comenzar esta sección, asegúrese de tener una imagen de Docker descargada y disponible. Este tutorial utiliza la última imagen de Ubuntu Docker disponible en Docker Hub.

Para SSH en contenedores Docker con docker run :

1. Abra una terminal en su máquina local.

2. Ejecute docker run comando proporcionando:

  • El name del contenedor a ejecutar (ubuntu_container_ssh )
  • La i indicador que indica que le gustaría abrir una sesión SSH interactiva en el contenedor. El i bandera no cierra la sesión SSH incluso si el contenedor no está adjunto.
  • El t flag asigna un pseudo-TTY que se puede usar mucho para ejecutar comandos de forma interactiva.
  • La imagen base para crear el contenedor (ubuntu ).
# Creating the container named ubuntu_container_ssh and start a Bash session.
sudo docker run --name ubuntu_container_ssh -i -t ubuntu

En este punto, está SSH conectado al contenedor y puede ejecutar cualquier comando que desee.

3. A continuación, ejecute cualquier comando, como touch dominio. El comando táctil creará una nueva carpeta llamada myfolder en el tmp directorio, como se muestra a continuación.

touch /tmp/myfolder

¡Ahora puede ejecutar cualquier comando que desee!

Finalmente, cuando haya terminado de ejecutar los comandos, escriba exit para cerrar la sesión.

SSH en contenedores Docker en ejecución con docker exec

En la sección anterior, aprendió a ejecutar comandos SSH al iniciar un nuevo contenedor Docker. Pero, ¿qué sucede si necesita usar SSH en contenedores Docker que ya se están ejecutando? Ejecutas el docker exec comando.

El docker exec El comando crea un shell Bash dentro de un contenedor en ejecución y es una excelente manera de enviar comandos SSH a un contenedor.

Antes de comenzar esta sección, asegúrese de tener una imagen de Docker descargada y disponible. Este tutorial utiliza la imagen NGINX Docker más reciente disponible en Docker Hub.

Para SSH en un contenedor Docker en ejecución con docker exec :

1. Abra una terminal en su máquina local.

2. A continuación, ejecute docker run comando para iniciar el contenedor. Asegúrese de especificar el -d marca para ejecutar el contenedor en segundo plano para mantenerlo activo hasta que lo elimine. El siguiente comando inicia un contenedor llamado nginx-testing .

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

3. Ahora, ejecute el comando docker ps para verificar que el contenedor se está ejecutando. El docker ps El comando enumerará todos los contenedores en ejecución que se ejecutan en el host de Docker.

4. Finalmente, ejecute docker exec , como se muestra a continuación, a SSH en el contenedor en ejecución llamado nginx-testing . En el siguiente fragmento de código:

  • docker exec el comando se ejecuta (/bin/bash ) para obtener un shell Bash en el contenedor.
  • -it flag le permite ejecutar un contenedor en modo interactivo, es decir, puede ejecutar comandos dentro del contenedor mientras aún se está ejecutando.
  • nginx-testing es el nombre del contenedor.
sudo docker exec -it nginx-testing /bin/bash

Configuración de un servidor OpenSSH y conexión con un Dockerfile

Hasta ahora, el tutorial ha asumido que se está conectando a un contenedor que ya tiene algún servidor SSH instalado. Pero, ¿y si no es así? ¿Quizás la imagen que está utilizando aún no tiene instalado OpenSSH y necesita configurarlo primero?

Con un Dockerfile, puede configurar todas las tareas necesarias no solo para SSH en contenedores Docker, sino también para configurar un servidor OpenSSH desde cero.

Suponiendo que aún tenga abierta su terminal local:

1. Opcionalmente, cree un directorio para almacenar el Dockerfile. Este tutorial usará ~/DockerFileContainerTest directorio.

2. Abra su editor de texto favorito, copie y pegue el siguiente Dockerfile dentro y guárdelo como Dockerfile dentro de ~/DockerFileContainerTest directorio. Este Dockerfile contiene todos los comandos y configuraciones para crear una nueva imagen de Docker sobre cualquier imagen base y configurar OpenSSH.

El DockerFile a continuación contiene varios pasos/instrucciones que construirán el contenedor:

  • FROM Define el ubuntu:16.04 imagen base a usar.
  • RUN – Ejecuta comandos en una nueva capa en la parte superior de la imagen base.
  • CMD – CMD le permite ejecutar los comandos. Hay dos formas en que los comandos se ejecutan, ya sea a través de exec o usando formatos de shell.
  • EXPOSE – Informa a Docker que el contenedor escucha en los puertos de red especificados en tiempo de ejecución. El contenedor estará expuesto en la maceta 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. A continuación, ejecute docker build comando para crear la imagen de Docker. El t flag etiqueta la imagen sshd_container y . permite a Docker seleccionar todos los archivos necesarios del directorio de trabajo actual.

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

4. Ahora, ejecuta las docker images comando para inspeccionar la imagen creada. Tenga en cuenta el REPOSITORIO atributo. Este atributo es la etiqueta creada con -t bandera en el paso anterior.

5. Ejecute docker run para crear y ejecutar el contenedor desde la imagen y decirle a Docker que ejecute la imagen en segundo plano (-d ),

El siguiente comando le indica a Docker que cree y ejecute el contenedor llamado test_sshd_container en el fondo (-d ), utilizando sshd_tagged_image imagen recién creada que creó en el paso 3 y para publicar todos los puertos definidos en el Dockerfile como puertos aleatorios.

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

Después de la ejecución exitosa del comando de ejecución de Docker, verá que la ID del contenedor se genera a continuación.

6. Ejecute docker port para verificar la conectividad SSH entre el host Docker y el contenedor. El docker port la lista de comandos son las asignaciones de puertos o una asignación específica para el contenedor.

sudo docker port test_sshd_container

Debería ver la salida de 22/TCP → 0.0.0.0:32769 , que indica que el puerto 22 del contenedor está asignado al puerto externo 32769 .

7. A continuación, busque la dirección IP del contenedor. Para hacer eso, ejecute docker inspect dominio. La docker inspect El comando consulta la información de Docker y presenta los resultados en una matriz JSON usando un format parámetro.

Verás el format El argumento del parámetro a continuación usa el range atributo para encontrar la dirección IP del contenedor comprobando NetworkSettingsNetworksIPAddress .

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

8. Finalmente, ahora que tiene la dirección IP para SSH, intente SSH para el contenedor, ¡y debería funcionar!

ssh [email protected] 

Conclusión

Ahora muestra que conoce algunas formas de SSH a un contenedor Docker utilizando algunos enfoques diferentes. Con uno de estos enfoques, debería poder solucionar problemas y administrar sus contenedores.

Con este nuevo conocimiento, ¿cómo planea conectarse SSH a su contenedor ahora?


Docker
  1. Cómo usar SSH en un contenedor Docker

  2. Cómo montar un directorio de host en un contenedor Docker

  3. Cómo compartir datos entre contenedores Docker

  4. Cómo listar contenedores Docker

  5. Cómo hacer una copia de seguridad y restaurar contenedores Docker

Cómo eliminar contenedores Docker

Cómo detener los contenedores de Docker

Cómo nombrar o renombrar contenedores Docker

Cómo usar SSH en un contenedor Docker

Cómo gestionar contenedores Docker

Cómo listar/iniciar/detener/eliminar contenedores docker