¿Qué es Docker?
Docker es una plataforma de código abierto que permite empaquetar aplicaciones y sus dependencias en contenedores ligeros. Estos contenedores se ejecutan de manera aislada en cualquier sistema Linux, facilitando la implementación consistente en múltiples entornos. Por ejemplo, al tener tres contenedores ejecutando nginx, PHP y MySQL en una máquina, puede replicarse fácilmente esa configuración en otras máquinas mediante comandos sencillos.
Ventajas de Utilizar Docker
Optimización de Recursos
Los contenedores evitan la sobrecarga de la virtualización de hardware, lo que permite un uso más eficiente de la CPU, memoria y almacenamiento, ejecutando más aplicaciones en el mismo equipo.
Inicio Rápido
A diferencia de las máquinas virtuales, los contenedores arrancan en segundos o milisegundos al aprovechar directamente el kernel del host, acelerando los ciclos de desarrollo y despliegue.
Entorno Consistente
Las imágenes de Docker garantizan que las aplicaciones se ejecuten en el mismo entorno desde desarrollo hasta producción, eliminando problemas comunes como "funciona en mi máquina".
Integración y Despliegue Continuo
Con Dockerfile, se pueden crear imágenes de forma transparente, integrándose con sistemas de integración continua para automatizar pruebas y despliegues en producción.
Portabilidad Simplificada
Las aplicaciones empaquetadas en contenedores se transfieren sin problemas entre plataformas como máquinas virtuales, nubes privadas o públicas, sin conflictos de entorno.
Mantenimiento y Escalabilidad
El almacenamiento por capas y las imágenes base permiten reutilizar componentes, simplificando la creación de nuevas versiones y reduciendo costos operativos.
| Característica | Contenedor | Máquina Virtual |
|---|---|---|
| Tiempo de Arranque | Segundos | Minutos |
| Uso de Disco | Megabytes | Gigabytes |
| Rendimiento | Cercano al Nativo | Reducido |
| Capacidad por Host | Miles de Contenedores | Decenas de VMs |
Instalación de Docker
Para instalar Docker en un sistema Linux basado en CentOS, siga estos pasos modificados para evitar conflictos con versiones anteriores.
# Eliminar versiones previas de Docker
yum -y remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
# Instalar paquetes requeridos
yum install -y yum-utils device-mapper-persistent-data lvm2
# Configurar repositorio alternativo desde un espejo
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# Listar versiones disponibles de Docker
yum list docker-ce --showduplicates | sort -r
# Instalar una versión específica de Docker
yum install docker-ce-20.10.7 -y
# Configurar fuentes de imágenes usando un archivo de configuración
echo '{"registry-mirrors": ["https://mirror.example.com"]}' > /etc/docker/daemon.json
# Iniciar el servicio de Docker
systemctl start docker
# Habilitar Docker para que inicie con el sistema
systemctl enable docker
Conceptos Clave de Docker
Imágenes
Una imagen es una plantilla inmutable que contiene los binarios y configuraciones necesarios para ejecutar una aplicación, como un entorno Ubuntu con Apache instalado. Se pueden descargar de repositorios o crear mediante Dockerfile, similar a un archivo maestro que permite instalar múltiples instancias.
Contenedores
Los contenedores son instancias en ejecución de una imagen, gestionados como objetos con ciclos de vida independientes. Pueden crearse, iniciarse, detenerse o eliminarse, funcionando como sistemas operativos individuales dentro del host.
Repositorios
Los repositorios almacenan imágenes de Docker y se pueden alojar en servicios públicos como Docker Hub o en registros privados. Cada imagen dentro de un repositorio se identifica mediante etiquetas para versiones específicas.
Dockerfile
Es un archivo de texto que define instrucciones para construir una imagen de Docker, capa por capa, especificando comandos como la instalación de paquetes o la configuración de variables de entorno.
Docker Compose
Esta herramienta permite definir y ejecutar aplicaciones con múltiples contenedores mediante un archivo YAML, simplificando la orquestación de servicios como bases de datos y servidores web en entornos complejos.
Comandos Fundamentales de Docker
Gestión de Repositorios
# Descargar una imagen desde un repositorio
docker pull usuario/imagen:v1.0
# Subir una imagen local a un repositorio
docker push usuario/imagen:v1.0
Administración de Imágenes
# Listar todas las imágenes locales
docker image ls
# Eliminar una imagen específica
docker image rm usuario/imagen:v1.0
# Construir una imagen desde un Dockerfile en el directorio actual
docker build -t nombre_imagen .
# Visualizar el historial de capas de una imagen
docker history nombre_imagen
Operaciones con Contenedores
# Mostrar contenedores en ejecución
docker container ls
# Listar todos los contenedores, incluyendo los detenidos
docker container ls -a
# Crear y ejecutar un contenedor en segundo plano
docker run -d --name contenedor_app nginx:latest
# Acceder a un contenedor en ejecución con un shell interactivo
docker exec -it contenedor_app /bin/bash
# Detener un contenedor
docker container stop contenedor_app
# Eliminar un contenedor
docker container rm contenedor_app
# Convertir un contenedor en una nueva imagen
docker commit contenedor_app nueva_imagen:v1
Configuración de Redes
# Mostrar redes de Docker disponibles
docker network ls
# Crear una red personalizada con subred definida
docker network create --subnet=192.168.50.0/24 red_personalizada
# Ejecutar un contenedor en una red específica con IP asignada
docker run -d --network=red_personalizada --ip=192.168.50.10 --name contenedor_red alpine:latest
Exportación e Importación
# Exportar el sistema de archivos de un contenedor a un archivo tar
docker export contenedor_app > respaldo_contenedor.tar
# Importar un archivo tar como una nueva imagen
docker import respaldo_contenedor.tar imagen_recuperada:v1
# Guardar una imagen en un archivo tar para respaldo
docker save nombre_imagen > imagen_respaldo.tar
# Cargar una imagen desde un archivo tar
docker load < imagen_respaldo.tar