What does Docker run Hello World do?

Docker: Guía Completa de Cero a la Nube

14/11/2019

Valoración: 4.2 (4557 votos)

En el mundo del desarrollo de software moderno, la agilidad, la consistencia y la escalabilidad son pilares fundamentales. Aquí es donde entra en juego una herramienta que ha transformado la forma en que construimos, enviamos y ejecutamos aplicaciones: Docker. Si alguna vez te has preguntado cómo las grandes empresas despliegan aplicaciones complejas con una facilidad asombrosa, la respuesta a menudo involucra la tecnología de contenedores, y Docker es el rey indiscutible en este dominio.

Esta guía está diseñada para ser tu punto de partida y referencia en el ecosistema Docker. Te llevaremos desde los conceptos más básicos, como ejecutar tu primer contenedor 'hello-world', hasta la orquestación de aplicaciones multi-contenedor listas para ser desplegadas en la nube. No necesitas experiencia previa, solo curiosidad y ganas de aprender una de las tecnologías más demandadas en la industria.

What is Alpine js used for?
js provides an alternative that's lightweight, versatile, and easy to implement directly within your HTML. In essence, Alpine. js is a framework that allows developers to write declarative, dynamic front-end code with a syntax that feels intuitive and straightforward.
Índice de Contenido

¿Qué es Docker y por qué es tan importante?

En términos sencillos, Docker es una plataforma de código abierto que automatiza el despliegue de aplicaciones dentro de contenedores de software. Piensa en un contenedor como una caja estandarizada y ligera que empaqueta una aplicación junto con todo lo que necesita para funcionar: código, bibliotecas, herramientas del sistema y configuraciones. Este empaquetado garantiza que la aplicación se ejecute de la misma manera, sin importar dónde se despliegue, ya sea en el portátil de un desarrollador, en un servidor de pruebas o en un clúster en la nube.

Contenedores vs. Máquinas Virtuales (VMs)

Para entender el valor de Docker, es útil compararlo con la tecnología anterior: las máquinas virtuales. Una VM emula un sistema informático completo, incluyendo su propio sistema operativo (SO huésped), que se ejecuta sobre el sistema operativo del servidor anfitrión. Si bien esto proporciona un aislamiento excelente, también consume una cantidad significativa de recursos (CPU, RAM, disco) porque cada VM necesita su propio SO completo.

Los contenedores, por otro lado, adoptan un enfoque mucho más eficiente. En lugar de virtualizar el hardware, virtualizan el sistema operativo. Esto significa que todos los contenedores en un host comparten el kernel del SO del host, pero se ejecutan en procesos aislados. El resultado es un arranque casi instantáneo, un consumo de recursos mucho menor y una mayor densidad de aplicaciones por servidor.

Tabla Comparativa: VMs vs. Contenedores

CaracterísticaMáquinas Virtuales (VMs)Contenedores (Docker)
AislamientoCompleto, a nivel de hardware y SO.Aislamiento a nivel de proceso, comparte el kernel del host.
Overhead de RecursosAlto (cada VM tiene un SO completo).Bajo (solo la app y sus dependencias).
Tiempo de InicioLento (minutos).Rápido (segundos o milisegundos).
TamañoGrande (varios Gigabytes).Pequeño (Megabytes).
PortabilidadDependiente del hipervisor.Altamente portable entre cualquier host con Docker.

Primeros Pasos: El Famoso `docker run hello-world`

Una vez que tienes Docker instalado en tu sistema, el primer comando que todos ejecutan es una prueba de fuego para asegurar que todo funciona correctamente. Al ejecutar `docker run hello-world` en tu terminal, suceden varias cosas detrás de escena:

  1. El cliente de Docker (la línea de comandos) se comunica con el demonio de Docker (el servicio que se ejecuta en segundo plano).
  2. El demonio busca localmente una imagen llamada `hello-world`.
  3. Al no encontrarla, se conecta a Docker Hub (el registro de imágenes por defecto) y la descarga.
  4. Una vez descargada la imagen, el demonio crea un nuevo contenedor a partir de ella.
  5. Dentro de ese contenedor, ejecuta el comando predefinido en la imagen, que imprime un mensaje de bienvenida en tu terminal.
  6. Finalmente, el contenedor se detiene, ya que su única tarea ha finalizado.

Este simple comando demuestra el ciclo de vida completo: buscar una imagen, descargarla, crear un contenedor y ejecutar un proceso. ¡Es la prueba de que tu instalación de Docker está viva y funcionando!

Explorando Comandos Esenciales de Docker

Ahora que hemos roto el hielo, profundicemos en los comandos que usarás en tu día a día.

Imágenes y Contenedores

Es crucial entender la diferencia entre una imagen y un contenedor. Una imagen es una plantilla inmutable, un plano que contiene todo lo necesario para ejecutar una aplicación. Un contenedor es una instancia en ejecución de una imagen. Puedes crear múltiples contenedores a partir de la misma imagen.

  • docker pull [nombre_imagen]: Descarga una imagen desde un registro como Docker Hub.
  • docker images: Lista todas las imágenes que tienes en tu sistema local.
  • docker run [nombre_imagen]: Crea y ejecuta un nuevo contenedor a partir de una imagen.
  • docker ps: Muestra los contenedores que están actualmente en ejecución.
  • docker ps -a: Muestra todos los contenedores, incluyendo los que se han detenido.
  • docker stop [id_o_nombre_contenedor]: Detiene un contenedor en ejecución.
  • docker rm [id_o_nombre_contenedor]: Elimina un contenedor detenido. Para evitar acumular contenedores, puedes usar la bandera --rm en el comando `run`, que lo eliminará automáticamente cuando se detenga.

Ejecutando un Contenedor Interactivo

A veces, querrás entrar en un contenedor para explorar su sistema de archivos o ejecutar comandos. Para esto, se utilizan las banderas `-it`.

docker run -it busybox sh

Este comando te dará un shell interactivo dentro de un contenedor basado en `busybox`, una imagen de Linux muy ligera. Ahora puedes ejecutar comandos como `ls`, `pwd` o `echo` dentro del entorno aislado del contenedor.

Creando tu Propia Imagen con un Dockerfile

Descargar imágenes está bien, pero el verdadero poder de Docker reside en crear tus propias imágenes personalizadas. Esto se logra mediante un archivo de texto llamado Dockerfile. Un Dockerfile es una receta paso a paso que le dice a Docker cómo construir una imagen.

Imaginemos que tenemos una aplicación simple en Python con Flask. Nuestro Dockerfile podría verse así:

# Usar una imagen base oficial de Python FROM python:3.8-slim # Establecer el directorio de trabajo dentro del contenedor WORKDIR /app # Copiar los archivos de dependencias COPY requirements.txt . # Instalar las dependencias RUN pip install --no-cache-dir -r requirements.txt # Copiar el resto del código de la aplicación COPY . . # Exponer el puerto en el que la aplicación se ejecutará EXPOSE 5000 # Definir el comando para ejecutar la aplicación cuando el contenedor inicie CMD [ "python", "./app.py" ]

Para construir la imagen a partir de este archivo, ejecutaríamos el siguiente comando en el mismo directorio:

docker build -t mi-app-flask .

El comando -t nos permite etiquetar (tag) la imagen con un nombre descriptivo. Una vez construida, podemos ejecutarla como cualquier otra imagen:

docker run -p 8888:5000 mi-app-flask

La bandera `-p` es para el mapeo de puertos. En este caso, estamos mapeando el puerto 8888 de nuestra máquina host al puerto 5000 del contenedor (el que expusimos en el Dockerfile).

What does Docker run Hello World do?
Once you are done installing Docker, test your Docker installation by running the following: $ docker run hello-world Hello from Docker. This message shows that your installation appears to be working correctly. ...

Orquestando Aplicaciones con Docker Compose

Las aplicaciones del mundo real rara vez consisten en un solo servicio. A menudo, tienes un backend, una base de datos, un sistema de caché, etc. Gestionar cada uno de estos contenedores por separado sería tedioso. Aquí es donde brilla Docker Compose.

Docker Compose es una herramienta para definir y ejecutar aplicaciones Docker multi-contenedor. Utiliza un archivo de configuración en formato YAML, típicamente llamado `docker-compose.yml`, para configurar todos los servicios de tu aplicación.

Ejemplo de `docker-compose.yml`

Imaginemos nuestra aplicación Flask que ahora necesita una base de datos Elasticsearch para la búsqueda.

version: '3.8' services: web: build: . ports: - "5000:5000" volumes: - ./flask-app:/app depends_on: - es es: image: docker.elastic.co/elasticsearch/elasticsearch:7.17.0 container_name: es environment: - discovery.type=single-node ports: - "9200:9200" volumes: - esdata:/usr/share/elasticsearch/data volumes: esdata:

Este archivo define dos servicios: `web` (nuestra app Flask) y `es` (Elasticsearch). Docker Compose se encarga de varias cosas automáticamente:

  • Redes: Crea una red privada para que los servicios `web` y `es` puedan comunicarse entre sí usando sus nombres de servicio como si fueran hostnames.
  • Dependencias: Gracias a `depends_on`, se asegura de que el contenedor de Elasticsearch se inicie antes que el de la aplicación web.
  • Volúmenes: Configura un volumen llamado `esdata` para que los datos de Elasticsearch persistan incluso si el contenedor se reinicia.

Con este archivo, puedes levantar toda tu aplicación con un solo comando: docker-compose up. Y para detenerla y limpiarla, simplemente: docker-compose down. Esto simplifica enormemente los flujos de trabajo de desarrollo y pruebas, especialmente en arquitecturas de microservicios.

Preguntas Frecuentes (FAQ)

¿Cuál es la diferencia exacta entre una imagen y un contenedor?

Una imagen es una plantilla estática e inmutable, como una clase en programación orientada a objetos. Un contenedor es una instancia viva y en ejecución de esa imagen, como un objeto creado a partir de una clase. Puedes tener muchas instancias (contenedores) de la misma plantilla (imagen).

¿Por qué debería usar contenedores en lugar de máquinas virtuales?

Principalmente por eficiencia y velocidad. Los contenedores son mucho más ligeros, se inician en segundos y permiten ejecutar más aplicaciones en el mismo hardware porque comparten el kernel del sistema operativo anfitrión. Esto los hace ideales para el desarrollo rápido y para arquitecturas de microservicios.

¿Qué es Docker Hub?

Docker Hub es un registro de imágenes de Docker alojado en la nube. Es el lugar por defecto donde Docker busca imágenes cuando ejecutas `docker pull`. Puedes encontrar miles de imágenes oficiales y creadas por la comunidad, y también puedes subir tus propias imágenes para compartirlas o usarlas en tus despliegues.

¿Es necesario borrar los contenedores y las imágenes que ya no uso?

Sí, es una buena práctica. Los contenedores detenidos y las imágenes no utilizadas ocupan espacio en disco. Puedes usar `docker container prune` para eliminar todos los contenedores detenidos y `docker image prune -a` para eliminar todas las imágenes que no estén siendo utilizadas por ningún contenedor. Esto ayuda a mantener tu sistema limpio y a liberar espacio.

Conclusión

Docker ha dejado de ser una simple herramienta para convertirse en un estándar de facto en la industria del software. Al empaquetar aplicaciones y sus dependencias en unidades portátiles y aisladas, resuelve el clásico problema de "en mi máquina funciona". Desde simplificar la configuración de entornos de desarrollo locales hasta potenciar complejas arquitecturas de microservicios en la nube, Docker ofrece una base sólida para construir, probar y desplegar software de manera confiable y eficiente. Dominar sus conceptos básicos no es solo una habilidad valiosa, sino una necesidad para cualquier desarrollador, administrador de sistemas o ingeniero de DevOps que busque mantenerse relevante en el panorama tecnológico actual.

Si quieres conocer otros artículos parecidos a Docker: Guía Completa de Cero a la Nube puedes visitar la categoría Automovilismo.

Subir