SlideShare una empresa de Scribd logo
LXC, Docker, LXD & snaps
Containers, Containers, Containers
Sergio Schvezov
Contenedores
Lo básico
Contenedores en distintos sistemas
operativos
Canonical
Como esta implementado en el kernel
● Solaris tiene zones
● FreeBSD tiene jails
● Linux tiene un monton de cosas agregadas a las que despues llaman
contenedor.
chroot
Canonical
● syscall
● Requiere CAP_SYS_CHROOT.
● No es seguro.
pivot_root
Canonical
mount /dev/hda1 /new-root
cd /new-root
pivot_root . old-root
exec chroot . sh <dev/console>dev/console2>&1
umount /old-root
Contenedores en Linux
Canonical
Formado por el conjunto de
● namespaces.
● cgroups.
● Linux capabilities.
● LSM.
● Seccomp.
● Networking.
Capabilities
Vista general
capabilities
Canonical
● Érase una vez o eras root o no lo eras.
● Capabilities pueden ser asignadas a threads o archivos.
● SUID root o ser root implica todas las capabilities.
● Capabilities tienen nombres como CAP_SYS_ADMIN, CAP_NET_ADMIN,
CAP_FOWNER…
● Capabilities asignados se pueden ver en /proc/$PID/status.
● Capabilities en archivos son guardados en xattr.
Namespaces
Vista general
namespaces: syscalls
Canonical
● clone clona un proceso y namespace. El nuevo proceso se une a ese
namespace.
● unshare crea nuevos namepaces y los une al proceso llamante.
● setns une procesos existentes a namespaces.
namespaces
Canonical
ls -al /proc/<pid>/ns
lrwxrwxrwx 1 root root 0 Apr 24 17:29 ipc -> ipc:
[4026531839]
lrwxrwxrwx 1 root root 0 Apr 24 17:29 mnt -> mnt:
[4026531840]
lrwxrwxrwx 1 root root 0 Apr 24 17:29 net -> net:
[4026531956]
lrwxrwxrwx 1 root root 0 Apr 24 17:29 pid -> pid:
[4026531836]
lrwxrwxrwx 1 root root 0 Apr 24 17:29 user -> user:
[4026531837]
lrwxrwxrwx 1 root root 0 Apr 24 17:29 uts -> uts:
[4026531838]
namespaces: user
Canonical
● El proceso tendrá un nuevo set de UIDs, GUIDs y capabilties en este
namespace.
● La base para contenedores sin privilegios.
● Aplicado pasando el flag CLONE_NEWUSER en la llamada clone() o
unshare().
namespaces: mount
Canonical
● Montaje y desmontaje dentro del namespace no afectará al resto del
sistema.
● Excepto cuando se use mount –make-shared.
● Aplicado pasando el flag CLONE_NEWNS en la llamada clone() o
unshare().
● Requiere CAP_SYS_ADMIN.
namespaces: PID
Canonical
● Hijos tendrán un conjunto distinto de mapeos de PID-a-proceso que su
padre.
● Aplicado pasando el flag CLONE_NEWPID en la llamada clone() o
unshare().
● Requiere CAP_SYS_ADMIN.
namespaces: ipc
Canonical
● Permite que un proceso tenga su propio espacio para objectos IPC System
V y POSIX message queues.
● Aplicado pasando el flag CLONE_NEWIPC en la llamada clone() o
unshare().
● Requiere CAP_SYS_ADMIN.
namespaces: UTS
Canonical
● Permite que un proceso tenga su propio nodename y domainname.
● Aplicado pasando el flag CLONE_NEWUTS en la llamada clone() o
unshare().
● Requiere CAP_SYS_ADMIN.
namespaces: network
Canonical
● Permite que un proceso tenga su propio stack de red.
● Aplicado pasando el flag CLONE_NEWNET en la llamada clone() o
unshare().
● Requiere CAP_SYS_ADMIN.
Ejemplos
cgroups
Vista general
cgroup: memory
Canonical
● Accounting: registro de las páginas usadas por el grupo.
● Soft limit → solo cuando el sistema esta bajo presión.
● Hard limit → OOM killer por grupo.
cgroup: cpu
Canonical
● Accounting: registro de tiempo de usuario/sistema en el grupo.
● Accounting: registro de uso por CPU.
● Asignar grupos a CPUs específicas.
● Reservar CPUs para procesos.
● Prevenir rebote de procesos entre CPUs.
cgroup: blkio
Canonical
● Accounting: registro de I/O en el grupo.
● Hacer throtling por grupo.
cgroup: devices
Canonical
● Controla lo que el grupo puede hacer con device nodes (r/w/mknod).
cgroup: freezer
Canonical
● Permite congelar un grupo de procesos.
● Como un SIGSTOP/SIGCONT masivo.
● No puede ser interferido por procesos.
Ejemplos
Seguridad
Seccomp, AppArmor & SELinux
seguridad: apparmor
Canonical
● Confina programas a un conjunto de recursos.
● A traves de perfiles levantados en el kernel.
● Dos modos: enforce y complain.
● Puede mediar:
●
acceso a archivos
●
bibliotecas.
●
capabilities.
●
dbus.
●
redes (protocolo, tipo, dominio).
●
unix sockets
●
…
seguridad: selinux
Canonical
● inodes en vez de paths.
● es mucho mas complejo…
seguridad: seccomp
Canonical
● Secure Computing Mode
● De forma predeterminada solamente permite exit(), sigreturn(), read() &
write()
● Procesos reciben SIGKILL si usan un syscall no permitido.
Ejemplos
Communications & Marketing: Q1
Containers
Runtimes
container runtimes: lxc
Canonical
● Herramientas de userland
● Los contenedores son un directorio en /var/lib/lxc
● Tiene un pequeño archivo de configuración + rootfs
● Fácil de usar por sysadmins.
container runtimes: docker
Canonical
● Daemon con API RESTish.
● Primeras versiones basadas en lxc.
● Ya saben…
container runtimes: lxd
Canonical
Qué es:
● Daemon con API REST simple.
● cli simple.
● Usa todos las caracteristicas de seguridad del kernel.
● Usa la API de lxc para manejar contenedores.
● Solo trabaja con contenedores de sistema completo.
● Contenedores sin privilegio por defecto.
container runtimes: lxd
Canonical
● Probalo → https://linuxcontainers.org/lxd/try-it/
Snaps
Overview
snaps: pitch
Canonical
● confinados.
● transaccionales.
● inmutables.
snaps: confinamiento
Canonical
● docker y lxc/lxd contienen.
● snaps estan confinados.
● hace pivot_root.
● solamente usa mount namespace.
● el namespace de red y procesos es el global.
● hace uso de LSM si esta disponible.
● espacios de escritura segregados.
snaps: lo que ve un snap
Canonical
versioned root writable area
(for services)
$SNAP_DATA
common root writable area
(for services)
$SNAP_COMMON
versioned user writable area
$SNAP_USER_DATA
/tmp (per service and
app)/tmp (per service and
app)
/tmp
(per service and app
process)
~
/dev/<device>
/sys
/
(from
core snap)
/var/lib/snapd/hostfs
(/ from host)
snap code & assets
(squashfs, RO bind-mounted in /snap/<snap_name>/<version>)
$SNAP
Service
common user writable area
$SNAP_USER_COMMON
Service CLI GUI
snaps: cómo interactuan
Canonical
app snapapp snap
app writable
area
app writable
area
app snap
app writable
area
app snap
app writable
area
snaps: all snaps
Canonical
Kernel snap
Core snap
Gadget snap
App snap
App snap
App snap
Content interface snap
snaps: comparación
Canonical
Host Linux Filesystem
Machine
Containers
Process
Containers
Snap extends host
Virtual
Machines
Traditional operations Traditional operations Mesos / Kubernetes / Swarm
KVM LXD Docker / RunC / Rkt
snaps: all snaps
Canonical
Kernel snap
Core snap
Gadget snap
App snap
App snap
App snap
Content interface snap
Ejemplos
Preguntas
Gracias
Sergio Schvezov
sergio.schvezov@canonical.com
canonical.com
ubuntu.com
bibliografía
Canonical
● Herramientas de userland
● Los contenedores son un directorio en /var/lib/lxc
● Tiene un pequeño archivo de configuración + rootfs
● Fácil de usar por sysadmins.

Más contenido relacionado

PDF
Despliegue de aplicaciones Java con Docker y Kubernetes
PPTX
Devopsconf2015- Marcos y Jonathan Mantika
PDF
Introducción a Kubernetes
PDF
Introducción a GraalVM Native para aplicaciones JVM
PDF
Kubernetes - #dockerconlima
PPTX
Overview atlas (1)
PDF
Explorando los objetos centrales de Kubernetes con Oracle Cloud
PDF
Empaquetando aplicaciones Java con Docker y Kubernetes
Despliegue de aplicaciones Java con Docker y Kubernetes
Devopsconf2015- Marcos y Jonathan Mantika
Introducción a Kubernetes
Introducción a GraalVM Native para aplicaciones JVM
Kubernetes - #dockerconlima
Overview atlas (1)
Explorando los objetos centrales de Kubernetes con Oracle Cloud
Empaquetando aplicaciones Java con Docker y Kubernetes

La actualidad más candente (20)

PDF
Jesús Amieiro: Git para el día a día
TXT
Instrucciones install ppdf
PDF
Fury - Docker Meetup
PDF
Docker, kubernetes, openshift y openstack, para mi abuela. techfest 2017.pptx
PDF
Cloud Native Mexico - Introducción a Kubernetes
PPTX
Meetup de kubernetes, conceptos básicos.
PDF
Tolerancia a fallas, service mesh y chassis
PDF
Desarrollo moderno con DevOps y Cloud Native
PDF
Introducción a Kotlin para desarrolladores Java
PDF
Contenedores como Servicio con Docker
PDF
Iniciando microservicios reales con JakartaEE/MicroProfile y arquetipos de Maven
PDF
Introducción a Docker
PDF
¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!
PPTX
Docker containers-itb-2021
PDF
Docker Ecosystem: Engine, Compose, Machine, Swarm, Registry
PDF
Eleva tu capacidad con Groovy
PDF
Actualizando aplicaciones empresariales en Java desde Java 8 on premise hasta...
PDF
Manejo de packages en Kubernetes con Helm
ODP
Uso de git (Cursos de e-ghost 2011)
PDF
Jenkins pipeline
Jesús Amieiro: Git para el día a día
Instrucciones install ppdf
Fury - Docker Meetup
Docker, kubernetes, openshift y openstack, para mi abuela. techfest 2017.pptx
Cloud Native Mexico - Introducción a Kubernetes
Meetup de kubernetes, conceptos básicos.
Tolerancia a fallas, service mesh y chassis
Desarrollo moderno con DevOps y Cloud Native
Introducción a Kotlin para desarrolladores Java
Contenedores como Servicio con Docker
Iniciando microservicios reales con JakartaEE/MicroProfile y arquetipos de Maven
Introducción a Docker
¿Cómo se despliega y autoescala Couchbase en Cloud? ¡Aprende de manera práctica!
Docker containers-itb-2021
Docker Ecosystem: Engine, Compose, Machine, Swarm, Registry
Eleva tu capacidad con Groovy
Actualizando aplicaciones empresariales en Java desde Java 8 on premise hasta...
Manejo de packages en Kubernetes con Helm
Uso de git (Cursos de e-ghost 2011)
Jenkins pipeline
Publicidad

Similar a LXC, Docker, LXD &snaps (20)

PPT
Comandos de linux
PDF
Mis comandos favoritos en linux parte 3
PDF
PPTX
Redes en linux
PDF
[ES] Administración de servicios en GNU/Linux
PPTX
Mis comandos favoritos en linux parte 3
PDF
Contenedores 101 Digital Ocean CDMX
PPTX
2.6.montajes y accesos a medios
PDF
Hablemos de Systemd
PPTX
Red hat
PPTX
LINUXsddsdsdsdsdssdsddssddssdsdsdsd.pptx
PPTX
Arquitectura sistemas operativos
ODP
Linux containers
PPTX
PDF
Curso Linux Basico
DOC
Comandos linux y windows
PPTX
Presentación Docker
PPTX
Systemd en Centos 7
Comandos de linux
Mis comandos favoritos en linux parte 3
Redes en linux
[ES] Administración de servicios en GNU/Linux
Mis comandos favoritos en linux parte 3
Contenedores 101 Digital Ocean CDMX
2.6.montajes y accesos a medios
Hablemos de Systemd
Red hat
LINUXsddsdsdsdsdssdsddssddssdsdsdsd.pptx
Arquitectura sistemas operativos
Linux containers
Curso Linux Basico
Comandos linux y windows
Presentación Docker
Systemd en Centos 7
Publicidad

Último (20)

PDF
Diapositiva proyecto de vida, materia catedra
DOCX
Zarate Quispe Alex aldayir aplicaciones de internet .docx
PPTX
ANCASH-CRITERIOS DE EVALUACIÓN-FORMA-10-10 (2).pptx
PPTX
CLAASIFICACIÓN DE LOS ROBOTS POR UTILIDAD
PPTX
El uso de las TIC en la vida cotidiana..
DOCX
TRABAJO GRUPAL (5) (1).docxsjjsjsksksksksk
PDF
informe_fichas1y2_corregido.docx (2) (1).pdf
PPT
El-Gobierno-Electrónico-En-El-Estado-Bolivia
PPTX
Propuesta BKP servidores con Acronis1.pptx
PPTX
la-historia-de-la-medicina Edna Silva.pptx
PDF
Influencia-del-uso-de-redes-sociales.pdf
PDF
ADMINISTRACIÓN DE ARCHIVOS - TICS (SENA).pdf
PDF
MANUAL TECNOLOGÍA SER MINISTERIO EDUCACIÓN
PPTX
sa-cs-82-powerpoint-hardware-y-software_ver_4.pptx
PDF
PRESENTACIÓN GENERAL MIPIG - MODELO INTEGRADO DE PLANEACIÓN
PPTX
Sesion 1 de microsoft power point - Clase 1
PDF
CONTABILIDAD Y TRIBUTACION, EJERCICIO PRACTICO
PDF
Instrucciones simples, respuestas poderosas. La fórmula del prompt perfecto.
PPTX
Historia Inteligencia Artificial Ana Romero.pptx
PPTX
Presentacion de Alba Curso Auditores Internos ISO 19011
Diapositiva proyecto de vida, materia catedra
Zarate Quispe Alex aldayir aplicaciones de internet .docx
ANCASH-CRITERIOS DE EVALUACIÓN-FORMA-10-10 (2).pptx
CLAASIFICACIÓN DE LOS ROBOTS POR UTILIDAD
El uso de las TIC en la vida cotidiana..
TRABAJO GRUPAL (5) (1).docxsjjsjsksksksksk
informe_fichas1y2_corregido.docx (2) (1).pdf
El-Gobierno-Electrónico-En-El-Estado-Bolivia
Propuesta BKP servidores con Acronis1.pptx
la-historia-de-la-medicina Edna Silva.pptx
Influencia-del-uso-de-redes-sociales.pdf
ADMINISTRACIÓN DE ARCHIVOS - TICS (SENA).pdf
MANUAL TECNOLOGÍA SER MINISTERIO EDUCACIÓN
sa-cs-82-powerpoint-hardware-y-software_ver_4.pptx
PRESENTACIÓN GENERAL MIPIG - MODELO INTEGRADO DE PLANEACIÓN
Sesion 1 de microsoft power point - Clase 1
CONTABILIDAD Y TRIBUTACION, EJERCICIO PRACTICO
Instrucciones simples, respuestas poderosas. La fórmula del prompt perfecto.
Historia Inteligencia Artificial Ana Romero.pptx
Presentacion de Alba Curso Auditores Internos ISO 19011

LXC, Docker, LXD &snaps

Notas del editor

  • #3: Que es un contenedor? Elevator pitch: - algo a lo que le puedo hacer ssh - algo a lo que se parece a una VM Mas bajo nivel: - usa el kernel del host - no puede levantar sus propios modulos. - no necesita init como PID1
  • #6: initrd usa esto
  • #9: Threads: Permitted, Inheritable, Effective, Ambient. Files: Permitted, Inheritable, Effective.
  • #10: Lo que ve un proceso. Como lo ve
  • #12: Cada namespace tiene asignado su propio inode El namespace se termina cuando todos sus procesos se terminan y nadie se agarra del inode.
  • #13: unshare --map-root-user --user bash touch s ls -l s exit ls -l s
  • #14: unshare -m --map-root-user --user bash cat /proc/self/mounts mount -n -o size=1m -t tmpfs tmpfs $(mktemp -d –tmpdir=/tmp) cat /proc/self/mounts|tail -1
  • #15: No se si este lo usa docker. Nesting de hasta 32 Sirve para containers o para facilitar process migration, por ej usando CRIU Evitamos colisiones si los procesos que se migran viven en su propio ns. CRIU → Checkpoint-Restore In Userspace. openVZ tiene su propia implementacion
  • #16: When an IPC namespace is destroyed (i.e., when the last process that is a member of the namespace terminates), all IPC objects in the namespace are automatically destroyed.
  • #17: El mas simple de implementar en el kernel. Su estructura de datos tiene solamente 6 miembros: - sysname - nodename - release - version - machine - domainname
  • #18: kernel struct es gigante loopback device SNMP todas las tablas de red. network fs profs sysfs sockets Para comunicar namespaces usamos veth, todos los veth se conectan a un bridge (docker0). al crearse se crea un dispositivo de loopback un socket pertenece a un solo namespace When a network namespace is freed (i.e., when the last process in the namespace terminates), its physical network devices are moved back to the initial network namespace (not to the parent of the process).
  • #19: # user unshare --map-root-user --user bash ls -l /proc/self/ns cat /proc/self/uid_map touch s ls -l s exit ls -l s mount -n -o size=1m -t tmpfs tmpfs $(mktemp -d –tmpdir=/tmp) #fail ping google.com #fail # mount unshare -m --map-root-user --user bash cat /proc/self/mounts mount -n -o size=1m -t tmpfs tmpfs $(mktemp -d –tmpdir=/tmp) cat /proc/self/mounts|tail -1 # pid unshare --pid --fork --mount-proc --user –map-root-user ps aux # uts unshare --uts --user --map-root-user bash hostname mordor
  • #20: control groups es un subsistema para Manejar los recursos, hacer accounting y seguimient (accounting and tracking). Maneja recursos tales como memoria, cpu, redes, dispositivos. En cuanto a contenedores limita lo que podes usar (a diferencia de namespaces que limita lo que podes ver). Interfaz en el filesystem, interfaces mas altas a traves de cgmanager o systemd es un arbol, arrancamos con un nodo, cada proceso esta atado a uno de estos nodos. Siempre estamos en un cgroup.
  • #21: Cada pagina se cobra a un grupo, si la pagina se comparte se cobra a uno solo.
  • #22: No hay limites, throttling y demas hacen que sea impreciso. knobs: poner peso a la migracion de procesos.
  • #25: usado para process migration
  • #26: sudo cgm create all valinor ls /sys/fs/cgroup sudo cgm chown all valinor $(id -u) $(id -g) cgm movepid all valinor $$ cgm setvalue freezer valinor freezer.state FROZEN
  • #28: confinamiento a un contenedor.
  • #29: confinamiento a un contenedor.
  • #30: confinamiento a un contenedor.
  • #31: sudo aa-status cat /var/lib/snapd/apparmor/profiles/snap.docker.dockerd cat /var/lib/snapd/apparmor/profiles/snap.vim.vim less /var/lib/snapd/seccomp/profiles/snap.docker.dockerd
  • #32: openvz esta tambien desde mucho antes. systemd-nspawn es reciente.
  • #33: openvz esta tambien desde mucho antes. systemd-nspawn es reciente.
  • #45: sudo aa-status cat /var/lib/snapd/apparmor/profiles/snap.docker.dockerd cat /var/lib/snapd/apparmor/profiles/snap.vim.vim less /var/lib/snapd/seccomp/profiles/snap.docker.dockerd
  • #47: openvz esta tambien desde mucho antes. systemd-nspawn es reciente.