Introducción a Docker
1. ¿Qué es Docker? #
Docker es una plataforma que permite crear, ejecutar y distribuir aplicaciones mediante contenedores.
Un contenedor incluye la aplicación y todo lo que necesita para funcionar:
- Librerías.
- Dependencias.
- Archivos de configuración.
- Herramientas necesarias para ejecutar la aplicación.
Esto permite que una aplicación pueda funcionar de una forma muy similar independientemente del equipo donde se ejecute.
Podemos pensar en Docker como una forma de empaquetar una aplicación junto con su entorno.
Por ejemplo, podemos tener un contenedor preparado con:
1Linux 2Nginx 3PHP 4Nuestra aplicación web
Ese mismo contenedor podría ejecutarse en nuestro ordenador, en un servidor o en un servicio en la nube.
2. ¿Para qué se utiliza Docker? #
Docker se utiliza principalmente para facilitar la instalación y ejecución de aplicaciones.
Algunos usos habituales son:
- Crear entornos de desarrollo.
- Ejecutar servidores web.
- Ejecutar bases de datos.
- Realizar pruebas de aplicaciones.
- Crear entornos aislados.
- Desplegar aplicaciones en servidores.
- Automatizar despliegues.
- Crear arquitecturas basadas en microservicios.
Por ejemplo, si queremos utilizar un servidor web Nginx, en lugar de instalarlo y configurarlo directamente en nuestro sistema operativo podemos utilizar una imagen Docker ya preparada.
3. Docker y las máquinas virtuales #
Docker puede parecer similar a una máquina virtual, pero existen diferencias importantes.
Máquina virtual #
Una máquina virtual contiene un sistema operativo completo.
Podríamos tener:
1ORDENADOR FÍSICO 2│ 3├── Sistema operativo anfitrión 4│ 5├── Máquina virtual 1 6│ └── Sistema operativo completo 7│ 8└── Máquina virtual 2 9 └── Sistema operativo completo
Cada máquina virtual necesita sus propios recursos:
- Memoria RAM.
- Procesador.
- Espacio en disco.
- Sistema operativo.
Contenedores Docker #
Los contenedores son mucho más ligeros.
Los diferentes contenedores comparten determinados recursos del sistema operativo anfitrión.
1ORDENADOR 2│ 3├── Sistema operativo 4│ 5├── Docker 6│ 7├── Contenedor 1 8├── Contenedor 2 9└── Contenedor 3
Esto permite ejecutar muchos contenedores consumiendo normalmente menos recursos que utilizando máquinas virtuales completas.
4. Ventajas de Docker #
Docker presenta varias ventajas.
Rapidez #
Los contenedores pueden iniciarse en pocos segundos.
Poco consumo de recursos #
Normalmente consumen menos recursos que una máquina virtual completa.
Portabilidad #
Una aplicación empaquetada en Docker puede ejecutarse en diferentes equipos que tengan Docker disponible.
Aislamiento #
Cada aplicación puede ejecutarse dentro de su propio contenedor.
Por ejemplo:
1Contenedor 1 → PHP 8.1 2 3Contenedor 2 → PHP 8.3
Ambos podrían ejecutarse en el mismo equipo sin necesidad de instalar directamente las dos versiones de PHP en el sistema anfitrión.
Facilidad de despliegue #
Podemos preparar una aplicación una vez y posteriormente ejecutarla utilizando la misma configuración en diferentes entornos.
5. Imágenes y contenedores #
Para trabajar con Docker es fundamental distinguir entre imagen y contenedor.
Imagen #
Una imagen Docker es una plantilla que contiene todo lo necesario para crear un contenedor.
Por ejemplo:
1ubuntu 2debian 3nginx 4mysql 5postgres
son nombres de imágenes que podemos utilizar.
Una imagen por sí misma no es un programa en ejecución.
Contenedor #
Un contenedor es una instancia en ejecución de una imagen.
Por ejemplo, partiendo de la imagen:
1nginx
podríamos crear varios contenedores:
1Imagen nginx 2 │ 3 ├── Contenedor nginx1 4 ├── Contenedor nginx2 5 └── Contenedor nginx3
Todos ellos utilizan la misma imagen como punto de partida.
Analogía con programación orientada a objetos #
Podemos realizar una analogía sencilla con la programación orientada a objetos:
1IMAGEN → CLASE 2 3CONTENEDOR → OBJETO
Una clase puede utilizarse para crear diferentes objetos.
De la misma forma, una imagen Docker puede utilizarse para crear diferentes contenedores.
6. Comprobar la versión de Docker #
Después de instalar Docker podemos comprobar su versión utilizando:
1docker version
Este comando muestra información sobre la versión de Docker instalada.
Normalmente podremos encontrar información tanto del:
1Client
como del:
1Server
Por ejemplo:
1docker version
puede mostrar información similar a:
1Client: 2 Version: 28.x.x 3 4Server: 5 Engine: 6 Version: 28.x.x
No es necesario que todos los alumnos tengan exactamente la misma versión.
docker --version #
También podemos obtener rápidamente la versión instalada mediante:
1docker --version
Este comando devuelve una salida más sencilla.
Por ejemplo:
1Docker version 28.x.x
Diferencia #
1docker --version
muestra principalmente la versión instalada.
Mientras que:
1docker version
muestra información más completa sobre el cliente y el servidor Docker.
7. Información de la instalación: docker info #
Docker permite consultar información sobre la instalación mediante:
1docker info
Este comando proporciona información sobre el sistema Docker.
Entre otros datos podremos encontrar:
1Containers 2Images 3Server Version 4Storage Driver 5CPUs 6Total Memory 7Docker Root Dir
También nos permite ver rápidamente cuántos:
- Contenedores existen.
- Contenedores están arrancados.
- Contenedores están detenidos.
- Imágenes tenemos almacenadas.
Ejercicio #
Ejecuta:
1docker info
Busca en la información mostrada:
- Número de contenedores.
- Número de imágenes.
- Número de procesadores disponibles.
- Memoria disponible para Docker.
- Versión del servidor Docker.
8. Docker Hub #
Cuando queremos utilizar Docker normalmente no necesitamos crear todas las imágenes desde cero.
Existe un repositorio de imágenes llamado Docker Hub.
Docker Hub permite:
- Buscar imágenes.
- Descargar imágenes.
- Publicar nuestras propias imágenes.
- Mantener diferentes versiones de una imagen.
Podemos encontrar imágenes de multitud de tecnologías:
1Ubuntu 2Debian 3Nginx 4Apache 5MySQL 6PostgreSQL 7MongoDB 8Redis 9Node.js 10Python 11Java
Muchas empresas y proyectos mantienen sus propias imágenes oficiales.
Imágenes oficiales #
Cuando buscamos una tecnología conocida en Docker Hub podremos encontrar imágenes oficiales.
Por ejemplo:
1nginx 2mysql 3ubuntu 4debian 5postgres
Siempre que sea posible es recomendable utilizar imágenes oficiales o imágenes procedentes de fuentes de confianza.
Tags #
Las imágenes pueden tener diferentes versiones.
Estas versiones se identifican normalmente mediante una etiqueta o tag.
Por ejemplo:
1ubuntu:24.04
donde:
1ubuntu
es el nombre de la imagen y:
124.04
es el tag.
La estructura general es:
1imagen:tag
Otro ejemplo:
1mysql:8.4
Si no indicamos un tag explícitamente, Docker normalmente utilizará:
1latest
Por ejemplo:
1nginx
equivale normalmente a trabajar con:
1nginx:latest
9. Buscar imágenes desde la consola #
Además de utilizar la página web de Docker Hub, podemos buscar imágenes directamente desde la terminal.
El comando es:
1docker search nombre
Por ejemplo, para buscar imágenes relacionadas con Ubuntu:
1docker search ubuntu
Obtendremos una tabla similar a:
1NAME DESCRIPTION STARS OFFICIAL 2ubuntu Ubuntu is a Debian-based... ... [OK] 3ubuntu/squid Squid is a caching proxy... 4...
Información mostrada #
Entre las columnas que podemos encontrar están:
NAME #
Nombre de la imagen.
DESCRIPTION #
Descripción de la imagen.
STARS #
Valoración que ha recibido la imagen por parte de los usuarios.
OFFICIAL #
Indica si se trata de una imagen oficial.
Otro ejemplo #
Podemos buscar imágenes relacionadas con Nginx:
1docker search nginx
O imágenes relacionadas con MySQL:
1docker search mysql
10. Diferencia entre Docker Hub y docker search #
Tenemos dos formas principales de buscar imágenes.
Desde Docker Hub #
Podemos utilizar la página web de Docker Hub.
Resulta especialmente útil para:
- Leer documentación.
- Consultar versiones.
- Ver ejemplos.
- Consultar variables de configuración.
- Analizar los tags disponibles.
Desde la terminal #
Podemos utilizar:
1docker search
Resulta útil para realizar una búsqueda rápida directamente desde la consola.
Por ejemplo:
1docker search debian