# ¿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.

**Usar la interfaz gráfica (GUI)**



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](/get-started/docker-concepts/the-basics/what-is-a-container/images/search-the-docker-image.webp?border=true&w=1000&h=700)

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](/get-started/docker-concepts/the-basics/what-is-a-container/images/run-a-new-container.webp?border=true&w=550&h=400)

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](/get-started/docker-concepts/the-basics/what-is-a-container/images/view-your-containers.webp?border=true&w=750&h=600)

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](http://localhost:8080) en tu navegador.

![Captura de pantalla de la página de inicio proveniente del contenedor en ejecución](/get-started/docker-concepts/the-basics/what-is-a-container/images/access-the-frontend.webp?border)

### 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](/get-started/docker-concepts/the-basics/what-is-a-container/images/explore-your-container.webp?border)

### 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](/get-started/docker-concepts/the-basics/what-is-a-container/images/stop-your-container.webp?border)

**Usar la CLI**



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`](/reference/cli/docker/container/run/):

   ```console
   $ 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`](/reference/cli/docker/container/ls/):

```console
docker ps
```

Verás una salida como la siguiente:

```console
 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](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](/get-started/docker-concepts/the-basics/what-is-a-container/images/access-the-frontend.webp?border)

### 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`](/reference/cli/docker/container/stop/):

   ```console
   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:
>
> ```console
> docker stop a1f
> ```



## Recursos adicionales

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

- [Ejecutar un contenedor](/engine/containers/run/)
- [Descripción general de los contenedores](https://www.docker.com/resources/what-container/)
- [¿Por qué Docker?](https://www.docker.com/why-docker/)

## 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?](/get-started/docker-concepts/the-basics/what-is-a-container/what-is-an-image)


