Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Contenedores desde cero

Contenedores desde cero

Presentación para el meetup de Cloud Native MX

Explica el concepto de 'container' y sus diferencias con las máquinas virtuales. Utilizando LXC como base, se definen los contenedores explicando sus partes internas mientras se desarrolla un container runtime

Avatar for Juan Carlos

Juan Carlos

May 08, 2018

Other Decks in Programming

Transcript

  1. ¿Qué es un contenedor? Creando un contenedor desde cero 8

    de mayo de 2018 Juan Carlos Sánchez github.com/juanjcsr Cloud Native MX
  2. ¿Quién soy? • Desarrollador de software • OPI Analytics •

    “Frontend developer” • Sistemas distribuidos, aplicaciones móviles, lenguajes de programación • Twitter: gojcs Github: juanjcsr
  3. Agenda 1. ¿Qué es un contenedor? 2. Conceptos básicos de

    contenedores a. Filesystem b. Namespace c. Cgroup 3. Creando un contenedor
  4. Una máquina virtual: • Tiene un hipervisor (tipo 1 o

    tipo 2) • El hipervisor solicita los recursos • El SO administra sus recursos asignados (CPU, memoria) • Cada VM tiene su propio Kernel • Administra: ◦ Hardware virtual ◦ Sistema Operativo ◦ Userspace
  5. Un contenedor: • Provee virtualización del Sistema Operativo abstrayendo el

    “user space” • Comparte el kernel (cpu, recursos, etc) con el huésped
  6. - Bibliotecas - Dependencias - etc “En mi local sí

    funciona” En el inicio de los tiempos...
  7. - Bibliotecas - Dependencias - etc - Bibliotecas - Dependencias

    - etc Maquina Virtual • Máquinas virtuales ◦ AMI ◦ Vagrantfiles ◦ VMI ◦ ... En el inicio de los tiempos...
  8. - Bibliotecas - Dependencias - etc - Bibliotecas - Dependencias

    - etc Máquina Virtual - Bibliotecas - Dependencias - etc - Bibliotecas - Dependencias - etc - Bibliotecas - Dependencias - etc - Bibliotecas - Dependencias - etc - Bibliotecas - Dependencias - etc En el inicio de los tiempos...
  9. Entonces… ¿qué es un contenedor? • Es una virtualización de

    sistema operativo • Permite “aislar procesos”, compartiendo los recursos y el kernel del huésped • Es ligero y replicable
  10. ¿Cómo se hace un contenedor? LXC define 3 elementos necesarios:

    • Filesystem - chroot • Namespaces • cgroups
  11. Namespaces • Aíslan procesos • Se acceden a ellos mediante

    el comando “unshare” • Existen 6 tipos: ◦ *UTS - Aísla el hostname ◦ *PID - Asigna una tabla de procesos especial para el contenedor ◦ *MNT - Permite que el proceso tenga su propio sistema de archivos ◦ USER - Mapea usuarios huésped a usuarios de contenedor ◦ NET - Asigna red al contenedor ◦ IPC - Permite comunicación entre procesos * Los que usaremos en el demo
  12. UTS Namespace • UTS = Unix Time sharing • Aísla

    hostname • Permite reconocer al contenedor como una computadora distinta
  13. MNT Namespace Permite generar nuevos puntos de montaje sin afectar

    el huésped. MNT nos permite cambiar el sistema de archivos del guest
  14. ¿Por qué contenedores? • No es tecnología “nueva”: Linux Containers

    (LXC) 2008 • “chroot”, 1982 • jail, sysjail, Linux VServer, Solaris Containers, LXC… • Docker!
  15. - Bibliotecas - Dependencias - etc - Bibliotecas - Dependencias

    - etc Máquina Virtual - Bibliotecas - Dependencias - etc - Bibliotecas - Dependencias - etc - Bibliotecas - Dependencias - etc - Bibliotecas - Dependencias - etc - Bibliotecas - Dependencias - etc Necesidad de tener muchos ambientes
  16. Un mundo más allá de Docker Contenedores Docker LXC Ltctfy

    Containerd rkt Orquestradores Docker Swarm Kubernetes Mesos Tracing, monitoring, networking, security y más