Actualizado el 21 de Marzo del 2018 (Publicado el 17 de Marzo del 2018)
5.440 visualizaciones desde el 17 de Marzo del 2018
2,8 MB
52 paginas
Creado hace 8a (20/04/2016)
Contenedores con
Dr. Pedro J. Molina
Desarrollador Independiente
@pmolinam
Agenda
Introducción a Docker (teórica)
Introducción a Docker (práctica): manos a ello
1.
2.
3. Docker files
4. Docker CLI
5. Docker-Compose
6. Casos de uso
7. Y más allá…
¿A qué me dedico?
Desarrollador Independiente
Domain Specific Languages
Colaboro con: http://www.formacion.lemoncode.net
Generación de código
Anteriormente:
Microservicios
JavaScript, TypeScript, C#
Backends
Despliegues en nube
Arquitectura de Software
Consultoría
CTO
DSLs
App Builders
Project Manager
Arquitectura de Software
DSLs
DSLs
Generación de código
Evolución: Aplicaciones
Aplicación cliente-
servido 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
El problema que solventa Docker
Static website
nginx 1.5 + modsecurity + openssl + bootstrap 2
User DB
postgresql + pgv8 + v8
Queue
Analytics DB
Redis + redis-sentinel
hadoop + hive + thrift + OpenJDK
s
k
c
a
t
S
f
o
y
t
i
c
i
l
p
i
t
l
u
M
a
p
p
r
o
p
r
i
a
t
e
l
y
?
i
n
t
e
r
a
c
t
D
o
s
e
r
v
i
c
e
s
a
n
d
a
p
p
s
C
a
n
I
m
i
g
r
a
t
e
Background workers
Python 3.0 + celery + pyredis + libcurl + ffmpeg + libopencv + nodejs +
phantomjs
Web frontend
Ruby + Rails + sass + Unicorn
API endpoint
Python 2.7 + Flask + pyredis + celery + psycopg + postgresql-client
f
o
y
t
i
c
i
l
p
i
t
l
u
M
e
r
a
w
d
r
a
h
s
t
n
e
m
n
o
r
i
v
n
e
Development VM
Public Cloud
Production Cluster
QA server
Disaster recovery
q
u
i
c
k
l
y
?
Customer Data Center
Contributor’s laptop
Production Servers
s
m
o
o
t
h
l
y
a
n
d
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
Customer
laptop
Servers
Símil: Transporte en antes de los años 60
s
d
o
o
G
f
o
y
t
i
c
i
l
p
i
t
l
u
M
f
o
y
t
i
c
i
l
i
p
i
t
l
u
M
r
o
f
s
d
o
h
t
e
m
g
n
i
r
o
t
s
/
g
n
i
t
r
o
p
s
n
a
r
t
n
e
x
t
t
o
s
p
i
c
e
s
)
(
e
.
g
.
c
o
f
f
e
e
b
e
a
n
s
h
o
w
g
o
o
d
s
i
n
t
e
r
a
c
t
D
o
I
w
o
r
r
y
a
b
o
u
t
t
o
t
r
u
c
k
)
(
e
.
g
.
f
r
o
m
b
o
a
t
t
o
t
r
a
n
i
a
n
d
s
m
o
o
t
h
l
y
C
a
n
I
t
r
a
n
s
p
o
r
t
q
u
i
c
k
l
y
Problema N x M No escala
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
Solución: El Container
Multiplicity of Goods
A standard container that is
loaded with virtually any
goods, and stays sealed until
it reaches final delivery.
Multiplicity of
methods for
transporting/storing
n
e
x
t
t
o
s
p
i
c
e
s
)
(
e
.
g
.
c
o
f
f
e
e
b
e
a
n
s
h
o
w
g
o
o
d
s
i
n
t
e
r
a
c
t
D
o
I
w
o
r
r
y
a
b
o
u
t
…in between, can be loaded and
unloaded, stacked, transported
efficiently over long distances,
and transferred from one mode
of transport to another
i
t
r
a
n
t
o
t
r
u
c
k
)
(
e
.
g
.
f
r
o
m
b
o
a
t
t
o
q
u
i
c
k
l
y
a
n
d
s
m
o
o
t
h
l
y
C
a
n
I
t
r
a
n
s
p
o
r
t
Docker
Static website
User DB
Web frontend
Queue
Analytics DB
Multiplicity of Stacks
An engine that enables any
payload to be encapsulated
as a lightweight, portable,
self-sufficient container…
Multiplicity of
hardware
environments
Do services and apps
interact
appropriately?
…that can be manipulated using
standard operations and run
consistently on virtually any
hardware platform
Can I migrate
smoothly and
quickly
Development
QA server
Customer Data
Public Cloud
VM
Center
Production
Contributor’s
Cluster
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
Customer
laptop
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é?
¿Qué es?
• 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á
• 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
Bins/
Libs
Guest
OS
App
A’
Bins/
Libs
Guest
OS
Guest
OS
App
B
Bins/
Libs
Guest
OS
Guest
OS
VM
Hypervisor (Type 2)
Host OS
Server
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.
Container
A
p
p
A
A
p
p
A
’
A
p
p
B
A
p
p
B
’
A
p
p
B
’
A
p
p
B
’
D
o
c
k
e
r
Bins/Libs
Bins/Libs
Host OS
Server
¿Porqué son contenedores Docker son ligeros?
MVs
App
A
Bins/
Libs
App
A
Bins/
Libs
Guest
OS
Guest
OS
App
A’
Bins/
Libs
Guest
Guest
OS
OS
MVs
Cada pequeño cambio a una Aplicación
Require un nueva máquina virtual.
Contenedores
App
A
A
p
p
Δ
i
B
n
s
/
App
A
Bins/
Libs
App Original
(Sin SO que tome espacio,
recursos o requiera ser
reiniciado)
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
Push
C
o
n
t
a
n
e
r
A
i
Build
Docker Engine
Host 1 OS (Linux)
Dockerfile
For
A
Source
Code
Repository
Docker
Container
Image
Registry
Search
Pull
Run
C
o
n
t
a
n
e
r
A
i
C
o
n
t
a
n
e
r
B
i
C
o
n
t
a
n
e
r
C
i
D
o
c
k
e
r
Host 2 OS (Linux)
Cambios y actualizaciones
App
A
Bins/
Libs
Base
Container
Image
A
p
p
Δ
i
B
n
s
/
Container
Mod A’
Container
Mod A’’
App
A’’
i
Bins/
B
n
Libs
s
/
Docker Engine
Host is now running A’’
Docker
Container
Image
Registry
A
p
p
Δ
Update
Push
i
B
n
s
/
Docker Engine
App
A
Bins/
Libs
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
V3 …
contenedores
V1
V2
Registro (Docker Hub)
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 montaren 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
StoppedRunningPausedrun / startpauseunpausestop/killcreateDeletedrmrestartCiclo de vida de una imagen
imagebuilddeletedrmiimport/export*.tar.gzSTDIN/STDOUTload/saveRegistrypull/pushcommitCommand 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
Comentarios de: Contenedores con Docker (0)
No hay comentarios