Contenedores+con+docker-es.pdf

  • Uploaded by: Julio César Brizuela
  • 0
  • 0
  • May 2020
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Contenedores+con+docker-es.pdf as PDF for free.

More details

  • Words: 1,759
  • Pages: 52
Contenedores con Dr. Pedro J. Molina Desarrollador Independiente @pmolinam

Agenda 1. 2. 3. 4. 5. 6. 7.

Introducción a Docker (teórica) Introducción a Docker (práctica): manos a ello Docker files Docker CLI Docker-Compose Casos de uso Y más allá…

¿A qué me dedico?  Domain Specific Languages

 Generación de código

Desarrollador Independiente

Colaboro con: http://www.formacion.lemoncode.net Anteriormente:

 Microservicios

 CTO

 JavaScript, TypeScript, C#

 App Builders

 Backends

 Project Manager

 Despliegues en nube  Arquitectura de Software  Consultoría

 DSLs

 Arquitectura de Software  DSLs  DSLs

 Generación de código

Evolución: Aplicaciones Aplicación clienteservido pesada sobre cliente pesado.

Stack estandarizado: - SO - Runtime - Middleware

Infraestructura Física Monolítica

1995

2015

Aplicación ligera en un móvil o tablet.

Ensamblada por desarrolladores usando los mejores servicios disponibles.

Corriendo en cualquier conjunto de recursos disponibles (públicos/privados/ o virtualizados)

La nube  Llego para quedarse  CPD caros para PYMEs  Nube = Commodity

 Guerra de precios  A medio plazo concentración  Solo quedarán los grandes

User DB Static website

postgresql + pgv8 + v8

nginx 1.5 + modsecurity + openssl + bootstrap 2

Background workers Python 3.0 + celery + pyredis + libcurl + ffmpeg + libopencv + nodejs + phantomjs

Queue

Analytics DB

Redis + redis-sentinel

hadoop + hive + thrift + OpenJDK

Web frontend Ruby + Rails + sass + Unicorn

API endpoint

Do services and apps interact appropriately?

Multiplicity of Stacks

El problema que solventa Docker

Development VM

Production Cluster

Public Cloud

QA server Disaster recovery Contributor’s laptop

Customer Data Center Production Servers

Can I migrate smoothly and quickly?

Multiplicity of hardware environments

Python 2.7 + Flask + pyredis + celery + psycopg + postgresql-client

El problema que solventa Docker Static website

?

?

?

?

?

?

?

Web frontend

?

?

?

?

?

?

?

Background workers

?

?

?

?

?

?

?

User DB

?

?

?

?

?

?

?

Analytics DB

?

?

?

?

?

?

?

Queue

?

?

?

?

?

?

?

Development VM

QA Server

Single Prod Server

Onsite Cluster

Public Cloud

Contributor’s laptop

Customer Servers

Multiplicity of Goods

Do I worry about how goods interact (e.g. coffee beans next to spices)

Can I transport quickly and smoothly (e.g. from boat to train to truck)

Multipilicity of methods for transporting/storing

Símil: Transporte en antes de los años 60

Problema N x M  No escala ?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

Solución: El Container Do I worry about how goods interact (e.g. coffee beans next to spices)

Multiplicity of Goods A standard container that is loaded with virtually any goods, and stays sealed until it reaches final delivery.

Can I transport quickly and smoothly (e.g. from boat to train to truck)

Multiplicity of methods for transporting/storing

…in between, can be loaded and unloaded, stacked, transported efficiently over long distances, and transferred from one mode of transport to another

Docker Static website

User DB

Web frontend

Queue

Analytics DB Do services and apps interact appropriately?

Multiplicity of Stacks An engine that enables any payload to be encapsulated as a lightweight, portable, self-sufficient container…

…that can be manipulated using standard operations and run consistently on virtually any hardware platform

Multiplicity of hardware environments

Can I migrate smoothly and quickly Development VM

QA server

Customer Data Center

Public Cloud

Production Cluster

Contributor’s laptop

Docker elimina el problema estandarizando Static website

Web frontend

Background workers

User DB

Analytics DB

Queue

Development VM

QA Server

Single Prod Server

Onsite Cluster

Public Cloud

Contributor’s laptop

Customer Servers

Beneficios para desarrolladores  Entornos limpios, seguros y portables.  Despliegues reproducibles (sin perdida de dependencias)  Aislamiento de aplicaciones  Tests, integración, empaquetado automatizado  Menores problemas de compatibilidad  Despliegues rápidos y baratos

 Una Maquina Virtual sin la penalización de una MV

Beneficios para devops  Configura una vez, corre cientos  Despliegues estandarizados y repetibles  Elimina inconsistencias entre entornos (devel, qa, prod, etc.)  Permite segregación de responsabilidades  Mejora la velocidad de CI y CD  Más ligeros que una MV

Separación de Responsabilidades (SoC)  Alicia, la Desarrolladora  Precupada por “que hay dentro” del container.  Su código  Sus librerias  Su gestor de paquetes  Sus Apps  Sus datos  Todos los Servidores Linux son iguales

• Carmen, la Devop • Preocupada por lo que hay fuera del contedor • • • •

Logging Acceso Remoto Monitorización Configuración de Red

• Todos los contenedores se arrancan, para, copian, mse migran del mismo modo.

Docker: Las tripas ¿Porqué? • Corre en cualquier sitio (Linux) • • • •

Sin importar version del kernel 2.6.32+ Sin importar distribución Físico, virtual, nube o no. Container & Arquitectura de Host deben emparejar

• Corre cualquier cosa: • Si corre en el host, corre en el container • Si corre en un kernel Linux, correrá

¿Qué es? • Alto Nivel – MV ligera • • • •

Espacio de proceso propio Configuración de red propia Puede correr como root Puede tener su propio /sbin/init

• Bajo Nivel – chroot con esteroides • • • •

Puede no tener su propio /sbin/init Contenedor = proceso aislado Comparte Kernel con el host No emula dispositivo

Contenedores vs Maquinas Virtuales App A

App A’

App B

Bins/ Libs

Bins/ Libs

Bins/ Libs

Guest OS

Guest OS Guest OS

VM

Los contenedores están aislados, pero comparten SO y opcionalmente binarios y librerías Da como resultado despliegues mas rápidos, con menos sobrecoste, más facilites de migrar y reiniciar.

Guest OS Guest OS

Host OS

Host OS

Server

Server

Docker

Bins/Libs

App B’

App B’

App B’

Bins/Libs

App B

App A’

Hypervisor (Type 2)

App A

Container

¿Porqué son contenedores Docker son ligeros? MVs

Bins/ Libs

Bins/ Libs

Bins/ Libs

Guest OS

Guest OS Guest OS

Bins/ Libs

App Original (Sin SO que tome espacio, recursos o requiera ser reiniciado)

MVs Cada pequeño cambio a una Aplicación Require un nueva máquina virtual.

App Δ

App A

App A

App A Bins/

App A’

App A

Guest OS

Contenedores

Copia de App No SO. Puede compatir bins/libs

App Modificada Copia con solo las diferencias entre el contenedor A y A’

Funcionamiento básico Docker Container Image Registry

Push

Container A

Search

Run

Build Dockerfile For A

Docker

Container C

Host 1 OS (Linux)

Container B

Docker Engine

Container A

Source Code Repository

Pull

Host 2 OS (Linux)

Cambios y actualizaciones Push

App Δ

App A

Bins/

Bins/ Libs

Docker Container Image Registry

Container Mod A’

Container Mod A’’

App Δ

Base Container Image

Bins/ Libs

Bins/ Libs

Docker Engine Host is now running A’’

Bins/

App A

Bins/

App A’’

Docker Engine

Update

La tecnología bajo Docker  Linux Kernel    

Servicios de aislamiento de recursos cgroups Kernel namespaces Union file-systems aufs Libvirt, LXC

 Git

 Control de versiones: delta a las imágenes de contenedores V1

 Registro (Docker Hub)

V2

V3



Glosario Docker:

 Veamos algo de jerga.

Glosario Docker: Dockerfile # A basic apache server.

FROM ubuntu:14.04 MAINTAINER Kimbro Staken version: 0.1 RUN apt-get update && apt-get install –y apache2 ENV APACHE_LOG_DIR /var/log/apache2 EXPOSE 80

CMD ["/usr/sbin/apache2", "-D", "FOREGROUND"]

Glosario Docker: Container  Contenedor  La aplicación paquetizada, aislada

Glosario Docker: Host (anfitrión)  Es el porta-contenedores  Múltiples sabores: local, private cloud, public cloud. Virtual o físico.  Expone los recursos

Glosario Docker: Imagen  Fichero binario que contiene todo el sistema de ficheros de un contenedor.  Sistema de ficheros Union.  Estructurado en capas (layers) por delta.

 https://imagelayers.io

Glosario Docker: Volumen  Discos o directorios externos que podemos montar en el contenedor.

 Recursos externos (alojados en el host) que sobreviven al contenedor  Configuración / Datos / Recursos

Datos

Conf.

Glosario Docker: Registro  Biblioteca de imágenes de contenedor  Listas para ser usadas

 Registro publico

 Compartidas por la comunidad  Libre acceso

 Registro privado

 Contenedores corporativos o privados

https://hub.docker.com

Ciclo de vida de un contenedor create

rm

Stopped

run / start

restart

stop/kill

Running

pause

unpause

Paused

Deleted

Ciclo de vida de una imagen *.tar.gz

STDIN/ STDOUT

Registry

load/save import/export pull/push build

image

commit

rmi

deleted

Command Line Interface

Dockerfile. Referencia de comandos  FROM  MAINTAINER  LABEL  ADD  COPY  ENV  EXPOSE

 USER  WORKDIR  VOLUME  STOPSIGNAL  ENTRYPOINT  CMD  RUN

Reference: https://docs.docker.com/engine/reference/builder

docker. CLI. Referencia de comandos  help  build  run  list  ps  kill  lm

 log  exec  cp  images  rmi  pull / push  pause / unpause

Reference: https://docs.docker.com/engine/reference/commandline/cli

docker. CLI. Referencia de comandos Networks

 docker network create  docker network rm

Reference: https://docs.docker.com/engine/reference/commandline/cli

Docker como fuente de software enjaulado Lenguajes

golang rails node php java erlang lisp microsoft/aspnet

DBs

mongo maria mysql postgres memcached redis

Docker como fuente de software enjaulado CI

Otros jenkins sjoerdmulder/teamcity meteogroup/concourse-ci

Project Management redmine jira

consul redis prometheus nginx haproxy

Docker como fuente de software enjaulado Navajas suizas

busybox

(1-5 Mb)

alpine

(5 Mb)

Manos a la obra git clone https://github.com/pjmolina/docker-training

 Un primer container con Docker

docker-compose.yml. Ref. de comandos version: '2' services: web: build: . depends_on: - db - redis redis: image: redis db: image: postgres

web redis

db

Reference: https://docs.docker.com/compose/compose-file

docker-compose. CLI. Ref. de comandos  help

 etc…

 build  up  scale  down  kill  log Reference: https://docs.docker.com/compose/reference

Manos a la obra  Docker-Compose

Casos de Usos  CI & CD  Maquinas de desarrollo  Pruebas  Simular Entornos complejos  Sistemas en Producción (¡¡¡casi!!!)

Raspberry PI 3  ¡¡Corre docker!!  ARM versión  RAM limitada  Útil para proyectos embebidos

 +info: http://blog.hypriot.com

Y mas allá…  Unikernels

 Kernel de SO compilado de modo estático con tu aplicación.  Modular, pequeño, solo lo que se necesita.  Corriendo sobre un hiper-visor.

Y mas allá…  Amazon EC2 Container Service

Y mas allá…

 Joyent TRITON

Y mas allá…

 Kubernetes

 Plataforma de orquestación de contenedores de Google  http://kubernetes.io

 Apache Mesos

 http://mesos.apache.org

Y mas allá…  HashiCorp Terraform  Infrastructure as Code

https://www.hashicorp.com/terraform.html

Referencias

 Docker

https://www.docker.com

 Ejemplos

https://github.com/pjmolina/docker-training

Contacto ¿Te gusto lo que viste o todo lo contrario? En cualquier caso, ¡retroaliméntame! Pedro J. Molina [email protected] @pmolinam

More Documents from "Julio César Brizuela"

Blender - Tutorial Casa
October 2019 12
December 2019 15
Curso Symfony Clase 2
June 2020 12
Curso Symfony Clase 4
June 2020 12
Blender - Tutorial Ginger
October 2019 20
Curso Symfony Clase 1
June 2020 6