SlideShare una empresa de Scribd logo
1 de 74
Descargar para leer sin conexión
DE DESARROLLO A PRODUCCIÓN USANDO
DOCKER
AGENDA
¿Quiénes somos?
Docker: introducción
Consideraciones para trabajar con docker
Volúmenes
Docker Compose
Docker en producción
¿QUIÉNES SOMOS?
LEANDRO DI TOMMASO
Fundador de Mikroways.
Docente en UNLP e Instructor
CCNA.
DevOp en CeSPI-UNLP.
Miembro del NOC de UNLP entre
2007 y 2012.
Miembro del NOC de INTA en 2012.
CHRISTIAN RODRIGUEZ
Docente en UNLP
Miembro del equipo de soporte
CeSPI-UNLP hasta 2006
Instructor
CCNA/RedHat/Solaris/IRIX
Coordinador del equipo de desarrollo
de software interno (UNLP)
perteneciente a CeSPI
Aplicando DevOps desde 2012
Coordino el área de IT para los
desarrollos propios
¿QUÉ HACEMOS EN NUESTRO TRABAJO?
Desde nes de 2013, nos consolidamos como equipo de IT
para el área de desarrollo.
Aplicando DevOps gestionamos:
58 VMs virtualizando con Proxmox y VMWare.
Ambientes automatizados con .
67 aplicaciones en ambiente de producción.
55 aplicaciones en ambiente de pruebas.
Monitoreo y backups contemplados en la
automatización.
Ambientes idénticos en desarrollo y producción:
basados en y .
chef
vagrant chef
¿QUÉ HACEMOS EN NUESTRO TRABAJO?
En 2016 formalizamos a como una sociedad.
Trabajamos con DevOps (Chef y Docker).
Monitoreo inteligente (Estadísticas y logs).
Consultoría.
Capacitaciones.
Cloud computing.
IoT.
Partners de Chef, Docker y Amazon.
Mikroways
DOCKER
INTRODUCCIÓN
ANTECEDENTES
Antiguamente, transportar bienes tenía muchos
problemas.
Diferentes tamaños, formas, resistencias, etc.
Capacidad de transporte reducida.
Difícil realizar un seguimiento.
Pérdida parcial de mercadería.
Grandes costos.
CONTENEDORES
Los contenedores solucionaron muchos problemas:
Un vendedor pone todos sus productos en un
contenedor y sólo debe preocuparse por ese
contenedor.
Los productos nunca se manipulan individualmente.
Tamaños y formas estandarizadas, simpli ca toda la
cadena de transporte: el transporte sólo debe llevar
contenedores.
CONTENEDORES
¿QUÉ ES DOCKER?
Contenedores de software.
Empaqueta aplicaciones en una unidad estándar de
intercambio.
Única pieza de software en un lesystem completo que
contiene todo lo necesario para ejecutar una aplicación:
código, librerías, herramientas, etc.
Garantiza que el software siempre correrá de igual forma
sin importar su ambiente.
¿POR QUÉ DOCKER?
Diferencias entre el ambiente de desarrollo, testing y
producción.
Instalación de una aplicación en diferentes plataformas.
Deploy de aplicaciones complejas.
Ejecución de código antiguo.
Simplicidad para escalar horizontalmente.
MATRIZ DEL INFIERNO
MATRIZ DEL INFIERNO
COMPARACIÓN CON MÁQUINAS VIRTUALES
HISTORIA
Emerge como proyecto de SL en 2013.
Virtualización a nivel de sistema operativo.
Se basa en el uso de:
para restringir recursos como cpu, memoria, IO,
red, etc.
permite aislar y virtualizar recursos
de una colección de procesos como por ejemplo: PID,
hostname, UID, acceso a la red, comunicación entre
procesos, lesystem, etc.
como es el caso de AUFS,
OverlayFS, Btrfs, Device Mapper, ZFS, etc.
Cgroups
Kernel namespaces
Filesystem de unión
HISTORIA
Con las características antes mencionadas se obtienen
contenedores independientes en una instancia Linux que
evita el overhead de manipular VMs.
Antes de la versión 0.9, Docker usaba LXC como base. A
partir de la 0.9 incorporaron libcontainer, eliminando la
dependencia de LXC dado que accede directamente al
kernel para manipular cgroups, namespaces, apparmor,
interfaces de red, etc.
IMÁGENES Y CONTENEDORES
Imagen:
Filesystem y parámetros para utilizarla.
No cambia nunca y no tiene estados.
Contenedor:
Instancia de una imagen (resultado de ejecutarla).
Tiene una capa de RW volátil.
IMÁGENES Y CONTENEDORES
IMÁGENES Y CONTENEDORES
IMÁGENES Y CONTENEDORES
IMÁGENES Y CONTENEDORES
INSTALACIÓN DE DOCKER
Docker puede instalarse en:
Linux.
MacOS.
Windows.
INSTALACIÓN DE DOCKER EN LINUX
Requisitos:
Sistema de 64 bits.
Kernel 3.10 o superior.
Existen binarios para la mayoría de las distribuciones.
INSTALACIÓN DE DOCKER EN WINDOWS/MACOS
Usando Docker Toolbox.
Utiliza Docker Machine (no nativo).
Windows 7/MacOS 10.8 o superior
Docker for (Windows/Mac):
Corre una aplicación nativa usando (Hyper-V/xhyve para
virtualizar la Docker Engine).
Windows 10/MacOS 10.10.3 o superior.
COMANDOS BÁSICOS
# Más usados 
docker run 
docker ps 
docker build 
docker images 
docker logs 
docker inspect 
docker volume 
# Otros comandos comunes  
docker commit 
docker pull 
docker push 
docker tag 
NUESTRO PRIMER CONTENEDOR
$ docker run ­it ubuntu: 16.04 /bin/bash 
  Unable to find image 'ubuntu:16.04' locally 
  16.04: Pulling from library/ubuntu  
  6bbedd9b76a4: Pull complete  
  fc19d60a83f1: Pull complete  
  de413bb911fd: Pull complete  
  2879a7ad3144: Pull complete 
  668604fde02e: Pull complete 
  Digest: sha256:2d44ae143feeb36f4c898d32ed2ab2dffeb3a573d2d8928646dfc9cb7deb1315
  Status: Downloaded newer image  for ubuntu:16.04 
  root@99a3403db59a:/# cat /etc/issue 
  Ubuntu 16.04.1 LTS n l 
DOCKERFILE
Archivo de texto plano para crear imágenes de Docker.
Permite escribir instrucciones a ejecutar.
Automatiza el proceso de la creación de imágenes.
Permite repetir y modi car fácilmente una imagen.
Generar de forma simple imágenes derivadas.
DOCKERFILE
FROM ubuntu:16.04 
MAINTAINER Leandro Di Tommaso  
# Instalar Nginx y configurar una página personalizada  
RUN apt­get update && apt­get install ­y nginx  
RUN mkdir /var/www/html/ejemplo  
RUN echo "<html><h1>Nginx en Docker</h1></html>"  > /var/www/html/ejemplo/index.h
EXPOSE 80
CMD    ["nginx", "­g", "daemon off;"] 
NUESTRA PRIMER IMAGEN
$ docker build ­t leoditommaso/nginx: 1.0.0 . 
  Sending build context to Docker daemon  2.048 kB 
  Step 1 : FROM ubuntu:16.04 
  16.04: Pulling from library/ubuntu  
  6bbedd9b76a4: Already exists  
  fc19d60a83f1: Already exists  
  de413bb911fd: Already exists  
  2879a7ad3144: Already exists  
  668604fde02e: Already exists 
  Digest: sha256:2d44ae143feeb36f4c898d32ed2ab2dffeb3a573d2d8928646dfc9cb7deb1315
  Status: Downloaded newer image  for ubuntu:16.04 
   ­­­> f753707788c5 
  Step 2 : MAINTAINER Leandro Di Tommaso  
   ­­­> Running in f93e6923c21e 
   ­­­> a1144bb80b28 
  Removing intermediate container f93e6923c21e  
  Step 3 : RUN apt­get update && apt­get install ­y nginx  
   ­­­> Running in 489697f5e5d5 
NUESTRA PRIMER IMAGEN
$ docker run ­d ­p 80:80 leoditommaso/nginx:1.0.0 
LA REGISTRY
Servicio para almacenar y distribuir imágenes de Docker.
Open source (Licencia Apache).
Instalación privada
Acceso local para mayor velocidad de descarga.
Imágenes en un ambiente controlado y gestionado por la
organización.
Servicio en la nube (Docker Hub).
Libre de mantenimiento.
DOCKER HUB
Gratis para imágenes públicas.
Soporta builds automáticos (desde Github/Bitbucket).
Cuentas para organizaciones.
Plan pago para imágenes privadas.
https://hub.docker.com
CONSIDERACIONES PARA
TRABAJAR CON DOCKER
INTRODUCCIÓN
Ya sabemos que:
Las imágenes Docker son inmutables.
Los contenedores crean una capa con las diferencias
correspondientes respecto de la imagen original.
Entonces los contenedores deberían minimizar los cambios
respecto de la imagen original.
Optimizando el uso de espacio y evitando impactos de
performance.
Promoviendo la reusabilidad.
INMUTABILIDAD EN LA INFRAESTRUCTURA
Desplegar una actualización de una aplicación, consiste en
crear nuevas intancias y destruir las anteriores, en vez de
actualizarlas sobre la instancia productiva.
Una vez que una aplicación está corriendo, ¡evitamos
tocarla! promoviendo así:
Repetibilidad.
Reducir costos de mantenimiento.
Simpli car rollbacks.
INMUTABILIDAD EN LA INFRAESTRUCTURA
Para lograr este tipo de inmutabilidad deben cumplirse los
siguientes requerimientos:
La aplicación debe ser stateless. Su estado debe
almacenarse en un servicio por fuera del alcance de la
infraestructura inmutable.
Existe un template y/o conjunto de instrucciones que
permiten desplegar una instancia de la aplicación desde
cero.
El segundo punto lo resuelve fácilmente docker
¿QUÉ ES DINÁMICO ENTONCES?
La creación de las imágenes debe conocer bien el dominio
para identi car las partes que son dinámicas:
Archivos que se generan por la aplicación.
Uploads desde la aplicación.
Logs.
Spool.
¿CÓMO VERIFICAR SI MIS CONTENEDORES
CRECEN?
Un mal diseño de las imágenes impactará en la performance
de los contenedores que generarán grandes capas con datos
dinámicos.
Ante la actualización del contenedor, estos datos se perderán.
EL SIGUIENTE COMANDO PERMITE VERIFICAR
ESTO
$ docker ps ­s 
CONTAINER ID        IMAGE     .....               SIZE  
0d5c12033ee3        nginx     .....     2 B (virtual 182.8 MB) 
El tamaño es lo que crece el contenedor respecto de la imagen. El tamaño virtual es lo que ocupa el
contenedor sumado al tamaño de la imagen.
BUENAS PRÁCTICAS
Los contenedores deben ser efímeros: pararlos,
destruirlos y volverlos a iniciar con una mínima
con guración.
Evitar paquetes innecesarios: las imágenes no deben
incluir paquetes que no se utilicen.
Un proceso por contenedor: en la mayoría de los casos, se
debe correr un proceso por contenedor. Desacoplar
aplicaciones en múltiples contenedores hace mucho más
simple el escalamiento horizontal y reuso de contenedores.
La (in)necesidad de ssh: acceder a un contenedor es algo
que debemos evitar. En términos de infraestructura
inmutable, el servicio no debería considerar SSH.
VOLÚMENES
¿CÓMO GUARDO LA INFORMACIÓN?
Los contenedores son volátiles e inmutables.
Debemos preservar la información importante.
¿Dónde?
En volúmenes de datos.
CARACTERÍSTICAS DE LOS VOLÚMENES
No utilizan un sistema de archivos de unión (UFS).
Pueden compartirse y reusarse entre contenedores.
Los cambios se hacen directamente en el volumen.
La información del volumen no se incluye en la imagen.
Persisten aún cuando se eliminen todos los contenedores
que los usan.
Pueden quedar volúmenes sin referenciar.
TIPOS DE VOLÚMENES
Volúmenes anónimos.
Volúmenes nombrados.
Volúmenes desde el SO host.
TIPOS DE VOLÚMENES
Al crear un volúmen anónimo o nombrado, la información
que exista en el punto de montaje se copia al volumen.
Con volúmenes desde el SO host o desde otro contenedor,
se oculta la información que exista en el punto de montaje.
Correspondencia con el comando mount.
ANALIZANDO LOS VOLÚMENES
Al iniciar un contenedor, la opción -v permite indicar qué
volumen utilizar. El siguiente ejemplo de ne tres volúmenes:
uno anónimo, uno nombrado y uno desde el SO host:
$ docker run ­it  
      ­v /usr/local                   # anonimo 
      ­v test­volume:/test­volume     # nombrado 
      ­v /tmp:/tmp                    # SO host 
      ubuntu bash 
Inspeccionando los volúmenes vemos:
$ docker volume ls 
  DRIVER    VOLUME NAME 
  local     e9c7022b8c7bec55891ca44b8c40de1e5f41cf0fe9505a334bca06a484a5ff1f
  local     test­volume 
DOCKER COMPOSE
¿QUÉ ES DOCKER COMPOSE?
Herramienta que permite levantar aplicaciones
compuestas por múltiples contenedores.
La arquitectura se de ne y con gura en un archivo de texto
( ).
Simple e intuitivo.
Se vale de un comando para:
Iniciar, detener y reconstruir servicios.
Ver el estado de los servicios, los logs, etc.
YAML
VERSIONES DE DOCKER COMPOSE
Hay dos versiones diferentes, la 1 y la 2.
No son compatibles entre sí.
Pequeños cambios en el archivo de texto.
Veremos la sintaxis de la versión 2.
DOCKER COMPOSE: EJEMPLO
Instalación de Wordpress.
Vamos a crear un archivo llamado docker-compose.yml.
De niremos allí la arquitectura de la aplicación.
Nos valdremos del comando docker-compose para
levantar Wordpress e interactuar con los contenedores
generados.
LEVANTANDO UN WORDPRESS
version: '2' 
services: 
  db:
    image: mysql:5.7 
    volumes: 
      ­ "dbdata:/var/lib/mysql" 
    restart: always 
    environment: 
      MYSQL_ROOT_PASSWORD: wordpress  
      MYSQL_DATABASE: wordpress  
      MYSQL_USER: wordpress  
      MYSQL_PASSWORD: wordpress  
  wordpress: 
    depends_on: 
      ­ db 
    image: wordpress:latest  
LEVANTANDO UN WORDPRESS
$ docker­compose up ­d 
  Creating network "wordpress_default" with the default driver  
  Creating volume "wordpress_dbdata" with default driver 
  Creating wordpress_db_1  
  Creating wordpress_wordpress_1  
$ docker­compose ps 
        Name                       Command               State         Ports
­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
wordpress_db_1          docker­entrypoint.sh mysqld      Up      3306/tcp
wordpress_wordpress_1   /entrypoint.sh apache2­for ...   Up      0.0.0.0:
LEVANTANDO UN WORDPRESS
$ docker­compose logs ­f 
  wordpress_1  | 127.0.0.1 ­ ­ [16/Nov/2016:17:56:39 +0000] "GET / HTTP/1.1"
  wordpress_1  | 127.0.0.1 ­ ­ [16/Nov/2016:17:56:39 +0000] "GET /wp­admin/insta
  wordpress_1  | 127.0.0.1 ­ ­ [16/Nov/2016:17:56:41 +0000] "GET /favicon.ico HT
DOCKER EN PRODUCCIÓN
LOS DISTINTOS ESQUEMAS
Usando Docker para iniciar servicios de forma aislada.
Usando un cluster de docker.
DOCKER STANDALONE
Cada servidor Linux corre el servicio de Docker en forma
aislada.
Los contenedores pueden iniciarse automáticamente
durante el booteo usando:
Manejadores de procesos como , o
.
A través de políticas de reinicio (Docker >= 1.2).
upstart systemd
supervisor
A TRAVÉS DE MANEJADORES DE PROCESOS
Dado que Docker no setea políticas de reinicio por defecto,
cuando un servicio iniciado con Docker termina, no se toma
ninguna acción.
Las políticas de reinicio podrían con ictuar con los manejadores de procesos.
INTEGRACIÓN CON LOS MANEJADORES DE PROCESOS
Cuando un contenedor ya corre como esperamos, entonces
podemos attacharlo a un manejador de procesos para que
él lo maneje.
Corriendo docker start -a Docker attachará al
contenedor corriendo (o iniciará si no está corriendo)
reenviando las señales al manejador de procesos.
EJEMPLOS
Para entender los siguientes ejemplos veremos qué hace:
docker start -a
# Iniciamos un contenedor nginx daemonizado y nombrado:  
docker run ­d  ­­name=nginx_docker ­p  9090:80 nginx 
# El contenedor ya atiende en el puerto 9090:  
curl http://localhost:9090 
# Usando docker start para attachar al contenedor nombrado  
docker start ­a nginx_docker 
Ctrl+C # envía la señal SIGTERM al proceso. Muere el contenedor  
       # el comando curl ya no es exitoso  
# Usando nuevamente docker start  
docker start ­a nginx_docker # reinicia el servicio 
EJEMPLO UPSTART
Un contenedor que inicia Redis.
description "Redis container" 
author "Me"
start on filesystem and started docker  
stop on runlevel [!2345] 
respawn
script
  /usr/bin/docker start  ­a redis_server 
end script 
EJEMPLO SYSTEMD
[Unit]
Description=Redis container  
Requires=docker.service 
After=docker.service 
[Service] 
Restart=always 
ExecStart=/usr/bin/docker start  ­a redis_server 
ExecStop=/usr/bin/docker stop ­t  2 redis_server 
[Install] 
WantedBy=default.target 
docker stop -t TIME envía la señal SIGTERM y luego del tiempo especi cado envía SIGKILL
POLÍTICAS DE REINICIO
Si no queremos utilizar manejadores de procesos, entonces
podemos emplear las políticas de reinicio.
Estas políticas permiten especi car cómo un contenedor
debería o no ser reiniciado cuando termina.
POLÍTICAS DE REINICIO
no: no iniciar el contenedor cuando termina. Valor por
defecto.
on-failure:[max]: reiniciar solo si el contenedor termina
con exit status diferente a cero. Limitar opcionalmente los
reintentos de reinicio.
always: siempre reiniciar el contenedor. Además el
contenedor se iniciará cuando inicia el daemon Docker.
unless-stopped: idem anterior, salvo que en un reinicio del
servicio Docker considera si previamente fue detenido.
EJEMPLO DE POLÍTICA DE REINICIO
# Iniciamos ninx con restart policy always  
docker run ­d ­­restart=always ­­name=nginx_docker ­p  9090:80 nginx 
# Verificamos la cantidad de reinicios:  
docker inspect  ­f "{{ .RestartCount }}" nginx_docker 
# Matamos abruptamente el contenedor  
docker exec nginx_docker kill ­QUIT  1  
# Verificamos la cantidad de reinicios:  
docker inspect  ­f "{{ .RestartCount }}" nginx_docker 
nginx recibe la señal QUIT para nalizar el proceso
https://www.nginx.com/resources/wiki/start/topics/tutorials/commandline/
CLUSTERS DOCKER
La idea detrás de los clusters Docker es la de disponer de
nodos Linux con el Docker Engine de tal forma de poder
utilizarlos para correr contenedores.
Estos Linux deben ser muy pequeños dado que su única
razón de ser es la de proveer un kernel, no utilidades.
Serían como equipos físicos pertenecientes a un pool de
hardware disponible en un virtualizador como XEN o
VMWare.
LOS CLUSTERS MÁS CONOCIDOS
Swarm
Rancher
Kubernetes
Apache Mesos
CARACTERÍSTICAS DE TODOS LOS CLUSTERS
Diseño descentralizado.
Servicios, pods o stacks en vez de contenedores.
Posibilidad de escalar.
Conciliación para alcanzar el estado deseado.
Service discovery.
Load balancing.
Actualizaciones en caliente.
CONSIDERACIONES
El scheduler es el encargado de determinar donde se inicia
cada contenedor.
Asociado al scheduler trabajan los health checks que
garantizan la conciliación de un estado deseado: que hayan
N contenedores para el servicio X.
La distribución mágica del scheduler complica el manejo de
volúmenes.
Los volúmenes pertenecen a un nodo.
Si el nodo cambia, se pierden los datos.
VOLÚMENES DISTRIBUIDOS
Necesidad de compartir datos entre los nodos del cluster.
Aparecen diferentes implementaciones de volúmenes
compartidos. Las más populares son:
Convoy
Flocker
EJEMPLO RANCHER
¿PREGUNTAS?
Y SI LAS PREGUNTAS SURGEN MÁS TARDE...
Leandro Di Tommaso
Christian Rodriguez
leandro.ditommaso@mikroways.net
https://github.com/leoditommaso
christian.rodriguez@mikroways.net
https://github.com/chrodriguez
¡GRACIAS!

Más contenido relacionado

La actualidad más candente

Docker introduction &amp; benefits
Docker introduction &amp; benefitsDocker introduction &amp; benefits
Docker introduction &amp; benefitsAmit Manwade
 
Docker 101 - Nov 2016
Docker 101 - Nov 2016Docker 101 - Nov 2016
Docker 101 - Nov 2016Docker, Inc.
 
Microservices - it's déjà vu all over again
Microservices  - it's déjà vu all over againMicroservices  - it's déjà vu all over again
Microservices - it's déjà vu all over againArnon Rotem-Gal-Oz
 
Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요]
Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요]Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요]
Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요]David Lee
 
エンプラに Kubernetes を 導入してみて分かった 4つの Lessons Learned
エンプラに Kubernetes を 導入してみて分かった 4つの Lessons Learnedエンプラに Kubernetes を 導入してみて分かった 4つの Lessons Learned
エンプラに Kubernetes を 導入してみて分かった 4つの Lessons LearnedDaiki Kawanuma
 
Docker and the Linux Kernel
Docker and the Linux KernelDocker and the Linux Kernel
Docker and the Linux KernelDocker, Inc.
 
Introduction to Ansible
Introduction to AnsibleIntroduction to Ansible
Introduction to AnsibleKnoldus Inc.
 
Intro to Docker November 2013
Intro to Docker November 2013Intro to Docker November 2013
Intro to Docker November 2013Docker, Inc.
 
DevOps with Ansible
DevOps with AnsibleDevOps with Ansible
DevOps with AnsibleSwapnil Jain
 
DBI-Assisted Android Application Reverse Engineering
DBI-Assisted Android Application Reverse EngineeringDBI-Assisted Android Application Reverse Engineering
DBI-Assisted Android Application Reverse EngineeringSahil Dhar
 
"Yahoo! JAPAN の Kubernetes-as-a-Service" で加速するアプリケーション開発
"Yahoo! JAPAN の Kubernetes-as-a-Service" で加速するアプリケーション開発"Yahoo! JAPAN の Kubernetes-as-a-Service" で加速するアプリケーション開発
"Yahoo! JAPAN の Kubernetes-as-a-Service" で加速するアプリケーション開発Yahoo!デベロッパーネットワーク
 
Rancher kubernetes storages
Rancher kubernetes storagesRancher kubernetes storages
Rancher kubernetes storagesTetsurou Yano
 
Docker vs VM | | Containerization or Virtualization - The Differences | DevOp...
Docker vs VM | | Containerization or Virtualization - The Differences | DevOp...Docker vs VM | | Containerization or Virtualization - The Differences | DevOp...
Docker vs VM | | Containerization or Virtualization - The Differences | DevOp...Edureka!
 
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~Masahito Zembutsu
 

La actualidad más candente (20)

Introduction to docker
Introduction to dockerIntroduction to docker
Introduction to docker
 
Docker introduction &amp; benefits
Docker introduction &amp; benefitsDocker introduction &amp; benefits
Docker introduction &amp; benefits
 
Docker 101 - Nov 2016
Docker 101 - Nov 2016Docker 101 - Nov 2016
Docker 101 - Nov 2016
 
Introduction to Maven
Introduction to MavenIntroduction to Maven
Introduction to Maven
 
Microservices - it's déjà vu all over again
Microservices  - it's déjà vu all over againMicroservices  - it's déjà vu all over again
Microservices - it's déjà vu all over again
 
Ansible
AnsibleAnsible
Ansible
 
Manual de fragmentación vertical
Manual de fragmentación vertical Manual de fragmentación vertical
Manual de fragmentación vertical
 
Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요]
Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요]Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요]
Docker 기본 및 Docker Swarm을 활용한 분산 서버 관리 A부터 Z까지 [전체모드에서 봐주세요]
 
エンプラに Kubernetes を 導入してみて分かった 4つの Lessons Learned
エンプラに Kubernetes を 導入してみて分かった 4つの Lessons Learnedエンプラに Kubernetes を 導入してみて分かった 4つの Lessons Learned
エンプラに Kubernetes を 導入してみて分かった 4つの Lessons Learned
 
Docker and the Linux Kernel
Docker and the Linux KernelDocker and the Linux Kernel
Docker and the Linux Kernel
 
Introduction to Ansible
Introduction to AnsibleIntroduction to Ansible
Introduction to Ansible
 
Intro to Docker November 2013
Intro to Docker November 2013Intro to Docker November 2013
Intro to Docker November 2013
 
DevOps with Ansible
DevOps with AnsibleDevOps with Ansible
DevOps with Ansible
 
DBI-Assisted Android Application Reverse Engineering
DBI-Assisted Android Application Reverse EngineeringDBI-Assisted Android Application Reverse Engineering
DBI-Assisted Android Application Reverse Engineering
 
"Yahoo! JAPAN の Kubernetes-as-a-Service" で加速するアプリケーション開発
"Yahoo! JAPAN の Kubernetes-as-a-Service" で加速するアプリケーション開発"Yahoo! JAPAN の Kubernetes-as-a-Service" で加速するアプリケーション開発
"Yahoo! JAPAN の Kubernetes-as-a-Service" で加速するアプリケーション開発
 
Docker Basics
Docker BasicsDocker Basics
Docker Basics
 
Rancher kubernetes storages
Rancher kubernetes storagesRancher kubernetes storages
Rancher kubernetes storages
 
Docker vs VM | | Containerization or Virtualization - The Differences | DevOp...
Docker vs VM | | Containerization or Virtualization - The Differences | DevOp...Docker vs VM | | Containerization or Virtualization - The Differences | DevOp...
Docker vs VM | | Containerization or Virtualization - The Differences | DevOp...
 
Docker
DockerDocker
Docker
 
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
 

Destacado

Dev ops infraestructura agil con open source
Dev ops   infraestructura agil con open sourceDev ops   infraestructura agil con open source
Dev ops infraestructura agil con open sourcescrumecuador
 
DevOps, por donde comenzar? - DrupalCon Latin America 2015
DevOps, por donde comenzar?  - DrupalCon Latin America 2015DevOps, por donde comenzar?  - DrupalCon Latin America 2015
DevOps, por donde comenzar? - DrupalCon Latin America 2015Taller Negócio Digitais
 
Un recorrido por las herramientas de software libre que uso cada día, en los ...
Un recorrido por las herramientas de software libre que uso cada día, en los ...Un recorrido por las herramientas de software libre que uso cada día, en los ...
Un recorrido por las herramientas de software libre que uso cada día, en los ...Christian Rodriguez
 
Liquid Day - Hablemos de DevOps
Liquid Day - Hablemos de DevOpsLiquid Day - Hablemos de DevOps
Liquid Day - Hablemos de DevOpsSoftware Guru
 
Ecosistema de desarrollo en PHP con Docker y Ansible
Ecosistema de desarrollo en PHP con Docker y AnsibleEcosistema de desarrollo en PHP con Docker y Ansible
Ecosistema de desarrollo en PHP con Docker y AnsibleVicent Soria Durá
 
Er training smi 2010
Er training smi 2010Er training smi 2010
Er training smi 2010imitam
 
Ansible administracion simplificada
Ansible   administracion simplificada Ansible   administracion simplificada
Ansible administracion simplificada bcoca
 
Ansible para Gestión de la configuración y Automatización
Ansible para Gestión de la configuración y AutomatizaciónAnsible para Gestión de la configuración y Automatización
Ansible para Gestión de la configuración y Automatizaciónsergiovier
 
Introduccion a Ansible
Introduccion a AnsibleIntroduccion a Ansible
Introduccion a AnsibleOsvaldo
 
Gestionando tu infraestructura con Ansible
Gestionando tu infraestructura con Ansible Gestionando tu infraestructura con Ansible
Gestionando tu infraestructura con Ansible Moisés Maciá
 
Arista reinventing data center switching
Arista   reinventing data center switchingArista   reinventing data center switching
Arista reinventing data center switchingVLCM2015
 
Ansible Meetup NYC 060215
Ansible Meetup NYC 060215Ansible Meetup NYC 060215
Ansible Meetup NYC 060215jedelman99
 
Arista: DevOps for Network Engineers
Arista: DevOps for Network EngineersArista: DevOps for Network Engineers
Arista: DevOps for Network EngineersPhilip DiLeo
 
Arista Networks - Building the Next Generation Workplace and Data Center Usin...
Arista Networks - Building the Next Generation Workplace and Data Center Usin...Arista Networks - Building the Next Generation Workplace and Data Center Usin...
Arista Networks - Building the Next Generation Workplace and Data Center Usin...Aruba, a Hewlett Packard Enterprise company
 
Remote Control your PC using Python and Kivy
Remote Control your PC using Python and KivyRemote Control your PC using Python and Kivy
Remote Control your PC using Python and KivyVengat Vasanth
 

Destacado (20)

Dev ops infraestructura agil con open source
Dev ops   infraestructura agil con open sourceDev ops   infraestructura agil con open source
Dev ops infraestructura agil con open source
 
DevOps, por donde comenzar? - DrupalCon Latin America 2015
DevOps, por donde comenzar?  - DrupalCon Latin America 2015DevOps, por donde comenzar?  - DrupalCon Latin America 2015
DevOps, por donde comenzar? - DrupalCon Latin America 2015
 
Introduccion A Docker
Introduccion A DockerIntroduccion A Docker
Introduccion A Docker
 
Un recorrido por las herramientas de software libre que uso cada día, en los ...
Un recorrido por las herramientas de software libre que uso cada día, en los ...Un recorrido por las herramientas de software libre que uso cada día, en los ...
Un recorrido por las herramientas de software libre que uso cada día, en los ...
 
Liquid Day - Hablemos de DevOps
Liquid Day - Hablemos de DevOpsLiquid Day - Hablemos de DevOps
Liquid Day - Hablemos de DevOps
 
Introduction to DevOps
Introduction to DevOpsIntroduction to DevOps
Introduction to DevOps
 
Ecosistema de desarrollo en PHP con Docker y Ansible
Ecosistema de desarrollo en PHP con Docker y AnsibleEcosistema de desarrollo en PHP con Docker y Ansible
Ecosistema de desarrollo en PHP con Docker y Ansible
 
Er training smi 2010
Er training smi 2010Er training smi 2010
Er training smi 2010
 
Ansible administracion simplificada
Ansible   administracion simplificada Ansible   administracion simplificada
Ansible administracion simplificada
 
Ansible para Gestión de la configuración y Automatización
Ansible para Gestión de la configuración y AutomatizaciónAnsible para Gestión de la configuración y Automatización
Ansible para Gestión de la configuración y Automatización
 
Introduccion a Ansible
Introduccion a AnsibleIntroduccion a Ansible
Introduccion a Ansible
 
Gestionando tu infraestructura con Ansible
Gestionando tu infraestructura con Ansible Gestionando tu infraestructura con Ansible
Gestionando tu infraestructura con Ansible
 
Arista reinventing data center switching
Arista   reinventing data center switchingArista   reinventing data center switching
Arista reinventing data center switching
 
Ansible Meetup NYC 060215
Ansible Meetup NYC 060215Ansible Meetup NYC 060215
Ansible Meetup NYC 060215
 
Arista: DevOps for Network Engineers
Arista: DevOps for Network EngineersArista: DevOps for Network Engineers
Arista: DevOps for Network Engineers
 
Arista Networks - Building the Next Generation Workplace and Data Center Usin...
Arista Networks - Building the Next Generation Workplace and Data Center Usin...Arista Networks - Building the Next Generation Workplace and Data Center Usin...
Arista Networks - Building the Next Generation Workplace and Data Center Usin...
 
DevOps
DevOpsDevOps
DevOps
 
Introducing DevOps
Introducing DevOpsIntroducing DevOps
Introducing DevOps
 
Managing Desktops with Ansible
Managing Desktops with AnsibleManaging Desktops with Ansible
Managing Desktops with Ansible
 
Remote Control your PC using Python and Kivy
Remote Control your PC using Python and KivyRemote Control your PC using Python and Kivy
Remote Control your PC using Python and Kivy
 

Similar a De desarrollo a producción usando docker

Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]
Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]
Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]Keopx
 
Docker y kubernetes para desarrolladores .NET - Meetup Barcelona 2019
Docker y kubernetes para desarrolladores .NET - Meetup Barcelona 2019 Docker y kubernetes para desarrolladores .NET - Meetup Barcelona 2019
Docker y kubernetes para desarrolladores .NET - Meetup Barcelona 2019 Santi Macias Rodriguez
 
Docker: de localhost a producción
Docker: de localhost a producciónDocker: de localhost a producción
Docker: de localhost a producciónClaudio Guerra
 
Corriendo SQL Server en Docker
Corriendo SQL Server en DockerCorriendo SQL Server en Docker
Corriendo SQL Server en DockerJavier Villegas
 
Docker: la revolución en virtualización
Docker: la revolución en virtualizaciónDocker: la revolución en virtualización
Docker: la revolución en virtualizaciónMarcelo Ochoa
 
BEEVA | Introducción a Docker
BEEVA | Introducción a DockerBEEVA | Introducción a Docker
BEEVA | Introducción a DockerBEEVA_es
 
Docker 10 02_18
Docker 10 02_18Docker 10 02_18
Docker 10 02_18enyert
 
Dockerparadesarrollo
DockerparadesarrolloDockerparadesarrollo
DockerparadesarrolloEric Zeidan
 
Docker orientado al desarrollo de aplicaciones con NodeJS
Docker orientado al desarrollo de aplicaciones con NodeJSDocker orientado al desarrollo de aplicaciones con NodeJS
Docker orientado al desarrollo de aplicaciones con NodeJSJan Sanchez
 
Docker - Sysmana 2014
Docker - Sysmana 2014Docker - Sysmana 2014
Docker - Sysmana 2014quaip
 
Workshop 1 - Introducción a los Microservicios y Contenedores (@TechHub - Goo...
Workshop 1 - Introducción a los Microservicios y Contenedores (@TechHub - Goo...Workshop 1 - Introducción a los Microservicios y Contenedores (@TechHub - Goo...
Workshop 1 - Introducción a los Microservicios y Contenedores (@TechHub - Goo...Carlos Crisóstomo Vals
 
administracion de sistemas de informacion
administracion de sistemas de informacionadministracion de sistemas de informacion
administracion de sistemas de informacionStivenLopez46
 
Pruebas de integración con Docker en Azure DevOps
Pruebas de integración con Docker en Azure DevOpsPruebas de integración con Docker en Azure DevOps
Pruebas de integración con Docker en Azure DevOpsSoftware Guru
 
Herramientas y plugins para el desarrollo de aplicaciones cloud native para K...
Herramientas y plugins para el desarrollo de aplicaciones cloud native para K...Herramientas y plugins para el desarrollo de aplicaciones cloud native para K...
Herramientas y plugins para el desarrollo de aplicaciones cloud native para K...Micael Gallego
 
Instalacion y uso basico de Docker.
Instalacion y uso basico de Docker.Instalacion y uso basico de Docker.
Instalacion y uso basico de Docker.Moisés Elías Araya
 

Similar a De desarrollo a producción usando docker (20)

Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]
Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]
Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]
 
Docker and networking
Docker and networkingDocker and networking
Docker and networking
 
Docker y kubernetes para desarrolladores .NET - Meetup Barcelona 2019
Docker y kubernetes para desarrolladores .NET - Meetup Barcelona 2019 Docker y kubernetes para desarrolladores .NET - Meetup Barcelona 2019
Docker y kubernetes para desarrolladores .NET - Meetup Barcelona 2019
 
Curso gratuito de Docker
Curso gratuito de DockerCurso gratuito de Docker
Curso gratuito de Docker
 
Lab3 cristian gastelbondo
Lab3 cristian gastelbondoLab3 cristian gastelbondo
Lab3 cristian gastelbondo
 
Docker: de localhost a producción
Docker: de localhost a producciónDocker: de localhost a producción
Docker: de localhost a producción
 
Corriendo SQL Server en Docker
Corriendo SQL Server en DockerCorriendo SQL Server en Docker
Corriendo SQL Server en Docker
 
Docker: la revolución en virtualización
Docker: la revolución en virtualizaciónDocker: la revolución en virtualización
Docker: la revolución en virtualización
 
BEEVA | Introducción a Docker
BEEVA | Introducción a DockerBEEVA | Introducción a Docker
BEEVA | Introducción a Docker
 
Docker 10 02_18
Docker 10 02_18Docker 10 02_18
Docker 10 02_18
 
Dockerparadesarrollo
DockerparadesarrolloDockerparadesarrollo
Dockerparadesarrollo
 
Docker orientado al desarrollo de aplicaciones con NodeJS
Docker orientado al desarrollo de aplicaciones con NodeJSDocker orientado al desarrollo de aplicaciones con NodeJS
Docker orientado al desarrollo de aplicaciones con NodeJS
 
Docker - Sysmana 2014
Docker - Sysmana 2014Docker - Sysmana 2014
Docker - Sysmana 2014
 
Workshop 1 - Introducción a los Microservicios y Contenedores (@TechHub - Goo...
Workshop 1 - Introducción a los Microservicios y Contenedores (@TechHub - Goo...Workshop 1 - Introducción a los Microservicios y Contenedores (@TechHub - Goo...
Workshop 1 - Introducción a los Microservicios y Contenedores (@TechHub - Goo...
 
administracion de sistemas de informacion
administracion de sistemas de informacionadministracion de sistemas de informacion
administracion de sistemas de informacion
 
Jug málaga docker 101 - final
Jug málaga   docker 101 - finalJug málaga   docker 101 - final
Jug málaga docker 101 - final
 
Pruebas de integración con Docker en Azure DevOps
Pruebas de integración con Docker en Azure DevOpsPruebas de integración con Docker en Azure DevOps
Pruebas de integración con Docker en Azure DevOps
 
Herramientas y plugins para el desarrollo de aplicaciones cloud native para K...
Herramientas y plugins para el desarrollo de aplicaciones cloud native para K...Herramientas y plugins para el desarrollo de aplicaciones cloud native para K...
Herramientas y plugins para el desarrollo de aplicaciones cloud native para K...
 
Instalacion y uso basico de Docker.
Instalacion y uso basico de Docker.Instalacion y uso basico de Docker.
Instalacion y uso basico de Docker.
 
Devops episodio 1. devOpsTnf
Devops episodio 1. devOpsTnf Devops episodio 1. devOpsTnf
Devops episodio 1. devOpsTnf
 

Más de Christian Rodriguez

Aplicaciones pensadas para la nube
Aplicaciones pensadas para la nubeAplicaciones pensadas para la nube
Aplicaciones pensadas para la nubeChristian Rodriguez
 
Centralizando la autenticación y autorización en la UNLP. Nuestra experiencia...
Centralizando la autenticación y autorización en la UNLP. Nuestra experiencia...Centralizando la autenticación y autorización en la UNLP. Nuestra experiencia...
Centralizando la autenticación y autorización en la UNLP. Nuestra experiencia...Christian Rodriguez
 
CISL: ChoiqueCMS, KimKelem, Meran, Software liberado por la UNLP
CISL: ChoiqueCMS, KimKelem, Meran, Software liberado por la UNLPCISL: ChoiqueCMS, KimKelem, Meran, Software liberado por la UNLP
CISL: ChoiqueCMS, KimKelem, Meran, Software liberado por la UNLPChristian Rodriguez
 
Contribuciones de software de código abierto realizados por CeSPI, UNLP - TIC...
Contribuciones de software de código abierto realizados por CeSPI, UNLP - TIC...Contribuciones de software de código abierto realizados por CeSPI, UNLP - TIC...
Contribuciones de software de código abierto realizados por CeSPI, UNLP - TIC...Christian Rodriguez
 

Más de Christian Rodriguez (7)

Aplicaciones pensadas para la nube
Aplicaciones pensadas para la nubeAplicaciones pensadas para la nube
Aplicaciones pensadas para la nube
 
DevOps: una breve introducción
DevOps: una breve introducciónDevOps: una breve introducción
DevOps: una breve introducción
 
Soluciones a escenarios Reales
Soluciones a escenarios RealesSoluciones a escenarios Reales
Soluciones a escenarios Reales
 
Centralizando la autenticación y autorización en la UNLP. Nuestra experiencia...
Centralizando la autenticación y autorización en la UNLP. Nuestra experiencia...Centralizando la autenticación y autorización en la UNLP. Nuestra experiencia...
Centralizando la autenticación y autorización en la UNLP. Nuestra experiencia...
 
DevOps+[Chef/Docker]
 DevOps+[Chef/Docker] DevOps+[Chef/Docker]
DevOps+[Chef/Docker]
 
CISL: ChoiqueCMS, KimKelem, Meran, Software liberado por la UNLP
CISL: ChoiqueCMS, KimKelem, Meran, Software liberado por la UNLPCISL: ChoiqueCMS, KimKelem, Meran, Software liberado por la UNLP
CISL: ChoiqueCMS, KimKelem, Meran, Software liberado por la UNLP
 
Contribuciones de software de código abierto realizados por CeSPI, UNLP - TIC...
Contribuciones de software de código abierto realizados por CeSPI, UNLP - TIC...Contribuciones de software de código abierto realizados por CeSPI, UNLP - TIC...
Contribuciones de software de código abierto realizados por CeSPI, UNLP - TIC...
 

Último

Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxpabonheidy28
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024GiovanniJavierHidalg
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxJOSEMANUELHERNANDEZH11
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...AlanCedillo9
 
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersSalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersIván López Martín
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafiosFundación YOD YOD
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesFundación YOD YOD
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...FacuMeza2
 

Último (19)

Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docx
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptx
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
 
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersSalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafios
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento Protégeles
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
 

De desarrollo a producción usando docker

  • 1. DE DESARROLLO A PRODUCCIÓN USANDO DOCKER
  • 2. AGENDA ¿Quiénes somos? Docker: introducción Consideraciones para trabajar con docker Volúmenes Docker Compose Docker en producción
  • 4. LEANDRO DI TOMMASO Fundador de Mikroways. Docente en UNLP e Instructor CCNA. DevOp en CeSPI-UNLP. Miembro del NOC de UNLP entre 2007 y 2012. Miembro del NOC de INTA en 2012.
  • 5. CHRISTIAN RODRIGUEZ Docente en UNLP Miembro del equipo de soporte CeSPI-UNLP hasta 2006 Instructor CCNA/RedHat/Solaris/IRIX Coordinador del equipo de desarrollo de software interno (UNLP) perteneciente a CeSPI Aplicando DevOps desde 2012 Coordino el área de IT para los desarrollos propios
  • 6. ¿QUÉ HACEMOS EN NUESTRO TRABAJO? Desde nes de 2013, nos consolidamos como equipo de IT para el área de desarrollo. Aplicando DevOps gestionamos: 58 VMs virtualizando con Proxmox y VMWare. Ambientes automatizados con . 67 aplicaciones en ambiente de producción. 55 aplicaciones en ambiente de pruebas. Monitoreo y backups contemplados en la automatización. Ambientes idénticos en desarrollo y producción: basados en y . chef vagrant chef
  • 7. ¿QUÉ HACEMOS EN NUESTRO TRABAJO? En 2016 formalizamos a como una sociedad. Trabajamos con DevOps (Chef y Docker). Monitoreo inteligente (Estadísticas y logs). Consultoría. Capacitaciones. Cloud computing. IoT. Partners de Chef, Docker y Amazon. Mikroways
  • 9. ANTECEDENTES Antiguamente, transportar bienes tenía muchos problemas. Diferentes tamaños, formas, resistencias, etc. Capacidad de transporte reducida. Difícil realizar un seguimiento. Pérdida parcial de mercadería. Grandes costos.
  • 10. CONTENEDORES Los contenedores solucionaron muchos problemas: Un vendedor pone todos sus productos en un contenedor y sólo debe preocuparse por ese contenedor. Los productos nunca se manipulan individualmente. Tamaños y formas estandarizadas, simpli ca toda la cadena de transporte: el transporte sólo debe llevar contenedores.
  • 12. ¿QUÉ ES DOCKER? Contenedores de software. Empaqueta aplicaciones en una unidad estándar de intercambio. Única pieza de software en un lesystem completo que contiene todo lo necesario para ejecutar una aplicación: código, librerías, herramientas, etc. Garantiza que el software siempre correrá de igual forma sin importar su ambiente.
  • 13. ¿POR QUÉ DOCKER? Diferencias entre el ambiente de desarrollo, testing y producción. Instalación de una aplicación en diferentes plataformas. Deploy de aplicaciones complejas. Ejecución de código antiguo. Simplicidad para escalar horizontalmente.
  • 17. HISTORIA Emerge como proyecto de SL en 2013. Virtualización a nivel de sistema operativo. Se basa en el uso de: para restringir recursos como cpu, memoria, IO, red, etc. permite aislar y virtualizar recursos de una colección de procesos como por ejemplo: PID, hostname, UID, acceso a la red, comunicación entre procesos, lesystem, etc. como es el caso de AUFS, OverlayFS, Btrfs, Device Mapper, ZFS, etc. Cgroups Kernel namespaces Filesystem de unión
  • 18. HISTORIA Con las características antes mencionadas se obtienen contenedores independientes en una instancia Linux que evita el overhead de manipular VMs. Antes de la versión 0.9, Docker usaba LXC como base. A partir de la 0.9 incorporaron libcontainer, eliminando la dependencia de LXC dado que accede directamente al kernel para manipular cgroups, namespaces, apparmor, interfaces de red, etc.
  • 19. IMÁGENES Y CONTENEDORES Imagen: Filesystem y parámetros para utilizarla. No cambia nunca y no tiene estados. Contenedor: Instancia de una imagen (resultado de ejecutarla). Tiene una capa de RW volátil.
  • 24. INSTALACIÓN DE DOCKER Docker puede instalarse en: Linux. MacOS. Windows.
  • 25. INSTALACIÓN DE DOCKER EN LINUX Requisitos: Sistema de 64 bits. Kernel 3.10 o superior. Existen binarios para la mayoría de las distribuciones.
  • 26. INSTALACIÓN DE DOCKER EN WINDOWS/MACOS Usando Docker Toolbox. Utiliza Docker Machine (no nativo). Windows 7/MacOS 10.8 o superior Docker for (Windows/Mac): Corre una aplicación nativa usando (Hyper-V/xhyve para virtualizar la Docker Engine). Windows 10/MacOS 10.10.3 o superior.
  • 28. NUESTRO PRIMER CONTENEDOR $ docker run ­it ubuntu: 16.04 /bin/bash    Unable to find image 'ubuntu:16.04' locally    16.04: Pulling from library/ubuntu     6bbedd9b76a4: Pull complete     fc19d60a83f1: Pull complete     de413bb911fd: Pull complete     2879a7ad3144: Pull complete    668604fde02e: Pull complete    Digest: sha256:2d44ae143feeb36f4c898d32ed2ab2dffeb3a573d2d8928646dfc9cb7deb1315   Status: Downloaded newer image  for ubuntu:16.04    root@99a3403db59a:/# cat /etc/issue    Ubuntu 16.04.1 LTS n l 
  • 29. DOCKERFILE Archivo de texto plano para crear imágenes de Docker. Permite escribir instrucciones a ejecutar. Automatiza el proceso de la creación de imágenes. Permite repetir y modi car fácilmente una imagen. Generar de forma simple imágenes derivadas.
  • 30. DOCKERFILE FROM ubuntu:16.04  MAINTAINER Leandro Di Tommaso   # Instalar Nginx y configurar una página personalizada   RUN apt­get update && apt­get install ­y nginx   RUN mkdir /var/www/html/ejemplo   RUN echo "<html><h1>Nginx en Docker</h1></html>"  > /var/www/html/ejemplo/index.h EXPOSE 80 CMD    ["nginx", "­g", "daemon off;"] 
  • 31. NUESTRA PRIMER IMAGEN $ docker build ­t leoditommaso/nginx: 1.0.0 .    Sending build context to Docker daemon  2.048 kB    Step 1 : FROM ubuntu:16.04    16.04: Pulling from library/ubuntu     6bbedd9b76a4: Already exists     fc19d60a83f1: Already exists     de413bb911fd: Already exists     2879a7ad3144: Already exists     668604fde02e: Already exists    Digest: sha256:2d44ae143feeb36f4c898d32ed2ab2dffeb3a573d2d8928646dfc9cb7deb1315   Status: Downloaded newer image  for ubuntu:16.04     ­­­> f753707788c5    Step 2 : MAINTAINER Leandro Di Tommaso      ­­­> Running in f93e6923c21e     ­­­> a1144bb80b28    Removing intermediate container f93e6923c21e     Step 3 : RUN apt­get update && apt­get install ­y nginx      ­­­> Running in 489697f5e5d5 
  • 33. LA REGISTRY Servicio para almacenar y distribuir imágenes de Docker. Open source (Licencia Apache). Instalación privada Acceso local para mayor velocidad de descarga. Imágenes en un ambiente controlado y gestionado por la organización. Servicio en la nube (Docker Hub). Libre de mantenimiento.
  • 34. DOCKER HUB Gratis para imágenes públicas. Soporta builds automáticos (desde Github/Bitbucket). Cuentas para organizaciones. Plan pago para imágenes privadas. https://hub.docker.com
  • 36. INTRODUCCIÓN Ya sabemos que: Las imágenes Docker son inmutables. Los contenedores crean una capa con las diferencias correspondientes respecto de la imagen original. Entonces los contenedores deberían minimizar los cambios respecto de la imagen original. Optimizando el uso de espacio y evitando impactos de performance. Promoviendo la reusabilidad.
  • 37. INMUTABILIDAD EN LA INFRAESTRUCTURA Desplegar una actualización de una aplicación, consiste en crear nuevas intancias y destruir las anteriores, en vez de actualizarlas sobre la instancia productiva. Una vez que una aplicación está corriendo, ¡evitamos tocarla! promoviendo así: Repetibilidad. Reducir costos de mantenimiento. Simpli car rollbacks.
  • 38. INMUTABILIDAD EN LA INFRAESTRUCTURA Para lograr este tipo de inmutabilidad deben cumplirse los siguientes requerimientos: La aplicación debe ser stateless. Su estado debe almacenarse en un servicio por fuera del alcance de la infraestructura inmutable. Existe un template y/o conjunto de instrucciones que permiten desplegar una instancia de la aplicación desde cero. El segundo punto lo resuelve fácilmente docker
  • 39. ¿QUÉ ES DINÁMICO ENTONCES? La creación de las imágenes debe conocer bien el dominio para identi car las partes que son dinámicas: Archivos que se generan por la aplicación. Uploads desde la aplicación. Logs. Spool.
  • 40. ¿CÓMO VERIFICAR SI MIS CONTENEDORES CRECEN? Un mal diseño de las imágenes impactará en la performance de los contenedores que generarán grandes capas con datos dinámicos. Ante la actualización del contenedor, estos datos se perderán.
  • 41. EL SIGUIENTE COMANDO PERMITE VERIFICAR ESTO $ docker ps ­s  CONTAINER ID        IMAGE     .....               SIZE   0d5c12033ee3        nginx     .....     2 B (virtual 182.8 MB)  El tamaño es lo que crece el contenedor respecto de la imagen. El tamaño virtual es lo que ocupa el contenedor sumado al tamaño de la imagen.
  • 42. BUENAS PRÁCTICAS Los contenedores deben ser efímeros: pararlos, destruirlos y volverlos a iniciar con una mínima con guración. Evitar paquetes innecesarios: las imágenes no deben incluir paquetes que no se utilicen. Un proceso por contenedor: en la mayoría de los casos, se debe correr un proceso por contenedor. Desacoplar aplicaciones en múltiples contenedores hace mucho más simple el escalamiento horizontal y reuso de contenedores. La (in)necesidad de ssh: acceder a un contenedor es algo que debemos evitar. En términos de infraestructura inmutable, el servicio no debería considerar SSH.
  • 44. ¿CÓMO GUARDO LA INFORMACIÓN? Los contenedores son volátiles e inmutables. Debemos preservar la información importante. ¿Dónde? En volúmenes de datos.
  • 45. CARACTERÍSTICAS DE LOS VOLÚMENES No utilizan un sistema de archivos de unión (UFS). Pueden compartirse y reusarse entre contenedores. Los cambios se hacen directamente en el volumen. La información del volumen no se incluye en la imagen. Persisten aún cuando se eliminen todos los contenedores que los usan. Pueden quedar volúmenes sin referenciar.
  • 46. TIPOS DE VOLÚMENES Volúmenes anónimos. Volúmenes nombrados. Volúmenes desde el SO host.
  • 47. TIPOS DE VOLÚMENES Al crear un volúmen anónimo o nombrado, la información que exista en el punto de montaje se copia al volumen. Con volúmenes desde el SO host o desde otro contenedor, se oculta la información que exista en el punto de montaje. Correspondencia con el comando mount.
  • 48. ANALIZANDO LOS VOLÚMENES Al iniciar un contenedor, la opción -v permite indicar qué volumen utilizar. El siguiente ejemplo de ne tres volúmenes: uno anónimo, uno nombrado y uno desde el SO host: $ docker run ­it         ­v /usr/local                   # anonimo        ­v test­volume:/test­volume     # nombrado        ­v /tmp:/tmp                    # SO host        ubuntu bash  Inspeccionando los volúmenes vemos: $ docker volume ls    DRIVER    VOLUME NAME    local     e9c7022b8c7bec55891ca44b8c40de1e5f41cf0fe9505a334bca06a484a5ff1f   local     test­volume 
  • 50. ¿QUÉ ES DOCKER COMPOSE? Herramienta que permite levantar aplicaciones compuestas por múltiples contenedores. La arquitectura se de ne y con gura en un archivo de texto ( ). Simple e intuitivo. Se vale de un comando para: Iniciar, detener y reconstruir servicios. Ver el estado de los servicios, los logs, etc. YAML
  • 51. VERSIONES DE DOCKER COMPOSE Hay dos versiones diferentes, la 1 y la 2. No son compatibles entre sí. Pequeños cambios en el archivo de texto. Veremos la sintaxis de la versión 2.
  • 52. DOCKER COMPOSE: EJEMPLO Instalación de Wordpress. Vamos a crear un archivo llamado docker-compose.yml. De niremos allí la arquitectura de la aplicación. Nos valdremos del comando docker-compose para levantar Wordpress e interactuar con los contenedores generados.
  • 53. LEVANTANDO UN WORDPRESS version: '2'  services:    db:     image: mysql:5.7      volumes:        ­ "dbdata:/var/lib/mysql"      restart: always      environment:        MYSQL_ROOT_PASSWORD: wordpress         MYSQL_DATABASE: wordpress         MYSQL_USER: wordpress         MYSQL_PASSWORD: wordpress     wordpress:      depends_on:        ­ db      image: wordpress:latest  
  • 54. LEVANTANDO UN WORDPRESS $ docker­compose up ­d    Creating network "wordpress_default" with the default driver     Creating volume "wordpress_dbdata" with default driver    Creating wordpress_db_1     Creating wordpress_wordpress_1   $ docker­compose ps          Name                       Command               State         Ports ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ wordpress_db_1          docker­entrypoint.sh mysqld      Up      3306/tcp wordpress_wordpress_1   /entrypoint.sh apache2­for ...   Up      0.0.0.0:
  • 57. LOS DISTINTOS ESQUEMAS Usando Docker para iniciar servicios de forma aislada. Usando un cluster de docker.
  • 58. DOCKER STANDALONE Cada servidor Linux corre el servicio de Docker en forma aislada. Los contenedores pueden iniciarse automáticamente durante el booteo usando: Manejadores de procesos como , o . A través de políticas de reinicio (Docker >= 1.2). upstart systemd supervisor
  • 59. A TRAVÉS DE MANEJADORES DE PROCESOS Dado que Docker no setea políticas de reinicio por defecto, cuando un servicio iniciado con Docker termina, no se toma ninguna acción. Las políticas de reinicio podrían con ictuar con los manejadores de procesos. INTEGRACIÓN CON LOS MANEJADORES DE PROCESOS Cuando un contenedor ya corre como esperamos, entonces podemos attacharlo a un manejador de procesos para que él lo maneje. Corriendo docker start -a Docker attachará al contenedor corriendo (o iniciará si no está corriendo) reenviando las señales al manejador de procesos.
  • 60. EJEMPLOS Para entender los siguientes ejemplos veremos qué hace: docker start -a # Iniciamos un contenedor nginx daemonizado y nombrado:   docker run ­d  ­­name=nginx_docker ­p  9090:80 nginx  # El contenedor ya atiende en el puerto 9090:   curl http://localhost:9090  # Usando docker start para attachar al contenedor nombrado   docker start ­a nginx_docker  Ctrl+C # envía la señal SIGTERM al proceso. Muere el contenedor          # el comando curl ya no es exitoso   # Usando nuevamente docker start   docker start ­a nginx_docker # reinicia el servicio 
  • 61. EJEMPLO UPSTART Un contenedor que inicia Redis. description "Redis container"  author "Me" start on filesystem and started docker   stop on runlevel [!2345]  respawn script   /usr/bin/docker start  ­a redis_server  end script 
  • 62. EJEMPLO SYSTEMD [Unit] Description=Redis container   Requires=docker.service  After=docker.service  [Service]  Restart=always  ExecStart=/usr/bin/docker start  ­a redis_server  ExecStop=/usr/bin/docker stop ­t  2 redis_server  [Install]  WantedBy=default.target  docker stop -t TIME envía la señal SIGTERM y luego del tiempo especi cado envía SIGKILL
  • 63. POLÍTICAS DE REINICIO Si no queremos utilizar manejadores de procesos, entonces podemos emplear las políticas de reinicio. Estas políticas permiten especi car cómo un contenedor debería o no ser reiniciado cuando termina.
  • 64. POLÍTICAS DE REINICIO no: no iniciar el contenedor cuando termina. Valor por defecto. on-failure:[max]: reiniciar solo si el contenedor termina con exit status diferente a cero. Limitar opcionalmente los reintentos de reinicio. always: siempre reiniciar el contenedor. Además el contenedor se iniciará cuando inicia el daemon Docker. unless-stopped: idem anterior, salvo que en un reinicio del servicio Docker considera si previamente fue detenido.
  • 65. EJEMPLO DE POLÍTICA DE REINICIO # Iniciamos ninx con restart policy always   docker run ­d ­­restart=always ­­name=nginx_docker ­p  9090:80 nginx  # Verificamos la cantidad de reinicios:   docker inspect  ­f "{{ .RestartCount }}" nginx_docker  # Matamos abruptamente el contenedor   docker exec nginx_docker kill ­QUIT  1   # Verificamos la cantidad de reinicios:   docker inspect  ­f "{{ .RestartCount }}" nginx_docker  nginx recibe la señal QUIT para nalizar el proceso https://www.nginx.com/resources/wiki/start/topics/tutorials/commandline/
  • 66. CLUSTERS DOCKER La idea detrás de los clusters Docker es la de disponer de nodos Linux con el Docker Engine de tal forma de poder utilizarlos para correr contenedores. Estos Linux deben ser muy pequeños dado que su única razón de ser es la de proveer un kernel, no utilidades. Serían como equipos físicos pertenecientes a un pool de hardware disponible en un virtualizador como XEN o VMWare.
  • 67. LOS CLUSTERS MÁS CONOCIDOS Swarm Rancher Kubernetes Apache Mesos
  • 68. CARACTERÍSTICAS DE TODOS LOS CLUSTERS Diseño descentralizado. Servicios, pods o stacks en vez de contenedores. Posibilidad de escalar. Conciliación para alcanzar el estado deseado. Service discovery. Load balancing. Actualizaciones en caliente.
  • 69. CONSIDERACIONES El scheduler es el encargado de determinar donde se inicia cada contenedor. Asociado al scheduler trabajan los health checks que garantizan la conciliación de un estado deseado: que hayan N contenedores para el servicio X. La distribución mágica del scheduler complica el manejo de volúmenes. Los volúmenes pertenecen a un nodo. Si el nodo cambia, se pierden los datos.
  • 70. VOLÚMENES DISTRIBUIDOS Necesidad de compartir datos entre los nodos del cluster. Aparecen diferentes implementaciones de volúmenes compartidos. Las más populares son: Convoy Flocker
  • 73. Y SI LAS PREGUNTAS SURGEN MÁS TARDE... Leandro Di Tommaso Christian Rodriguez leandro.ditommaso@mikroways.net https://github.com/leoditommaso christian.rodriguez@mikroways.net https://github.com/chrodriguez