# 1.2.- ¿Qué es un contenedor?.

# Reflexiona

Juan y Eva, después de haber escuchado sobre Docker y sus beneficios, decidieron investigar más a fondo qué es un contenedor de Docker y cómo montar uno. Comenzaron consultando la documentación oficial de Docker y varios tutoriales en línea para comprender mejor los conceptos y los pasos necesarios.

Juan y Eva estaban entusiasmados por su éxito en montar un contenedor de Docker y comenzaron a explorar cómo podrían aplicar estos conceptos a sus propias aplicaciones y proyectos. Se dieron cuenta de que, al comprender y utilizar Docker, podrían mejorar la colaboración en su equipo y acelerar el proceso de desarrollo e implementación de sus aplicaciones.

### Un contenedor es...

pixabay.com. Portacontenedores (CC BY)

Una unidad de software ligera y portátil que empaqueta una aplicación y todas sus dependencias, permitiendo que se ejecute de manera consistente en diferentes entornos. Los contenedores se basan en imágenes, que son plantillas inmutables que contienen la configuración y las dependencias de la aplicación. También lo podemos definir como un proceso que ha sido aislado de todos los demás procesos en la máquina
anfitriona (máquina host). Ese aislamiento aprovecha características de Linux como los namespaces del kernel y cgroups.

Los namespaces del kernel son una característica del kernel de Linux que permite aislar y separar los recursos del sistema entre distintos procesos o grupos de procesos, proporcionando una capa de abstracción y seguridad. Esencialmente, los namespaces permiten a los procesos ver solo una parte de los recursos del sistema, como si estuvieran en su propio entorno aislado, aunque comparten el mismo kernel con otros procesos. Los namespaces son fundamentales en la implementación de tecnologías de contenedores, como Docker, ya que permiten aislar y limitar el acceso a los recursos del sistema para los contenedores, mejorando la seguridad y la gestión de recursos. Existen varios tipos de namespaces en el kernel de Linux, cada uno de los cuales se enfoca en aislar un aspecto específico del sistema: Mount (mnt): Aísla las vistas del sistema de archivos, permitiendo a los procesos tener su propio conjunto de puntos de montaje. Process ID (pid): Proporciona a los procesos su propio espacio de ID de proceso, de modo que un proceso no pueda ver o interactuar con los procesos de otro namespace. Network (net): Permite a los procesos tener su propia pila de red, interfaces y rutas, lo que garantiza que los contenedores tengan una configuración de red independiente. Interprocess Communication (ipc): Separa los recursos de comunicación entre procesos, como semáforos y colas de mensajes, para evitar conflictos e interferencias. User ID (user): Aísla los ID de usuario y grupo, lo que permite a los procesos tener su propia asignación de ID de usuario y grupo sin afectar a otros namespaces. Control group (cgroup): Restringe el acceso a los cgroups, que son una forma de agrupar y limitar el uso de recursos del sistema, como la CPU y la memoria. Time (time): Permite a los procesos tener su propio reloj y zona horaria, lo que puede ser útil para la sincronización de eventos en aplicaciones distribuidas. Al combinar estos diferentes tipos de namespaces, es posible crear entornos aislados y seguros para ejecutar aplicaciones y procesos, lo que ha hecho posible el desarrollo de tecnologías de contenedores modernas y eficientes.

son una forma de agrupar y limitar el uso de recursos del sistema, como la CPU y la memoria.

# Para saber más

Aunque profundizaremos bastante más en el tema, a continuación, se presenta una lista de recursos web que pueden ayudarte a aprender más sobre la tecnología de contenedores y sus aplicaciones en el desarrollo y la administración de sistemas:

- Docker (https://www.docker.com/): Es el sitio web oficial de Docker, la plataforma de contenedores más popular. Aquí puedes encontrar documentación, tutoriales, casos de estudio y noticias sobre Docker y la comunidad de contenedores en general.
- Kubernetes (https://kubernetes.io/): Es el sitio web oficial de Kubernetes, un sistema de orquestación de contenedores ampliamente utilizado que permite administrar, escalar y mantener aplicaciones basadas en contenedores. Ofrece documentación detallada, guías y tutoriales para comenzar con Kubernetes.
- Docker Hub (https://hub.docker.com/): Es el repositorio central de imágenes de Docker, donde puedes buscar y descargar imágenes de contenedores públicas, así como compartir tus propias imágenes con la comunidad.
- Containerd (https://containerd.io/): Es un proyecto de código abierto que proporciona un demonio de contenedor para controlar la ejecución de contenedores en sistemas Linux y Windows. Puedes aprender más sobre Containerd y cómo se utiliza en sistemas de contenedores en su sitio web oficial.
- CNCF (https://www.cncf.io/): La Cloud Native Computing Foundation es una organización que promueve y apoya tecnologías de contenedores y nativas de la nube, como Kubernetes y Prometheus. En su sitio web, puedes encontrar información sobre eventos, proyectos y recursos relacionados con la tecnología de contenedores.
- rkt (https://github.com/rkt/rkt): Es un proyecto de código abierto que ofrece una alternativa a Docker para la creación y ejecución de contenedores. Puedes aprender más sobre rkt y cómo utilizarlo en su repositorio de GitHub.
- LXC (https://linuxcontainers.org/lxc/introduction/): Linux Containers (LXC) es una tecnología de contenedores a nivel de sistema operativo que permite ejecutar múltiples sistemas Linux aislados en un solo host. Puedes encontrar documentación y recursos sobre LXC en su sitio web oficial.
- Blog de Google Cloud (https://cloud.google.com/blog/topics/containers): El blog de Google Cloud ofrece una sección dedicada a contenedores y tecnologías relacionadas. Puedes encontrar artículos y tutoriales sobre Docker, Kubernetes y otros temas relacionados con contenedores.
- Red Hat OpenShift (https://www.openshift.com/): OpenShift es una plataforma de contenedores basada en Kubernetes y desarrollada por Red Hat. Su sitio web ofrece documentación, tutoriales y recursos para aprender sobre OpenShift y cómo se utiliza en el desarrollo y la implementación de aplicaciones basadas en contenedores.

Estos recursos nos ofrecen una amplia variedad de información y guías prácticas sobre la tecnología de contenedores, que te permitirán ampliar tus conocimientos y habilidades en el uso y administración de contenedores en diferentes contextos y aplicaciones.

Creado con eXeLearning (Ventana nueva)