Compartir comentarios
Las respuestas se generan en base a la documentación.

¿Qué es un contenedor?

Explicación

Imagina que estás desarrollando una aplicación web genial que tiene tres componentes principales: un frontend de React, una API de Python y una base de datos PostgreSQL. Si quisieras trabajar en este proyecto, tendrías que instalar Node, Python y PostgreSQL.

¿Cómo te aseguras de tener las mismas versiones que los otros desarrolladores de tu equipo? ¿O que tu sistema de CI/CD? ¿O lo que se usa en producción?

¿Cómo te aseguras de que la versión de Python (o Node o la base de datos) que necesita tu aplicación no se vea afectada por lo que ya está en tu máquina? ¿Cómo manejas los posibles conflictos?

¡Entran los contenedores!

¿Qué es un contenedor? En pocas palabras, los contenedores son procesos aislados para cada uno de los componentes de tu aplicación. Cada componente (la aplicación React frontend, el motor de la API de Python y la base de datos) se ejecuta en su propio entorno aislado, completamente separado de todo lo demás en tu máquina.

Esto es lo que los hace geniales. Los contenedores son:

  • Autónomos. Cada contenedor tiene todo lo que necesita para funcionar sin depender de dependencias preinstaladas en la máquina host.
  • Aislados. Dado que los contenedores se ejecutan de forma aislada, tienen una influencia mínima en el host y en otros contenedores, lo que aumenta la seguridad de tus aplicaciones.
  • Independientes. Cada contenedor se administra de forma independiente. Eliminar un contenedor no afectará a ningún otro.
  • Portátiles. ¡Los contenedores pueden ejecutarse en cualquier lugar! El contenedor que se ejecuta en tu máquina de desarrollo funcionará de la misma manera en un centro de datos o en cualquier lugar de la nube.

Contenedores frente a máquinas virtuales (VM)

Sin entrar en demasiados detalles, una máquina virtual (VM) es un sistema operativo completo con su propio kernel, controladores de hardware, programas y aplicaciones. Iniciar una máquina virtual solo para aislar una aplicación es una gran sobrecarga.

Un contenedor es simplemente un proceso aislado con todos los archivos que necesita para ejecutarse. Si ejecutas varios contenedores, todos comparten el mismo kernel, lo que te permite ejecutar más aplicaciones en menos infraestructura.

Usar máquinas virtuales y contenedores juntos

Con bastante frecuencia, verás que los contenedores y las máquinas virtuales se utilizan juntos. Por ejemplo, en un entorno de nube, las máquinas aprovisionadas suelen ser máquinas virtuales. Sin embargo, en lugar de aprovisionar una máquina para ejecutar una sola aplicación, una máquina virtual con un motor de ejecución de contenedores (container runtime) puede ejecutar múltiples aplicaciones contenedorizadas, lo que aumenta la utilización de recursos y reduce los costos.

Pruébalo

En esta práctica, verás cómo ejecutar un contenedor de Docker utilizando la interfaz gráfica (GUI) de Docker Desktop.

Utiliza las siguientes instrucciones para ejecutar un contenedor.

  1. Abre Docker Desktop y selecciona el campo Search en la barra de navegación superior.

  2. Especifica welcome-to-docker en la entrada de búsqueda y luego selecciona el botón Pull.

    Una captura de pantalla del Panel de Docker Desktop que muestra el resultado de la búsqueda de la imagen de Docker welcome-to-docker
  3. Una vez que la imagen se haya descargado correctamente, selecciona el botón Run.

  4. Expande los Optional settings.

  5. En el Container name, especifica welcome-to-docker.

  6. En el Host port, especifica 8080.

    Una captura de pantalla del Panel de Docker Desktop que muestra el cuadro de diálogo para ejecutar un contenedor con welcome-to-docker escrito como nombre del contenedor y 8080 especificado como número de puerto
  7. Selecciona Run para iniciar tu contenedor.

¡Felicidades! ¡Acabas de ejecutar tu primer contenedor! 🎉

Ver tu contenedor

Puedes ver todos tus contenedores yendo a la vista de Containers del Panel de Docker Desktop.

Captura de pantalla de la vista de contenedores de la GUI de Docker Desktop que muestra el contenedor welcome-to-docker ejecutándose en el puerto del host 8080

Este contenedor ejecuta un servidor web que muestra un sitio web simple. Al trabajar con proyectos más complejos, ejecutarás diferentes partes en diferentes contenedores. Por ejemplo, podrías ejecutar un contenedor diferente para el frontend, el backend y la base de datos.

Acceder al frontend

Cuando iniciaste el contenedor, expusiste uno de los puertos del contenedor en tu máquina. Piensa en esto como la creación de una configuración que te permite conectarte a través del entorno aislado del contenedor.

Para este contenedor, el frontend es accesible en el puerto 8080. Para abrir el sitio web, selecciona el enlace en la columna Port(s) de tu contenedor o visita http://localhost:8080 en tu navegador.

Captura de pantalla de la página de inicio proveniente del contenedor en ejecución

Explorar tu contenedor

Docker Desktop te permite explorar e interactuar con diferentes aspectos de tu contenedor. Pruébalo tú mismo.

  1. Ve a la vista de Containers en el Panel de Docker Desktop.

  2. Selecciona tu contenedor.

  3. Selecciona la pestaña Files para explorar el sistema de archivos aislado de tu contenedor.

    Captura de pantalla del Panel de Docker Desktop que muestra los archivos y directorios dentro de un contenedor en ejecución

Detener tu contenedor

El contenedor docker/welcome-to-docker continúa ejecutándose hasta que lo detengas.

  1. Ve a la vista de Containers en el Panel de Docker Desktop.

  2. Locate the container you'd like to stop.

  3. Selecciona la acción Stop en la columna Actions.

    Captura de pantalla del Panel de Docker Desktop con el contenedor welcome seleccionado y siendo preparado para detenerse

Sigue las instrucciones para ejecutar un contenedor utilizando la CLI:

  1. Abre tu terminal de CLI e inicia un contenedor utilizando el comando docker run:

    $ docker run -d -p 8080:80 docker/welcome-to-docker
    

    La salida de este comando es el ID completo del contenedor.

¡Felicidades! ¡Acabas de iniciar tu primer contenedor! 🎉

Ver tus contenedores en ejecución

Puedes verificar si el contenedor está funcionando utilizando el comando docker ps:

docker ps

Verás una salida como la siguiente:

 CONTAINER ID   IMAGE                      COMMAND                  CREATED          STATUS          PORTS                      NAMES
 a1f7a4bb3a27   docker/welcome-to-docker   "/docker-entrypoint.…"   11 seconds ago   Up 11 seconds   0.0.0.0:8080->80/tcp       gracious_keldysh

Este contenedor ejecuta un servidor web que muestra un sitio web simple. Al trabajar con proyectos más complejos, ejecutarás diferentes partes en diferentes contenedores. Por ejemplo, un contenedor diferente para el frontend, el backend y la base de datos.

Tip

El comando docker ps te mostrará solo los contenedores en ejecución. Para ver los contenedores detenidos, añade la bandera -a para enumerar todos los contenedores: docker ps -a

Acceder al frontend

Cuando iniciaste el contenedor, expusiste uno de los puertos del contenedor en tu máquina. Piensa en esto como la creación de una configuración que te permite conectarte a través del entorno aislado del contenedor.

Para este contenedor, el frontend es accesible en el puerto 8080. Para abrir el sitio web, selecciona el enlace en la columna Port(s) de tu contenedor o visita http://localhost:8080 en tu navegador.

Captura de pantalla de la página de inicio del servidor web Nginx, proveniente del contenedor en ejecución

Detener tu contenedor

El contenedor docker/welcome-to-docker continúa ejecutándose hasta que lo detengas. Puedes detener un contenedor utilizando el comando docker stop.

  1. Ejecuta docker ps para obtener el ID del contenedor.

  2. Proporciona el ID o nombre del contenedor al comando docker stop:

    docker stop <the-container-id>
    
Tip

Al hacer referencia a los contenedores por su ID, no es necesario proporcionar el ID completo. Solo necesitas proporcionar una parte del ID que sea suficiente para que sea único. Por ejemplo, el contenedor anterior podría detenerse ejecutando el siguiente comando:

docker stop a1f

Recursos adicionales

Los siguientes enlaces proporcionan orientación adicional sobre los contenedores:

Siguientes pasos

Ahora que has aprendido los conceptos básicos de un contenedor de Docker, es hora de aprender sobre las imágenes de Docker.

¿Qué es una imagen?