Buena introducción.
Parece que el curso https://platzi.com/clases/fundamentos-docker/ ya no existe.
Introducción
Lo que aprenderás sobre DevOps con GitLab
¿Qué es Devops?
El ciclo de vida del Devops
Introducción a Gitlab
Gitlab vs Github
Administración
Autenticación
Grupos
Autorización
Auditoría
Proyectos
Planificación
Tipos de desarrollo
Planificación en Gitlab-Issues
Planificación en Gitlab-Etiquetas
Planificación en Gitlab-Pesos
Planificación en Gitlab-Milestones
Planificación en Gitlab-Boards
Planificación en Gitlab-Service Desk
Planificación en Gitlab-Quick actions
Verificación
Inicialización del repositorio
Merge requests
Profundizando en Merge requests
Continuous Integration-CI
Gitlab CI
Automatizacion con GitLab Cl
Validacion de la configuracion con GitLab Cl
gitlab-ci.yml
Gitlab pages
Implementando Gitlab pages
¿Qué es el Desarrollo Ágil?
Gitlab autodevops
Implementando GitLab autodevops
Habilitando autodevops
Empaquetación
Gitlab container registry
Introducción a contenedores
Seguridad
Introducción a DevSecOps
Firmas de seguridad
Pruebas estáticas de seguridad
Escaneo de contenedores
Escaneo de dependencias
Pruebas dinámicas de seguridad
Gitlab security dashboard
Distribución
Continuous Delivery (CD)
Ambientes
Review apps
Estrategias de Distribución
Feature Flags
Rollback
Monitoreo
¿Por qué monitorear?
Métricas de desempeño (performance metrics)
Métricas de salud (health metrics)
Metricas de equipo
Rastreo de errores
Conclusiones
¿Por qué desarrollar con Gitlab?
Uno de los conceptos que han modificado de manera radical la forma en que desarrollamos software son los contenedores. Estoy seguro que si te mueves en el mundo de la tecnología has escuchado de Docker y Kubernetes. En esta clase vamos a investigar un poco más qué son los contenedores, cómo se comparan con otras tecnologías (como las máquinas virtuales) y cuáles son algunas de las opciones que tenemos para comenzar a utilizarlos.
Tanto los contenedores como las máquinas virtuales tienen un objetivo común: aislar a la aplicación y sus dependencias en una unidad que pueda ejecutarse en cualquier lugar. Más aún, tanto los contenedores como las máquinas virtuales eliminan la necesidad de proveer a nuestros servicios con hardware físico. Esto significa que se pueden utilizar de manera más eficiente los recursos computacionales que tenemos a nuestra disposición. La gran diferencia entre ambos es el enfoque arquitectónico que toman.
Una máquina virtual es esencialmente una emulación de una computadora con la capacidad de ejecutar procesos y programas. Las máquinas virtuales requieren de un hypervisor para poderse ejecutar sobre una host machine o directamente sobre “el metal”.
El hypervisor es un componente de software o hardware que permite a la host machine compartir recursos (RAM y procesadores) entre varias máquinas virtuales. Esto es importante, porque si el sistema está corriendo una aplicación de cómputo intensivo, se le pueden asignar más recursos que otras aplicaciones corriendo en el mismo sistema.
En este sentido, la máquina virtual que corre sobre un hypervisor se le conoce como la guest machine (máquina invitada). Esta guest machine contiene todo lo necesario para correr la aplicación (por ejemplo, binarios y librerías de sistema). También contiene toda una pila de hardware virtualizado (adaptadores de redes, almacenamiento, CPU, etc.). Desde el interior, la guest machine se comporta exactamente como una unidad de cómputo. Desde afuera, sabemos que está utilizando recursos compartidos que le otorga la host machine.
A diferencia de las máquinas virtuales –que proveen virtualización de hardware–, los contenedores proveen virtualización al nivel del sistema operativo (al abstraer el user space).
A primera vista, los contenedores se parecen mucho a las máquinas virtuales. Por ejemplo, tienen un espacio dedicado al procesamiento, pueden ejecutar comandos como root, tienen interfaces de red privadas y direcciones IP, permiten configurar reglas de ruteo y iptables, tienen la posibilidad de montar file systems, etc.
La gran diferencia es que los contenedores comparten el kernel de la host machine con otros contenedores.
El diagrama anterior muestra que los contenedores sólo empaquetan el user space, y no el kernel o hardware virtual como lo hace una máquina virtual. Podemos ver que toda la arquitectura del sistema operativo se comparte entre todos los contenedores. Lo único que se crea cada vez son la aplicación y las librerías y binarios. Esto es lo que hace a los contenedores tan ligeros.
Existen muchas tecnologías para crear contenedores, pero la más importante hoy en día es Docker. Docker es un proyecto open source que utiliza tecnologías de Linux para crear la abstracción de un contenedor. Sin embargo, esta no es la única tecnología en el mercado. Empresas como Google, llevan más de una década utilizando contenedores. Otros contendientes son: Solaris Zones, BSD jails, LXC, etc. Entonces, ¿qué fue lo que hizo que Docker tomara tanta relevancia?
Lo primero, es la facilidad de uso. Docker permite que cualquier usuario (desarrolladores, sysadmins, etc.), pueda empaquetar su aplicación rápidamente en su computadora personal y la misma aplicación puede correr ahora en cualquier nube pública, datacenter privado o directamente en hardware.
Una segunda ventaja es su velocidad. Los contenedores son bastante ligeros (comparados con las máquinas virtuales), pues son simplemente ambientes contenidos corriendo en el kernel. Las imágenes de Docker se crean en segundos, mientras que las máquinas virtuales toman más tiempo pues necesitan inicializar un sistema operativo completo cada vez.
Por último, Docker cuenta con el Docker Hub lo que permite compartir imágenes con mucha facilidad. Docker Hub tiene miles de imágenes públicas que han sido creadas por la comunidad para satisfacer casi cualquier necesidad. Puedes escoger entre decenas de sistemas operativos, lenguajes de programación y librerías para utilizar como base en tu aplicación.
Los contenedores son importantes en el mundo de Gitlab pues nos permiten aprovechar integraciones con clusters de Kubernetes y Gitlab Container Registry, y utilizar AutoDevOps para crear flujos inmediatos de DevOps que podrían tomarnos semanas si hiciéramos una integración ad hoc. Estas herramientas asumen que utilizas Docker y contenedores para empaquetar tu aplicación.
Si quieres aprender esta tecnología a profundidad, te recomiendo que tomes el curso de Fundamentos de Docker aquí mismo en Platzi: https://platzi.com/clases/fundamentos-docker/
Aportes 5
Preguntas 0
Buena introducción.
Parece que el curso https://platzi.com/clases/fundamentos-docker/ ya no existe.
Aprender Docker es un “must” hoy en día
Excelente introducción sobre los contenedores y las diferencias con las VM.
Muy buena la explicación, ahora me queda más clara la diferencia entre las VM y los containers
El curso de docker ahora esta disponible en este link https://platzi.com/clases/docker/
¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.