Gestión Esencial de Contenedores e Imágenes Docker y Despliegue de MySQL

Introducción a la Interacción con Docker

Docker simplifica el proceso de creación, despliegue y ejecución de aplicaciones utilizando contenedores. Para interactuar con este sistema, es fundamental conocer una serie de comandos que permiten gestionar tanto las imágenes como los contenedores. A continuación, se detallan los comandos más utilizados para empezar a trabajar con Docker.

# docker version        # Muestra la versión del cliente y del servidor Docker
# docker info           # Proporciona información detallada del sistema Docker
# docker --help         # Accede a la documentación de ayuda
# docker logs -f --tail N ID_CONTENEDOR # Visualiza los últimos N registros de un contenedor en tiempo real
# docker inspect ID_CONTENEDOR_O_IMAGEN # Obtiene metadatos de un contenedor o imagen

Operaciones Fundamentales con Imágenes Docker

Las imágenes son plantillas de solo lectura que contienen las instrucciones para crear un contenedor Docker. Son la base de todo lo que se ejecuta en Docker.

1. Búsqueda y Descarga de Imágenes

Para encontrar imágenes en Docker Hub (el registro público de Docker) y descargarlas a tu entorno local:

# docker search [NOMBRE_IMAGEN]     # Busca imágenes disponibles en Docker Hub
# docker pull [NOMBRE_IMAGEN]:[ETIQUETA] # Descarga una imagen específica. Si no se especifica la etiqueta, descarga 'latest'.

2. Listar Imágenes Locales

Verifica las imágenes que tienes almacenadas en tu sistema local:

# docker images                 # Muestra todas las imágenes locales
# docker images -a              # Muestra todas las imágenes (incluidas las intermedias)
# docker images -q              # Muestra solo los IDs de las imágenes

3. Eliminar Imágenes

Libera espacio eliminando imágenes que ya no necesitas:

# docker rmi -f [ID_O_NOMBRE_IMAGEN] # Elimina una imagen por su ID o nombre. El flag -f fuerza la eliminación.
# docker rmi $(docker images -q)     # Elimina todas las imágenes locales.

Nota importante: Asegúrate de escribir correctamente el nombre de la imagen al descargar, de lo contrario, recibirás un error indicando que el repositorio no existe o requiere autenticación.

4. Exportar e Importar Imágenes

Para trasladar imágenes entre diferentes máquinas Docker o para realizar copias de seguridad:

Guardar una imagen en un archivo .tar

# docker save ID_IMAGEN -o /ruta/a/guardar/nueva_imagen.tar NOMBRE_IMAGEN:ETIQUETA
# Ejemplo: docker save alpine -o /tmp/alpine_latest.tar alpine:latest

Cargar una imagen desde un archivo .tar

# docker load -i /ruta/al/archivo/nueva_imagen.tar
# Ejemplo: docker load -i /tmp/alpine_latest.tar

Operaciones Básicas con Contenedores Docker

Los contenedores son instancias ejecutables de las imágenes. Son entornos aislados donde se ejecutan las aplicaciones.

1. Ejecutar Contenedores

Inicia un nuevo contenedor a partir de una imagen.

# docker run -it --name mi_contenedor_web alpine /bin/sh
#   -i: Mantiene STDIN abierto incluso si no está conectado.
#   -t: Asigna una pseudo-TTY. Combinados (-it) permiten interacción.
#   --name: Asigna un nombre personalizado al contenedor (opcional).
#   alpine /bin/sh: La imagen a usar y el comando inicial a ejecutar.

# Ejecutar un contenedor en modo demonio (segundo plano)
# docker run -d nginx
# Si el contenedor no tiene un proceso activo que se ejecute continuamente, se detendrá inmediatamente.

# Ejecutar con mapeo de puertos
# docker run -it -p 8080:80 apache/httpd
#   -p HOST_PORT:CONTAINER_PORT: Mapea el puerto del contenedor al puerto del host.

2. Ver el Estado de los Contenedores

Permite ver qué contenedores están activos o han estado activos.

# docker ps         # Muestra solo los contenedores en ejecución
# docker ps -a      # Muestra todos los contenedores (en ejecución y detenidos)
# docker ps -l      # Muestra el último contenedor creado (incluido el detenido)
# docker ps -n X    # Muestra los X contenedores creados más recientemente
# docker ps -aq     # Muestra solo los IDs de todos los contenedores

Si dentro de un contenedor basado en ciertas imágenes minimalistas no encuentras comandos como ps, es posible que necesites instalar herramientas de proceso:

# apt-get update && apt-get install -y procps # Para distribuciones basadas en Debian/Ubuntu

3. Entrar a un Contenedor en Ejecución

Para interactuar directamente con un contenedor que ya está en marcha:

# docker exec -it [ID_O_NOMBRE_CONTENEDOR] /bin/bash
#   Ejecuta un comando (e.g., /bin/bash) dentro de un contenedor en ejecución.
#   Es el método preferido para abrir una shell interactiva.

# docker attach [ID_O_NOMBRE_CONTENEDOR]
#   Se adjunta al proceso principal de un contenedor. Si ese proceso se detiene, el contenedor se detendrá.
#   Útil para ver la salida estándar del proceso principal.

4. Detener y Forzar la Parada de Contenedores

# docker stop [ID_O_NOMBRE_CONTENEDOR]      # Envía una señal SIGTERM para detener el contenedor de forma gradual.
# docker kill [ID_O_NOMBRE_CONTENEDOR]      # Envía una señal SIGKILL para detener el contenedor de forma inmediata.
# docker stop $(docker ps -a -q)            # Detiene todos los contenedores.

5. Salir de un Contenedor Interactivo

Es crucial saber cómo salir de un contenedor sin detenerlo:

# exit              # Detiene el contenedor y sale de la sesión.
# Ctrl+P, luego Ctrl+Q # Desconecta del contenedor sin detenerlo (proceso en segundo plano). ¡MUY IMPORTANTE!

6. Eliminar Contenedores

Una vez que un contenedor ya no es necesario, se puede eliminar.

# docker rm [ID_O_NOMBRE_CONTENEDOR]        # Elimina un contenedor específico (debe estar detenido).
# docker rm -f [ID_O_NOMBRE_CONTENEDOR]     # Fuerza la eliminación de un contenedor en ejecución.
# docker rm $(docker ps -a -q)              # Elimina todos los contenedores (primero deben estar detenidos o usar -f).

Recuerda: docker rm es para contenedores, docker rmi es para imágenes.

7. Guardar Cambios en un Contenedor (Commit)

Si has realizado cambios significativos dentro de un contenedor en ejecución y deseas preservar esos cambios como una nueva imagen:

# docker commit -m="Mensaje de los cambios" -a="Autor" ID_CONTENEDOR nuevo_nombre_imagen:etiqueta
# Ejemplo: docker commit -m="MySQL con usuarios extra" -a="MiNombre" mymysql mi-mysql-personalizado:v1.0

8. Copiar Archivos entre el Host y el Contenedor

Útil para extraer logs, configuraciones o bases de datos:

# docker cp [ID_O_NOMBRE_CONTENEDOR]:/ruta/en/contenedor /ruta/en/host
# Ejemplo: docker cp mymysql:/var/log/mysql/error.log /tmp/mysql_errors.log

Instalación y Configuración de MySQL en Docker

Docker facilita el despliegue de servicios de bases de datos como MySQL en entornos aislados.

1. Obtener la Imagen de MySQL

# docker pull mysql:latest

2. Iniciar un Contenedor MySQL

Este comando configura un contenedor MySQL con persistencia de datos y una contraseña de root inicial.

# docker run -d \
#   --name db_mysql \
#   -p 3306:3306 \
#   -e MYSQL_ROOT_PASSWORD=mi_contraseña_segura \
#   -v /opt/docker-data/mysql/config:/etc/mysql/conf.d \
#   -v /opt/docker-data/mysql/logs:/var/log/mysql \
#   -v /opt/docker-data/mysql/data:/var/lib/mysql \
#   mysql:latest
#
# Explicación de los parámetros:
#   -d: Ejecuta el contenedor en segundo plano.
#   --name db_mysql: Asigna el nombre 'db_mysql' al contenedor.
#   -p 3306:3306: Mapea el puerto 3306 del host al puerto 3306 del contenedor.
#   -e MYSQL_ROOT_PASSWORD: Establece la contraseña para el usuario 'root' de MySQL.
#   -v /opt/docker-data/mysql/config:/etc/mysql/conf.d: Monta un volumen para la configuración.
#   -v /opt/docker-data/mysql/logs:/var/log/mysql: Monta un volumen para los archivos de log.
#   -v /opt/docker-data/mysql/data:/var/lib/mysql: Monta un volumen para la persistencia de los datos de la base de datos.
#   mysql:latest: La imagen de MySQL a utilizar.

3. Acceder al Contenedor MySQL y Comprobar la Versión

# docker exec -it db_mysql bash
#
# Una vez dentro del contenedor:
# mysql --version

4. Conectarse a MySQL como Root y Ajustar Permisos

Conéctate al servidor MySQL dentro del contenedor y realiza las configuraciones necesarias, especialmente para permitir conexiones remotas.

# mysql -u root -p
#   Ingresa 'mi_contraseña_segura' cuando te la solicite.

# Seleccionar la base de datos MySQL
# USE mysql;

# Si tienes problemas de conexión remota (por ejemplo, con Navicat):
# 1. Concede permisos para que el usuario 'root' se conecte desde cualquier host ('%').
# GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';

# 2. Es posible que necesites cambiar el método de autenticación si usas clientes antiguos o versiones específicas de MySQL/MariaDB.
#    Asegúrate de cambiar 'otra_contraseña_segura' por tu contraseña real.
# ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'otra_contraseña_segura';

# 3. Refresca los privilegios para que los cambios surtan efecto.
# FLUSH PRIVILEGES;

# Para verificar la configuración del usuario y host:
# SELECT User, Host FROM mysql.user;

Etiquetas: Docker contenedores imagenes-docker comandos-docker gestion-docker

Publicado el 6-7 08:08