Cómo instalar Docker en Debian 9 Stretch

Explicamos en este artículo cómo instalar Docker en Debian 9 Stretch paso a paso, de modo que puedas lanzar aplicaciones y servicios aislados en contenedores sobre tu servidor o VPS Debian.

Antes de instalar Docker en Debian 9 Stretch

Para poder seguir los pasos de esta guía de instalación de Docker en Debian 9 Stretch será necesario partir del siguiente escenario:

  • Una máquina Debian 9 Stretch actualizado.
  • Un usuario con privilegios de sudo.
  • Acceso a Internet.

Además necesitamos algunas herramientas del sistema que obtendremos de los repositorios de Debian 9, para lo que los actualizamos:

~$ sudo apt update

E instalamos los paquetes relacionados:

~$ sudo apt install -y apt-transport-https wget

Cómo configurar el repositorio de Docker para Debian 9 Stretch

Necesitamos configurar el repositorio oficial de Docker para Debian 9 Stretch, para lo que creamos un nuevo archivo de repositorio en el directorio de repositorios de apt:

~$ sudo nano /etc/apt/sources.list.d/docker.list

Con el siguiente contenido:

deb [arch=amd64] https://download.docker.com/linux/debian stretch stable

Guardamos los cambios y cerramos el archivo.

Instalamos la clave pública para comprobar las firmas de los paquetes procedentes del nuevo repositorio:

~$ wget https://download.docker.com/linux/debian/gpg -O- | sudo apt-key add

Ya podemos actualizar las listas de paquetes de los repositorios del sistema, que ahora incluirán también el nuevo repositorio de Docker:

~$ sudo apt update

Cómo instalar Docker en Debian 9 Stretch

Para instalar Docker en Debian 9 Stretch instalaremos los siguientes paquetes desde el repositorio que acabamos de configurar:

~$ sudo apt install -y containerd.io docker-ce docker-ce-cli

Tras la descarga e instalación de Docker se crean nuevos servicios en Debian 9, los servicios containerd.service y docker.service, o simplemente containerd y docker, que quedan en ejecución y habilitados para su inicio automático en cada arranque del sistema.

Podemos comprobar en cualquier momento el estado de ambos servicios con el comando systemctl status containerd docker:

como instalar docker en debian 9 stretch

Cómo saber la versión de Docker instalada en Debian 9

Si necesitas saber con qué versión de Docker estás trabajando puedes averiguarlo con la opción -v del comando docker:

~$ docker -v
Docker version 19.03.15, build 99e3ed8919

Cómo probar Docker en Debian 9 Stretch

Vamos a probar la nueva instalación de Docker en Debian 9 lanzando nuestro primer contenedor mediante la opción run del comando docker:

~$ sudo docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
1b930d010525: Pull complete
Digest: sha256:4df8ca8a7e309c256d60d7971ea14c27672fc0d10c5f303856d7bc48f8cc17ff
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

Este comando lanza un contenedor a partir de una imagen, hello-world en este caso, que no está presente en el sistema, por lo que se descarga dicha imagen y a continuación se instancia el contenedor a partir de la misma.

La siguiente vez que se lance el comando anterior ya no será necesario descargar la imagen, porque está disponible localmente:

~$ sudo docker run hello-world

docker en debian 9 stretch

Cómo utilizar Docker en Debian 9

Trabajar con Docker sin sudo

Puede que sea molesto tener que estar continuamente utilizando sudo para trabajar con Docker, pero esto se soluciona fácilmente añadiendo los usuarios de Debian 9 que vayan a trabajar con Docker al grupo docker:

~$ sudo adduser chacho docker

La configuración de grupos no será efectiva hasta el siguiente inicio de sesión del usuario. En ese momento ya será posible lanzar docker sin sudo:

~$ docker run hello-world

Hello from Docker!
...

Estado de los contenedores

Como puede que en este momento hayas lanzado varias veces el mismo comando sobre la misma imagen, es importante saber que cada vez se ha creado un contenedor distinto. Esto es fácil de ver mediante el comando ps de Docker:

~$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
036be72b196d        hello-world         "/hello"            5 minutes ago       Exited (0) 5 minutes ago                        ecstatic_euclid
b393a807da07        hello-world         "/hello"            6 minutes ago       Exited (0) 6 minutes ago                        hopeful_rosalind
fb18da422e4d        hello-world         "/hello"            13 minutes ago      Exited (0) 13 minutes ago                       zen_chatterjee
2fdb7c59b842        hello-world         "/hello"            17 minutes ago      Exited (0) 17 minutes ago                       focused_sinoussi

El modificador -a muestra todos los contenedores disponibles, incluso los ya finalizados.

Se mostrará información de todos los contenedores creados en Debian 9 organizada en las siguientes columnas:

  • «CONTAINER ID«: El identificador que Docker crea para manejar cada contenedor.
  • «IMAGE«: La imagen desde la que se crea el contenedor.
  • «COMMAND«: El comando que se ha ejecutado en el contenedor.
  • «CREATED«: Fecha de creación del contenedor.
  • «STATUS«: Estado actual del contenedor, en este ejemplo todos los contenedores finalizaron su ejecución.
  • «PORTS«: Puertos de conexión que expone el contenedor, en caso de tratarse de servicios.
  • «NAMES«: Nombres aleatorios que Docker asigna a cada contenedor, si el usuario no indica ninguno, para facilitar su uso.

Eliminar contenedores

Como no tienen mucho uso, podemos eliminar todos estos contenedores mediante el comando rm de Docker especificando el identificador:

~$ docker rm 036be72b196d

O también podríamos especificar el nombre:

~$ docker rm hopeful_rosalind

Usaremos este comando para eliminar todos los contenedores inservibles, teniendo en cuenta que lo que se borra es los contenedores, no la imagen desde la que se instancian.

Lanzar un contenedor Docker en ejecución en segundo plano en Debian 9

En esta ocasión vamos a crear un contenedor de un servicio desde su imagen correspondiente (que se descargará al no estar disponible localmente), especificando un nombre personalizado para reutilizar fácilmente el contenedor (opción –name), lanzándolo en segundo plano (opción –d) y enlazando el puerto interno del servicio del contenedor con un puerto de la máquina Debian 9 (opción -p):

~$ docker run --name webserver -d -p 80:80 nginx

Sabremos que todo ha ido bien al ver el identificador devuelto en consola. Pero si usamos el comando ps de Docker comprobaremos que efectivamente el contenedor no ha finalizado su ejecución:

~$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
e1619596d5da        nginx               "/docker-entrypoint.…"   7 seconds ago       Up 5 seconds        0.0.0.0:80->80/tcp   webserver

Como hemos mapeado el puerto del servicio del contenedor, podemos conectar a través del puerto local de la máquina Debian 9, por ejemplo, con el comando wget:

~$ wget localhost -qO-

docker sobre debian 9 stretch

Obtenemos la página por defecto del servicio web del contenedor, que se verá bastante mejor si en lugar de desde consola conectamos desde un navegador.

Lanzar comandos dentro de un contenedor

Es posible lanzar comandos en un contenedor en ejecución con el comando exec de Docker:

~$ docker exec webserver ls -l
total 72
drwxr-xr-x  2 root root 4096 Mar 29 00:00 bin
drwxr-xr-x  2 root root 4096 Mar 19 23:44 boot
drwxr-xr-x  5 root root  340 Apr  6 12:28 dev
drwxr-xr-x  1 root root 4096 Mar 31 05:24 docker-entrypoint.d
-rwxrwxr-x  1 root root 1202 Mar 31 05:24 docker-entrypoint.sh
drwxr-xr-x  1 root root 4096 Apr  6 12:28 etc
drwxr-xr-x  2 root root 4096 Mar 19 23:44 home
drwxr-xr-x  1 root root 4096 Mar 31 05:24 lib
drwxr-xr-x  2 root root 4096 Mar 29 00:00 lib64
drwxr-xr-x  2 root root 4096 Mar 29 00:00 media
drwxr-xr-x  2 root root 4096 Mar 29 00:00 mnt
drwxr-xr-x  2 root root 4096 Mar 29 00:00 opt
dr-xr-xr-x 81 root root    0 Apr  6 12:28 proc
drwx------  2 root root 4096 Mar 29 00:00 root
drwxr-xr-x  1 root root 4096 Apr  6 12:28 run
drwxr-xr-x  2 root root 4096 Mar 29 00:00 sbin
drwxr-xr-x  2 root root 4096 Mar 29 00:00 srv
dr-xr-xr-x 13 root root    0 Apr  6 11:38 sys
drwxrwxrwt  1 root root 4096 Mar 31 05:24 tmp
drwxr-xr-x  1 root root 4096 Mar 29 00:00 usr
drwxr-xr-x  1 root root 4096 Mar 29 00:00 var

En este ejemplo, los archivos y directorios mostrados pertenecen al sistema de archivos del contenedor, no al de la máquina Debian 9. Al terminar la ejecución del comando, se recupera el control de la consola. Sin embargo, podemos trabajar interactivamente con un contenedor usando el parámetro -it y lanzando un comando interactivo que esté includo en el contenedor. Por ejemplo, el contenedor con que trabajamos cuenta con una shell de comandos como bash o sh:

~$ docker exec -it webserver bash
root@81c62342d206:/#

El cambio que refleja la terminal indica que a partir de este momento trabajamos sobre el contenedor.

Al recuperar la línea de comandos de Debian 9, saliendo de la shell con exit, el contenedor seguirá en ejecución.

Detener un contenedor

Para detener la ejecución del contenedor en segundo plano, usaremos el comando stop de Docker, indicando el identificador o nombre del contenedor:

~$ docker stop webserver

Reanudar un contenedor

Como ya sabemos que cuando finaliza un contenedor no desaparece, podemos volver a lanzarlo y reutilizarlo con el comando start, usando su identificador o, mejor aún, el nombre personalizado que indicamos al crearlo:

~$ docker start webserver

En esta ocasión no será necesario indicar el mapeo de puertos, ejecución en segundo plano, etc. porque todo ello forma parte del estado con el que se creó el contenedor.

Conclusión

Ahora que sabes cómo instalar Docker en Debian 9 Stretch paso a paso ya tienes una base para empezar a trabajar y experimentar con contenedores con la pequeña introducción de esta guía.

Si este tutorial te ha resultado útil y puedes trabajar con contenedores en tu sistema, puedes agradecérnoslo invitándonos a un café:

 

O también puedes dejar una propina desde PayPal:

¡Gracias!

 

Deja un comentario

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información

ACEPTAR
Aviso de cookies