Introducción
a
containers
75.52 - Taller de programación II
Agenda
- Containers
- Definición
- VM's vs Containers
- Docker
- Arquitectura
- Beneficios
- Usos comunes
- Detrás de Docker
- Arquitectura
- Componentes
- Ejemplos
Containers
containers
Un contenedor de Linux es un conjunto de procesos separados del resto del sistema, los cuales pueden ejecutarse desde una imagen diferente que proporciona todos los archivos necesarios para que funcionen. Al proporcionar una imagen que contiene todas las dependencias de una aplicación, es portátil y consistente mientras cambia de la etapa de desarrollo a la de prueba y, finalmente, a la de producción.
VM's vs containers
VM's + containers
Encuesta
- ¿Quién conoce sobre Docker?
- ¿Quién usa Docker para desarrollo?
- ¿Quién usa Docker en producción?
- ¿Quién intentó y se dió por vencido?
arquitectura
beneficios
- Rápido (deployment, migración, restarts)
- Seguro
- Liviano (ahorro de disco & CPU)
- Open Source (Moby project)
- Software portable
- Microservices e integraciones (APIs)
- Simplifica DevOps
- Funciones de control de versiones
usos comunes
- Ambiente de sandbox (develop, test, debug, educación)
- Continuous Integration & Deployment
- Para escalar aplicación
- Desarrollo colaborativo
- Configuración de infraestructura
- Desarrollo local
- Aplicaciones multi-tier
- PaaS, SaaS
Detras de docker
- Linux x86-64
- Go
- Cliente - Servidor arquitectura (deamon)
- Union file systems (UnionFS: AUFS, btrfs, vfs etc)
- Namespaces (pid, net, ipc, mnt, uts)
- Control Groups (cgroups)
- Container format (libcontainer)
Componentes
- (Docker) client
- daemon
- engine
- machine
- compose
- swarm
- registry
Docker client
Es la principal interfaz de usuario con Docker. Acepta comandos del usuario y se comunica ida y vuelta con un daemon Docker.
daemon
Corre en la máquina host. El usuario no interactua directamente con el daemon, sino a través del cliente de Docker con la API RESTful o vía socket.
engine
Un cliente con un daemon como también la herramienta docker-compose. Por lo general se refiere simplemente como "docker".
machine
Es una herramienta que facilita crear hosts Docker en una computadora, en provedores "cloud" y dentro de tu propio data center. Crea servidores, instala Docker y configura el cliente para hablar con ellos.
compose
Es una herramienta para definir y correr aplicaciones complejas con Docker (eg una aplicación multi-container) con un solo archivo.
swarm/kubernetes
Herramienta nativa de clustering para Docker. Pools Swarm junto con varios hosts Docker expuestos como un único Docker host virtual. Escala a multiples hosts.
registry
Un servicio (alojado) que contiene repositorios de imágenes que responde a la Registry API.
La imagen Docker
El contenedor Docker
Archivo dockerfile
Un Dockerfile es un documento de texto que contiene todos los comandos que un usuario puede llamar en la línea de comandos para crear una imagen.
FROM komljen/ubuntu
RUN \
add-apt-repository -y ppa:chris-lea/redis-server && \
apt-get update && \
apt-get -y install \
redis-server && \
rm -rf /var/lib/apt/lists/*
RUN rm /usr/sbin/policy-rc.d
CMD ["/usr/bin/redis-server"]
EXPOSE 6379
Comandos básicos de Docker
// Información general
man docker // man docker-run
docker help // docker help run
docker info
docker version
docker network ls
// Imágenes
docker images // docker [IMAGE_NAME]
docker pull [IMAGE] // docker push [IMAGE]
// Containers
docker run
docker ps // docker ps -a, docker ps -l
docker stop/start/restart [CONTAINER]
docker stats [CONTAINER]
docker top [CONTAINER]
docker port [CONTAINER]
docker inspect [CONTAINER]
docker inspect -f "{{ .State.StartedAt }}" [CONTAINER]
docker rm [CONTAINER]
Tips de DockeR
- Optimizar containers (ver fromlatest.io y imagelayers.io)
- Crear tu propia y pequeña base de imagenes
- Los containers no son Virtual Machines
- Imágenes full stack VS 1 proceso por Container
- Crear tu registro privado
- Crear shortcuts para comandos
Recursos
- Awesome Docker (lista de recursos y proyectos)
- Docker cheat sheet
- Docker in Practice, The Docker Book (books)
- Docker casos de estudio
Preguntas?
¿Preguntas?
Introducción a containers
By Agustin Rojas
Introducción a containers
- 149