Preparación e Instalación del Entorno
Antes de proceder con una instalación limpia de Docker en un sistema basado en CentOS, es fundamental eliminar cualquier rastro de versiones antiguas que puedan generar conflictos de dependencias.
# Eliminación de paquetes obsoletos
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
Una vez depurado el sistema, seguimos los pasos para instalar la edición comunitaria (Docker CE):
# Instalación de utilidades necesarias
sudo yum install -y yum-utils
# Configuración del repositorio oficial (usando mirror de Aliyun para optimizar velocidad)
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Actualización del índice de paquetes e instalación del motor Docker
sudo yum makecache fast
sudo yum -y install docker-ce docker-ce-cli containerd.io
# Inicialización y validación del servicio
sudo systemctl start docker
docker version
Configuración del Acelerador de Imágenes
Para mejorar la velocidad de descarga de las imágenes desde el registro, se recomienda configurar un mirror local en el archivo de configuración del demonio.
# Edición del archivo de configuración
sudo vi /etc/docker/daemon.json
# Ejemplo de estructura del archivo:
# {
# "registry-mirrors": ["https://tu-enlace-acelerador.mirror.com"]
# }
# Reinicio de servicios para aplicar cambios
sudo systemctl daemon-reload
sudo systemctl restart docker
Dominio de la Interfaz de Línea de Comandos (CLI)
Gestión de Imágenes
Las imágenes son las plantillas estáticas que sirven de base para los contenedores.
# Listado de imágenes disponibles localmente
docker images -a
# Búsqueda de imágenes en el Hub oficial
docker search alpine
# Descarga de una imagen específica
docker pull debian:latest
# Eliminación de una imagen por su ID
docker rmi -f [ID_IMAGEN]
# Limpieza total de imágenes locales
docker rmi $(docker images -aq)
Control de Contenedores
Un contenedor es una instancia de ejecución de una imagen.
# Ejecución de un contenedor interactivo en segundo plano
docker run -itd --name nodo-prueba ubuntu /bin/bash
# Salida del contenedor sin finalizar el proceso
# Presionar la secuencia: Ctrl + P + Q
# Monitoreo de contenedores activos
docker ps
# Visualización de todos los contenedores (incluyendo detenidos)
docker ps -a
# Detención y arranque
docker stop nodo-prueba
docker start nodo-prueba
# Eliminación forzada de un contenedor
docker rm -f nodo-prueba
Operaciones Avanzadas y Diagnóstico
# Inspección de logs en tiempo real (últimas 15 líneas)
docker logs -f --tail 15 [ID_CONTENEDOR]
# Visualización de procesos internos del contenedor
docker top [ID_CONTENEDOR]
# Obtención de metadatos detallados en formato JSON
docker inspect [ID_CONTENEDOR]
# Acceso a una consola dentro de un contenedor en ejecución
docker exec -it [ID_CONTENEDOR] /bin/sh
# Transferencia de archivos entre el host y el contenedor
docker cp [ID_CONTENEDOR]:/var/log/app.log ./logs_locales/
Casos de Uso Prácticos
Despliegue de un Servidor Web Nginx
A continuación, se muestra cómo levantar una instancia de Nginx mapeando puertos y volúmenes externos para persistencia de datos.
# Descarga y ejecución de Nginx
docker pull nginx
# Instancia con mapeo de puerto 8080 y volumen de configuración
docker run -d \
--name servidor-web-01 \
-p 8080:80 \
-v /opt/docker/nginx/conf:/etc/nginx \
nginx
Configuración de una Base de Datos MySQL
Es vital definir variables de entorno para la seguridad inicial de la base de datos.
# Ejecución de MySQL con contraseña de root definida
docker run -d \
--name db-instancia \
-e MYSQL_ROOT_PASSWORD=mi_clave_segura \
-p 3306:3306 \
-v /data/mysql:/var/lib/mysql \
mysql:5.7
Consideraciones sobre Redes y Firewall
En entornos Linux, Docker manipula directamente las reglas de iptables. Si el servicio de firewall (como firewalld) se reinicia o se modifica mientras Docker está activo, es posible que se pierda la conectividad de los contenedores. En estos casos, la solución más efectiva es reiniciar el servicio de Docker para que rceonstruya sus reglas de red:
sudo systemctl restart docker