Cómo comprobar los detalles de la instalación de Docker

DockerDockerBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

Docker es una poderosa plataforma de contenerización que ha revolucionado la forma en que los desarrolladores crean, implementan y gestionan aplicaciones. En este tutorial, aprenderás cómo verificar tu instalación de Docker y asegurarte de que funciona correctamente. También descubrirás cómo solucionar los problemas comunes que pueden surgir al trabajar con Docker.

Al final de este laboratorio (lab), tendrás una comprensión sólida de cómo comprobar los detalles de la instalación de Docker y verificar que tu entorno de Docker está funcionando correctamente.

Este Lab requiere una conexión a Internet para el aprendizaje, por lo que solo los usuarios Pro pueden iniciar la máquina virtual (VM). Actualiza tu cuenta a Pro

Comprobación de la versión y el estado de Docker

Antes de sumergirte en las operaciones de Docker, es esencial verificar que Docker esté correctamente instalado en tu sistema y funcionando correctamente. En este paso, comprobaremos la versión de Docker y el estado del daemon.

Comprobar la versión de Docker

Primero, comprobemos la versión de Docker instalada en tu sistema. Abre una terminal y ejecuta el siguiente comando:

docker --version
docker version

Este comando muestra la versión de Docker instalada. Deberías ver una salida similar a:

Docker version 20.10.21, build baeda1f

Para obtener información de versión más detallada, incluyendo tanto los componentes del cliente como del servidor, utiliza:

docker version

Esto mostrará información de versión completa para el cliente y el servidor (daemon) de Docker, junto con otros detalles como la versión de Go utilizada para compilar Docker. La salida se verá algo así:

Client:
 Version:           20.10.21
 API version:       1.41
 Go version:        go1.18.1
 Git commit:        baeda1f
 Built:             Tue Oct 25 18:02:28 2022
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

Server:
 Engine:
  Version:          20.10.21
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.18.1
  Git commit:       3056208
  Built:            Tue Oct 25 18:00:19 2022
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.6.10
  GitCommit:        770bd0108c32f3fb5c73ae1264f7e503fe7b2661
 runc:
  Version:          1.1.4
  GitCommit:        v1.1.4-0-g5fd4c4d
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

Si recibes un error que dice "docker: command not found", indica que Docker no está instalado correctamente o no está en tu PATH.

Comprobar el estado del daemon de Docker

A continuación, verifiquemos que el daemon (servicio) de Docker esté en ejecución. El daemon de Docker es el servicio en segundo plano responsable de gestionar los contenedores de Docker.

Ejecuta el siguiente comando:

sudo systemctl status docker

Deberías ver una salida que indique que el servicio de Docker está activo y en ejecución:

● docker.service - Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2023-05-10 12:34:56 UTC; 2h 15min ago
   Main PID: 1234 (dockerd)
      Tasks: 8
     Memory: 38.5M
        CPU: 25.102s
     CGroup: /system.slice/docker.service
             └─1234 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

Si el servicio de Docker no está en ejecución, puedes iniciarlo con:

sudo systemctl start docker

Para asegurarte de que Docker se inicie automáticamente cuando se inicie tu sistema, puedes habilitarlo:

sudo systemctl enable docker

Comprobar la información de Docker

Para obtener una visión general completa de tu instalación de Docker, utiliza el comando docker info:

docker info

Esto mostrará información detallada sobre tu instalación de Docker, incluyendo:

  • Cantidad de contenedores e imágenes
  • Controlador de almacenamiento
  • Directorio raíz de Docker
  • Información de tiempo de ejecución (runtime)
  • Configuración de red
  • Configuración del registro (registry)

La salida será bastante extensa, pero proporciona información valiosa sobre tu configuración de Docker.

Ejecución de un contenedor de prueba

Ahora que hemos confirmado que Docker está instalado y en funcionamiento, probémoslo ejecutando un contenedor sencillo. Este paso verificará que Docker puede descargar imágenes y ejecutar contenedores correctamente.

El contenedor Hello World

Docker proporciona una sencilla imagen "hello-world" específicamente diseñada para probar las instalaciones de Docker. Este diminuto contenedor verifica que:

  • El cliente de Docker puede conectarse al daemon de Docker
  • El daemon de Docker puede descargar imágenes de Docker Hub
  • Docker puede crear y ejecutar un contenedor

Ejecutemos este contenedor de prueba con el siguiente comando:

docker run hello-world

Cuando ejecutes este comando por primera vez, Docker:

  1. Comprobará si la imagen hello-world existe localmente
  2. Si no existe, la descargará de Docker Hub
  3. Creará un contenedor a partir de esta imagen
  4. Iniciará el contenedor, que imprimirá un mensaje y saldrá

Deberías ver una salida similar a:

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
2db29710123e: Pull complete
Digest: sha256:ffb13da98453e0f04d33a6eee5bb8e46ee50d08ebe17735fc0779d0349e889e9
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 mensaje confirma que tu instalación de Docker está funcionando correctamente.

Listado de contenedores

Después de ejecutar el contenedor hello-world, comprobemos la lista de contenedores en tu sistema. El contenedor que acabamos de ejecutar ya ha salido, pero todavía podemos verlo en la lista de todos los contenedores.

Para ver todos los contenedores (incluidos los detenidos), ejecuta:

docker ps -a

Deberías ver una salida similar a:

CONTAINER ID   IMAGE         COMMAND    CREATED         STATUS                     PORTS   NAMES
b7c33e8f6cb8   hello-world   "/hello"   2 minutes ago   Exited (0) 2 minutes ago           romantic_galileo

La bandera -a muestra todos los contenedores, incluyendo aquellos que se han detenido. Sin esta bandera, docker ps solo mostraría los contenedores en ejecución.

Observa que la columna STATUS muestra "Exited (0)", lo que significa que el contenedor completó su tarea y salió con un código de estado 0 (lo que indica éxito).

Listado de imágenes de Docker

La imagen hello-world se descargó en tu máquina local. Verifiquemos esto listando todas las imágenes de Docker:

docker images

Deberías ver una salida similar a:

REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
hello-world   latest    feb5d9fea6a5   6 months ago   13.3kB

Esto confirma que la imagen hello-world está almacenada localmente en tu sistema.

Exploración de comandos básicos de Docker

Ahora que hemos verificado que nuestra instalación de Docker funciona correctamente, exploremos algunos comandos básicos de Docker que te ayudarán a gestionar contenedores e imágenes.

Ejecución de un contenedor interactivo

A diferencia del contenedor hello-world que se ejecuta y sale inmediatamente, podemos ejecutar contenedores de forma interactiva. Ejecutemos un contenedor de Ubuntu e interactuemos con su shell:

docker run -it ubuntu bash

Este comando:

  • -i mantiene abierto STDIN
  • -t asigna una pseudo-TTY (terminal)
  • ubuntu es el nombre de la imagen
  • bash es el comando a ejecutar dentro del contenedor

Una vez que el contenedor se inicie, estarás en un prompt de bash dentro del contenedor:

root@3f4d92618a09:/#

El prompt muestra que has iniciado sesión como root en el contenedor. La cadena alfanumérica es el ID del contenedor.

Intenta ejecutar algunos comandos de Linux dentro del contenedor:

cat /etc/os-release

Esto mostrará información sobre la versión de Ubuntu que se está ejecutando en el contenedor:

PRETTY_NAME="Ubuntu 24.04.1 LTS"
NAME="Ubuntu"
VERSION_ID="24.04"
VERSION="24.04.1 LTS (Noble Numbat)"
VERSION_CODENAME=noble
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=noble
LOGO=ubuntu-logo

Cuando hayas terminado de explorar, sal del contenedor escribiendo:

exit

Esto te devolverá a la terminal del host.

Gestión del ciclo de vida de un contenedor

Exploremos cómo gestionar el ciclo de vida de un contenedor. Primero, iniciaremos un contenedor en modo desatendido (detached mode):

docker run -d --name web nginx

Este comando:

  • -d ejecuta el contenedor en modo desatendido (en segundo plano)
  • --name web asigna el nombre "web" al contenedor
  • nginx es la imagen a utilizar

Verás un largo ID de contenedor impreso en la pantalla.

Ahora, comprobemos que el contenedor está en ejecución:

docker ps

Deberías ver el contenedor nginx en ejecución:

CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS     NAMES
7d3f8c1f8a3d   nginx     "/docker-entrypoint.…"   10 seconds ago   Up 10 seconds   80/tcp    web

Para detener el contenedor:

docker stop web

Verifica que esté detenido:

docker ps

El contenedor ya no debería aparecer en la lista de contenedores en ejecución. Para ver todos los contenedores, incluyendo los detenidos:

docker ps -a

Deberías ver tanto el contenedor nginx como el hello-world en estado detenido.

Para iniciar el contenedor nuevamente:

docker start web

Y para eliminar un contenedor cuando ya no lo necesites:

docker stop web
docker rm web

Gestión de imágenes de Docker

Exploremos cómo gestionar las imágenes de Docker. Para listar todas las imágenes:

docker images

Deberías ver al menos las imágenes hello-world y nginx.

Para eliminar una imagen cuando ya no la necesites:

docker rmi hello-world

Ten en cuenta que no puedes eliminar imágenes que estén siendo utilizadas por contenedores (incluso si están detenidos). Tendrás que eliminar esos contenedores primero.

Información del sistema de Docker

Para comprobar el espacio en disco utilizado por Docker (contenedores, imágenes, volúmenes):

docker system df

Esto mostrará un resumen del uso del disco:

TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          2         1         187.8MB   187.8MB (99%)
Containers      2         0         0B        0B
Local Volumes   0         0         0B        0B
Build Cache     0         0         0B        0B

Para obtener información más detallada:

docker system df -v

Esto mostrará un desglose de cada imagen y contenedor y sus tamaños.

Solución de problemas comunes de Docker

Incluso con un entorno de Docker instalado correctamente, es posible que encuentres problemas durante el uso normal. Exploremos algunos problemas comunes de Docker y sus soluciones.

Problema: El daemon de Docker no está en ejecución

Puedes omitir este paso si ya has iniciado el servicio de Docker en el paso anterior.

Si intentas ejecutar un comando de Docker y obtienes un error como este:

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

Esto significa que el daemon de Docker no está en ejecución. Para resolverlo:

  1. Comprueba el estado del servicio de Docker:
sudo systemctl status docker
  1. Si no está en ejecución, inícialo:
sudo systemctl start docker
  1. Si el servicio no se inicia, comprueba los registros (logs) en busca de errores:
sudo journalctl -u docker

Simulemos este problema y su resolución:

## Primero, detén el servicio de Docker para simular el problema
sudo systemctl stop docker

## Intenta ejecutar un comando de Docker
docker ps

## Verás el error "Cannot connect"
## Ahora reinicia el servicio para solucionarlo
sudo systemctl start docker

## Verifica que Docker está funcionando de nuevo
docker ps

Problema: Permiso denegado

Si ves un error como:

Got permission denied while trying to connect to the Docker daemon socket

Esto generalmente significa que tu usuario no tiene permiso para acceder al socket de Docker. La solución es agregar tu usuario al grupo docker:

sudo usermod -aG docker $USER

Después de ejecutar este comando, normalmente tendrías que cerrar sesión y volver a iniciar sesión para que los cambios surtan efecto. Dado que estamos en un entorno de laboratorio (lab) con el usuario labex que ya tiene los permisos adecuados, no es necesario realizar este paso.

Problema: Problemas de espacio en disco

Docker puede consumir una cantidad significativa de espacio en disco con el tiempo debido a imágenes, contenedores y volúmenes no utilizados. Si tu sistema se está quedando sin espacio en disco:

  1. Comprueba el uso del disco de Docker:
docker system df
  1. Elimina los recursos no utilizados:
## Elimina todos los contenedores detenidos
docker container prune

## Elimina todas las imágenes no utilizadas
docker image prune

## Elimina todos los volúmenes no utilizados
docker volume prune

## O elimina todo lo no utilizado con un solo comando
docker system prune

Demostremos el comando de purga (prune):

## Crea algunos contenedores que saldrán inmediatamente
docker run hello-world
docker run ubuntu echo "This will exit immediately"

## Ahora purga los contenedores detenidos
docker container prune

Se te pedirá que confirmes la operación:

WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y

Escribe y para confirmar. Deberías ver una salida que muestre los contenedores eliminados.

Problema: El contenedor no se inicia

Si un contenedor no se inicia, puedes investigar comprobando sus registros (logs):

## Primero, intenta iniciar un contenedor que podría fallar
docker run --name failing-container ubuntu apt-get update

## Comprueba los registros
docker logs failing-container

Puedes ver errores en los registros que indiquen por qué el contenedor falló.

Problema: Problemas de red

Si los contenedores no pueden comunicarse entre sí o con el mundo exterior:

  1. Comprueba la configuración de red de Docker:
docker network ls
  1. Inspecciona una red específica:
docker network inspect bridge
  1. Prueba la conectividad desde dentro de un contenedor:
## Inicia un contenedor con red
docker run -it ubuntu bash

## Desde dentro del contenedor, instala ping
apt-get update && apt-get install -y iputils-ping

## Intenta hacer ping a un sitio web
ping google.com

## Sal del contenedor
exit

Registros (logs) y depuración de Docker

Para la solución general de problemas de Docker, comprobar los registros del daemon de Docker puede ser útil:

sudo journalctl -u docker

Para los registros de un contenedor específico:

docker logs <container_id>

También puedes obtener un flujo en tiempo real de los registros:

docker logs -f <container_id>

Estas técnicas de solución de problemas te ayudarán a diagnosticar y resolver la mayoría de los problemas comunes de Docker.

Resumen

En este laboratorio, has aprendido habilidades esenciales para verificar y gestionar tu instalación de Docker:

  • Comprobar la versión de Docker y el estado del daemon para confirmar una instalación correcta
  • Ejecutar contenedores de prueba para verificar la funcionalidad de Docker
  • Utilizar comandos básicos de Docker para gestionar contenedores e imágenes
  • Explorar la gestión del ciclo de vida de los contenedores
  • Solucionar problemas comunes de Docker

Estas habilidades proporcionan una base sólida para trabajar con contenedores de Docker. Ahora puedes verificar con confianza que tu entorno de Docker está configurado correctamente y solucionar cualquier problema que pueda surgir.

A medida que continúes tu viaje con Docker, puedes basarte en estos fundamentos para crear, desplegar y gestionar aplicaciones contenerizadas de manera eficiente.