Docker se ha convertido en una herramienta esencial en el mundo del desarrollo y la administración de sistemas, permitiendo la creación, distribución y ejecución de aplicaciones en entornos aislados y consistentes. En esta guía completa, exploraremos desde los conceptos básicos de Docker hasta ejemplos prácticos de diferentes casos de uso, incluyendo contenido de Docker Hub.
Introducción a Docker
Docker es una plataforma de virtualización ligera que permite empacar y distribuir aplicaciones junto con todas sus dependencias en contenedores. Un contenedor es una unidad de software que incluye todo lo necesario para ejecutar una aplicación, incluyendo código, runtime, bibliotecas y configuraciones
Ventajas de usar Docker
- Portabilidad: Los contenedores pueden ejecutarse en cualquier máquina que tenga Docker instalado.
- Aislamiento: cada contenedor opera en un entorno aislado, lo que evita conflictos entre aplicaciones.
- Escalabilidad: Los contenedores se pueden replicar fácilmente para manejar cargas de trabajo variables.
- Consistencia: Garantiza que la aplicación funcione de la misma manera en diferentes entornos.
Conceptos clave: imágenes y contenedores.
- Imagen: Plantilla que contiene un sistema de archivos y configuraciones necesarias para ejecutar una aplicación.
- Contenedor: Instancia en ejecución de una imagen. Es un entorno aislado.
Instalación de Docker.
Para instalar Docker, depende del sistema operativo, está disponible para Linux con cualquier distribución como Ubuntu, CentOS, Kali, etc., también disponible para Windows y MacOS. Para instalarlo solo es seguir los pasos depende del sistema operativo que se tenga en este link: https://docs.docker.com/engine/install/
Comandos Básicos de Docker
docker run
El comando ‘docker run’ se utiliza para ejecutar un contenedor a partir de una imagen. Por ejemplo:
Este comando ejecuta un contenedor basado en la imagen “nginx” en segundo plano y mapea el puerto 8080 del contenedor al puerto 80 del host.
💡Nota: Se utiliza por lo general la flag ‘-d’ de detach, para poder seguir utilizando nuestra terminal, ya que si no se usa, toca detener el contenedor para seguir haciendo uso de la línea de comandos.
docker ps
Muestra una lista de los contenedores en ejecución.
docker ps -a
Muestra la lista de contenedores que están en ejecución y detenidos en el transcurso del tiempo.
docker images
Lista las imágenes disponibles en el sistema.
docker build
Construye una imagen a partir de un Dockerfile en el directorio actual.
docker stop y docker start
Detiene e inicia un contenedor en ejecución.
Creación y gestión de Imágenes
Un Dockerfile es un archivo de texto que define cómo se construira una imagen. Ejemplo de Dockerfile para una aplicación Node.js
Aquí Podemos ver un ejemplo donde se muestran una serie de instrucciones que tendrá nuestro DockerFile
- FROM: nos proporciona una imagen base. En este caso tomamos la imagen 18.17-alpine, que es mucho mas ligera que un node 18.17
- WORKDIR: aquí es donde va a alojar nuestra aplicación en el contenedor
- COPY: añade los archivos de nuestro directorio local, todas las dependencias para que no tenga ningún error al hacer el build
- RUN: crea la aplicación con node:18.17-alpine
- EXPOSE: aquí es donde se va a mostrar nuestra aplicación, en este caso en el puerto 3000
- CMD: Especifica que comando queremos ejecutar en el contenedor
💡Nota: hay otra instrucción que es el ENTRYPOINT, que viene siendo la entrada a ejecutar en el contenedor como ejemplo se vería de esta forma
Redes en Docker
Tipos de Redes en Docker
- Bridge: red privada interna para contenedores en el mismo host.
- Host: Comparte la red del host con el contenedor
- Overlay: Red multi-host para la comunicación entre contenedores en diferentes hosts.
Crear y Gestionar Redes
Conectar Contenedores a Redes
Persistencia de Datos
Montaje de Volúmenes en Contenedores
Permite que los datos persistan incluso después de detener o eliminar un contenedor.
Datos en el Contenedor vs datos en Volumen
Los datos en el contenedor son volátiles y se pierden al eliminar el contenedor. Los datos en un volumen persisten
Copia de datos hacia/desde Contenedores
Casos de USO Prácticos
Despliegue de una aplicación Web con Nginx
Bases de Datos en Contenedores: MySQL y MongoDB
Entornos de Desarrollo Aislados
Crea entornos de desarrollo consistentes para diferentes proyectos
Orquestación de Contenedores con Kubernetes
Kubernetes es una herramienta poderosa para la orquestación y gestión de contenedores en un entorno de producción
Explorando Docker Hub
Docker Hub es un repositorio público de imágenes de contenedores, donde individuos y empresas pueden publicar imágenes de soluciones.
Pasos para Subir una Imagen a Docker-Hub
Lo Primero que se debe tener para subir una imagen a Docker-Hub es una cuenta,
- Crea tu cuenta en Docker Hub:
Si aún no tienes tu cuenta en docker hub ingresa a https://hub.docker.com/ y registrate
- Instala Docker en tu máquina local:
Para instalar docker en tu sistemas, descargarlo e instalarlo desde el sitio web oficial de docker https://www.docker.com/get-started/
- Iniciar sesión en Docker Hub desde la línea de comandos
abre un terminal y utiliza el siguiente comando para iniciar sesión en Docker Hub con tu nombre de usuario y contraseña
Se te pedirá que ingreses el nombre de usuario y contraseña de Docker Hub
- Etiqueta tu imagen que vayas a subir
Asegúrate de que la imagen que deseas subir tenga una etiqueta adecuada. Puedes etiquetar la imagen usando el siguiente comando
Ejemplo:
- Sube la imagen a Docker Hub
Utiliza el siguiente comando para subir tu imagen etiquetada a Docker Hub:
Ejemplo
- Verifica la imagen en Docker Hub
Después de se hace el push de la imagen y veas que se ha completado con éxito, puedes revisar el repositorio en Docker Hub, en la sección repositories para asegurarte que la imagen está disponible
💡Nota: Como pueden ver, tengo en mi Docker Hub un repositorio de React con diferentes versiones que he hecho en el código, y solo con hacer un pull a su local pueden aportar al código, estilo GitHub con el comando docker pull robpalacios1/react-docker:<Tag>
Dónde Tag puede ser las versiones que tengo desde la 1.0.0 hasta la última que viene siendo latest
Conclusión
Docker es una tecnología que ha evolucionado la forma en que desarrollamos, desplegamos y gestionamos aplicaciones. Desde la creación de imágenes hasta la gestión de redes y volúmenes, Docker proporciona las herramientas necesarias para construir entornos consistentes y eficientes.