SlideShare una empresa de Scribd logo
1 de 54
Descargar para leer sin conexión
Docker en el entorno
de desarrollo
Alejandro Hernández (@aleherse)
Desarrollador de aplicaciones web, consultor y formador.
Trabajando actualmente en un juego web de estrategia por
turnos ambientado en la antigua Grecia
+info: http://about.me/aleherse
¿Qué es Docker?
Software Open Source que
automatiza el despliegue de
aplicaciones dentro de
contenedores
¿Qué hay en un contenedor?
• Sistema de ficheros completo
• Cualquier cosa que pueda instalarse en linux
• Nuestra aplicación
Contenedores vs Máquinas
Virtuales
• Ejecución en espacio de usuario sobre el kernel del SO
Contenedores vs Máquinas
Virtuales
• Ejecución en espacio de usuario sobre el kernel del SO
• Menor sobrecarga de la máquina anfitrión
Contenedores vs Máquinas
Virtuales
• Ejecución en espacio de usuario sobre el kernel del SO
• Menor sobrecarga de la máquina anfitrión
• Permite multiples instancias aisladas
Contenedores vs Máquinas
Virtuales
• Ejecución en espacio de usuario sobre el kernel del SO
• Menor sobrecarga de la máquina anfitrión
• Permite multiples instancias aisladas
• Requiere un kernel de Linux
Tecnología detrás de Docker
• Linux Kernel Control Groups (cgroups)
Tecnología detrás de Docker
• Linux Kernel Control Groups (cgroups)
• Linux Kernel Namespaces
Tecnología detrás de Docker
• Linux Kernel Control Groups (cgroups)
• Linux Kernel Namespaces
• Union Mount
Tecnología detrás de Docker
• Linux Kernel Control Groups (cgroups)
• Linux Kernel Namespaces
• Union Mount
• Docker libcontainer
Objetivos de Docker
• Forma fácil y rápida de modelar la realidad
Objetivos de Docker
• Forma fácil y rápida de modelar la realidad
• Segregación lógica de tareas
Objetivos de Docker
• Forma fácil y rápida de modelar la realidad
• Segregación lógica de tareas
• Ciclo de desarrollo eficiente y rápido
Objetivos de Docker
• Forma fácil y rápida de modelar la realidad
• Segregación lógica de tareas
• Ciclo de desarrollo eficiente y rápido
• Promueve arquitectura orientada a servicios
Componentes
• Docker Engine
• Docker Images
• Docker Containers
• Registries
Instalación
Guía muy completa en la web
Existen aplicaciones para OSX y Windows
Puedes descargar y ejecutar un script para Linux
Docker containers
• Un formato de imagen
• Un conjunto de operaciones estándar
• Un entorno de ejecución
¡Manos a la obra!
Contenedores
¿Funciona?
$ docker info
Ejecutemos nuestro primer contenedor
$ docker run -i -t ubuntu /bin/bash
Juguemos un poco
# hostname
# ls -la
# cat /etc/hosts
# ps -aux
# exit
¿Qué ha pasado con nuestro contenedor?
$ docker ps -a
$ docker start <container_name>
$ docker ps
$ docker attach <container_name>
Ejecutar contenedores en segundo plano
$ docker run --name daemon -d ubuntu /bin/sh -c 
"while true; do echo hello world; sleep 1; done"
$ docker ps
$ docker logs -f deamon
[Ctrl-C]
$ docker exec -d daemon touch /new_file
$ docker exec -t -i daemon /bin/bash
# ls -la
[Ctrl-C]
$ docker stop daemon
$ docker rm daemon
Docker Images
Base image contiene el sistema
operativo mínimo (debian < 150mb)
Gracias a union mount docker
superpone varios sistema de ficheros
de solo lectura
Añade al final un sistema de ficheros
de lectura-escritura
¡Manos a la obra!
Imágenes
Repositorio de imágenes oficial:
https://hub.docker.com/
¿Cómo construir nuestra propia imagen?
Creamos un fichero Dockerfile conteniendo:
FROM ubuntu:16.04
RUN apt-get update; apt-get install -y nginx
RUN echo 'Soy un fichero dentro del contenedor' 
> /var/www/html/index.html
EXPOSE 80
Comandos relacionados con imágenes
$ docker build -t aleherse/static_web .
$ docker images
$ docker rmi aleherse/static_web
Docker Compose
Inicia una serie de contenedores definidos en un fichero YAML
Incluido en Docker para OSX y Windows
Para usar en linux seguir los pasos de instalación de:
https://github.com/docker/compose/releases
¡Manos a la obra!
Orquestración
Funcionalidades de nuestra aplicación de ejemplo
• Muestra un formulario con destinatario, asunto y contenido
• Envía el contenido del formulario en un correo electrónico
• Almacena los datos del correo con la fecha de envío
• Lista todo los correos que se han enviado
¿Qué software tenemos en producción?
• Aplicación PHP 7.1.0
• Servidor web Nginx 1.11.6
• Base de datos MySQL 5.7.16
• Servidor SMTP Postfix 3.5
Aplicación PHP 7.1.0
FROM php:7.1.0-fpm
RUN apt-get update && apt-get install -yq git vim zip && 
docker-php-ext-install mysqli pdo pdo_mysql && 
apt-get clean && 
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
ENV COMPOSER_ALLOW_SUPERUSER=1
...
COPY local.ini /usr/local/etc/php/conf.d/
WORKDIR /app
VOLUME /app
EXPOSE 9000
CMD ["php-fpm", "-F"]
Un inciso sobre los volúmenes
• Comparten ficheros del anfitrión en el contenedor
Un inciso sobre los volúmenes
• Comparten ficheros del anfitrión en el contenedor
• Se saltan el Union Mount
Un inciso sobre los volúmenes
• Comparten ficheros del anfitrión en el contenedor
• Se saltan el Union Mount
• Puede compartirse y reutilizarse entre contenedores
Un inciso sobre los volúmenes
• Comparten ficheros del anfitrión en el contenedor
• Se saltan el Union Mount
• Puede compartirse y reutilizarse entre contenedores
• Puede ser compartido sin estar en ejecución el contenedor
Un inciso sobre los volúmenes
• Comparten ficheros del anfitrión en el contenedor
• Se saltan el Union Mount
• Puede compartirse y reutilizarse entre contenedores
• Puede ser compartido sin estar en ejecución el contenedor
• Existen hasta que no haya ningún contenedor que lo use
Servidor web Nginx 1.11.6
FROM nginx:1.11.6
COPY nginx.conf /etc/nginx/
COPY web.conf /etc/nginx/conf.d/
RUN echo "upstream php-upstream { server app:9000; }" >
/etc/nginx/conf.d/upstream.conf
VOLUME /app
EXPOSE 80
CMD ["nginx"]
Fichero docker-compose.yml (1/2)
version: '2'
services:
app:
build: docker/php
volumes:
- ./app:/app
server:
build: docker/nginx
ports:
- "80:80"
volumes_from:
- app
...
Fichero docker-compose.yml (2/2)
...
db:
image: mysql:5.7.16
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: web
MYSQL_USER: web
MYSQL_PASSWORD: password
volumes:
- ./docker/mysql/:/docker-entrypoint-initdb.d
mailcatcher:
image: schickling/mailcatcher
ports:
- "1080:1080"
$ docker-compose build
$ docker-compose up
[Ctrl-C]
$ docker-compose up -d
Puntos de acceso desde el anfitrión
• Nginx http://localhost/
• Aplicación http://local.dev/
• Mailcatcher http://local.dev:1080/
• MySQL localhost:3306
Compose crea una red por defecto para la aplicación, cada
servicio se une a esta red y son accesibles y detectable entre
ellos usando el nombre del servicio
$ docker network ls
$ docker network inspect dockerfordevelopment_default
$ docker-compose exec app /bin/bash
# ping db
[Ctrl-C]
# ping server
[Ctrl-C]
$ docker-compose ps
$ docker-compose logs
$ docker-compose logs db
$ docker-compose run app /bin/bash
$ docker-compose stop
$ docker-compose start
$ docker-compose stop
$ docker-compose ps
$ docker-compose rm
$ docker-compose ps
¡Manos a la obra!
Aplicación de ejemplo
https://github.com/aleherse/docker-for-development
Ventajas de Docker en desarrollo
• Mismo código, Sistema Operativo y aplicaciones
Ventajas de Docker en desarrollo
• Mismo código, Sistema Operativo y aplicaciones
• Más ligero que una máquina virtual
Ventajas de Docker en desarrollo
• Mismo código, Sistema Operativo y aplicaciones
• Más ligero que una máquina virtual
• Independiente de la máquina del desarrollador
Ventajas de Docker en desarrollo
• Mismo código, Sistema Operativo y aplicaciones
• Más ligero que una máquina virtual
• Independiente de la máquina del desarrollador
• Es muy fácil cambiar versiones de software (PHP 5.6 a PHP
7)
Ventajas de Docker en desarrollo
• Mismo código, Sistema Operativo y aplicaciones
• Más ligero que una máquina virtual
• Independiente de la máquina del desarrollador
• Es muy fácil cambiar de versión (PHP 5.6 a PHP 7)
• Es trivial reconstruir el entorno
Ventajas de Docker en desarrollo
• Mismo código, Sistema Operativo y aplicaciones
• Más ligero que una máquina virtual
• Independiente de la máquina del desarrollador
• Es muy fácil cambiar de versión (PHP 5.6 a PHP 7)
• Es trivial reconstruir el entorno
• Si modificas el contenedor actualiza el Dockerfile
¿Por dónde continuar?
• Documentación oficial (docs.docker.com)
• Imágenes en Docker Hub (hub.docker.com)
• The Docker book (dockerbook.com)
• Búsqueda de Docker en YouTube
• Crea contenedores para tus proyectos más sencillos
• Usar docker para testeo y producción
¿Preguntas?

Más contenido relacionado

La actualidad más candente

WordPress, Nginx, Ghost y Telegram con Docker - I Meetup Docker Córdoba - Quaip
WordPress, Nginx, Ghost y Telegram con Docker - I Meetup Docker Córdoba - QuaipWordPress, Nginx, Ghost y Telegram con Docker - I Meetup Docker Córdoba - Quaip
WordPress, Nginx, Ghost y Telegram con Docker - I Meetup Docker Córdoba - Quaipquaip
 
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
 
Docker - Sysmana 2014
Docker - Sysmana 2014Docker - Sysmana 2014
Docker - Sysmana 2014quaip
 
nerdear.la 2016 - Docker workshop
nerdear.la 2016 - Docker workshopnerdear.la 2016 - Docker workshop
nerdear.la 2016 - Docker workshopRestorando
 
BEEVA | Introducción a Docker
BEEVA | Introducción a DockerBEEVA | Introducción a Docker
BEEVA | Introducción a DockerBEEVA_es
 
Creacion y Administracion de servicios usando Docker - .Net Conf Mx 2018
Creacion y Administracion de servicios usando Docker - .Net Conf Mx 2018Creacion y Administracion de servicios usando Docker - .Net Conf Mx 2018
Creacion y Administracion de servicios usando Docker - .Net Conf Mx 2018Vicente Gerardo Guzman Lucio
 
Introducción a Docker
Introducción a DockerIntroducción a Docker
Introducción a DockerOpen Canarias
 
Vagrant y Docker - Guía práctica de uso
Vagrant y Docker - Guía práctica de usoVagrant y Docker - Guía práctica de uso
Vagrant y Docker - Guía práctica de usoSergio Zambrano Delfa
 
Seminario CLEFormacion-docker
Seminario CLEFormacion-dockerSeminario CLEFormacion-docker
Seminario CLEFormacion-dockerCLEFormación
 
Sandbox para ejercicios de programación
Sandbox para ejercicios de programaciónSandbox para ejercicios de programación
Sandbox para ejercicios de programaciónMario Garcia-Valdez
 
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
 

La actualidad más candente (20)

WordPress, Nginx, Ghost y Telegram con Docker - I Meetup Docker Córdoba - Quaip
WordPress, Nginx, Ghost y Telegram con Docker - I Meetup Docker Córdoba - QuaipWordPress, Nginx, Ghost y Telegram con Docker - I Meetup Docker Córdoba - Quaip
WordPress, Nginx, Ghost y Telegram con Docker - I Meetup Docker Córdoba - Quaip
 
Presentación Docker
Presentación DockerPresentación Docker
Presentación 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
 
Fury - Docker Meetup
Fury - Docker MeetupFury - Docker Meetup
Fury - Docker Meetup
 
Usando docker
Usando dockerUsando docker
Usando docker
 
Introducción a Docker
Introducción a DockerIntroducción a Docker
Introducción a Docker
 
Docker - Sysmana 2014
Docker - Sysmana 2014Docker - Sysmana 2014
Docker - Sysmana 2014
 
nerdear.la 2016 - Docker workshop
nerdear.la 2016 - Docker workshopnerdear.la 2016 - Docker workshop
nerdear.la 2016 - Docker workshop
 
BEEVA | Introducción a Docker
BEEVA | Introducción a DockerBEEVA | Introducción a Docker
BEEVA | Introducción a Docker
 
Docker y PostgreSQL
Docker y PostgreSQLDocker y PostgreSQL
Docker y PostgreSQL
 
Creacion y Administracion de servicios usando Docker - .Net Conf Mx 2018
Creacion y Administracion de servicios usando Docker - .Net Conf Mx 2018Creacion y Administracion de servicios usando Docker - .Net Conf Mx 2018
Creacion y Administracion de servicios usando Docker - .Net Conf Mx 2018
 
Introducción a Docker
Introducción a DockerIntroducción a Docker
Introducción a Docker
 
Vagrant y Docker - Guía práctica de uso
Vagrant y Docker - Guía práctica de usoVagrant y Docker - Guía práctica de uso
Vagrant y Docker - Guía práctica de uso
 
DevOps+[Chef/Docker]
 DevOps+[Chef/Docker] DevOps+[Chef/Docker]
DevOps+[Chef/Docker]
 
Docker desde cero
Docker desde ceroDocker desde cero
Docker desde cero
 
FROM lost to the docker
FROM lost to the dockerFROM lost to the docker
FROM lost to the docker
 
Seminario CLEFormacion-docker
Seminario CLEFormacion-dockerSeminario CLEFormacion-docker
Seminario CLEFormacion-docker
 
Sandbox para ejercicios de programación
Sandbox para ejercicios de programaciónSandbox para ejercicios de programación
Sandbox para ejercicios de programación
 
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
 
Introduccion A Docker
Introduccion A DockerIntroduccion A Docker
Introduccion A Docker
 

Similar a Docker en el entorno de desarrollo

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
 
La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR
La Caja de Herramientas del Desarrollador Moderno PHPConferenceARLa Caja de Herramientas del Desarrollador Moderno PHPConferenceAR
La Caja de Herramientas del Desarrollador Moderno PHPConferenceARPablo Godel
 
03 de Marzo 2015: Andrés Villarreal - Herramientas del Desarrollador Moderno
03 de Marzo 2015: Andrés Villarreal - Herramientas del Desarrollador Moderno03 de Marzo 2015: Andrés Villarreal - Herramientas del Desarrollador Moderno
03 de Marzo 2015: Andrés Villarreal - Herramientas del Desarrollador Modernowpargentina
 
Introduccion a SQL Server 2017 en Docker
Introduccion a SQL Server 2017 en Docker Introduccion a SQL Server 2017 en Docker
Introduccion a SQL Server 2017 en Docker Eduardo Castro
 
Docker 101 Workshop - WomenWhoCode Buenos Aires
Docker 101 Workshop - WomenWhoCode Buenos AiresDocker 101 Workshop - WomenWhoCode Buenos Aires
Docker 101 Workshop - WomenWhoCode Buenos AiresBel Rey
 
Dockerparadesarrollo
DockerparadesarrolloDockerparadesarrollo
DockerparadesarrolloEric Zeidan
 
Game of pods - Kubernetes
Game of pods - KubernetesGame of pods - Kubernetes
Game of pods - Kubernetesjdezine
 
FROM lost to the Docker 2020
FROM lost to the Docker 2020FROM lost to the Docker 2020
FROM lost to the Docker 2020BelnGonzlezGarca1
 
De desarrollo a producción usando docker
De desarrollo a producción usando dockerDe desarrollo a producción usando docker
De desarrollo a producción usando dockerChristian Rodriguez
 
Docker como la máxima expresión de Devops - WISIT 2015
Docker como la máxima expresión de Devops - WISIT 2015Docker como la máxima expresión de Devops - WISIT 2015
Docker como la máxima expresión de Devops - WISIT 2015Gustavo Andres Brey
 
Usando Docker con sistemas Asterisk
Usando Docker con sistemas AsteriskUsando Docker con sistemas Asterisk
Usando Docker con sistemas AsteriskElio Rojano
 
Usando Docker con sistemas Asterisk
Usando Docker con sistemas AsteriskUsando Docker con sistemas Asterisk
Usando Docker con sistemas AsteriskVOIP2DAY
 
ASP.NET 5 en Linux y Mac OS X: herramientas e integración
ASP.NET 5 en Linux y Mac OS X: herramientas e integraciónASP.NET 5 en Linux y Mac OS X: herramientas e integración
ASP.NET 5 en Linux y Mac OS X: herramientas e integraciónLuis Ruiz Pavón
 

Similar a Docker en el entorno de desarrollo (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]
 
La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR
La Caja de Herramientas del Desarrollador Moderno PHPConferenceARLa Caja de Herramientas del Desarrollador Moderno PHPConferenceAR
La Caja de Herramientas del Desarrollador Moderno PHPConferenceAR
 
Jug málaga docker 101 - final
Jug málaga   docker 101 - finalJug málaga   docker 101 - final
Jug málaga docker 101 - final
 
03 de Marzo 2015: Andrés Villarreal - Herramientas del Desarrollador Moderno
03 de Marzo 2015: Andrés Villarreal - Herramientas del Desarrollador Moderno03 de Marzo 2015: Andrés Villarreal - Herramientas del Desarrollador Moderno
03 de Marzo 2015: Andrés Villarreal - Herramientas del Desarrollador Moderno
 
Introduccion a SQL Server 2017 en Docker
Introduccion a SQL Server 2017 en Docker Introduccion a SQL Server 2017 en Docker
Introduccion a SQL Server 2017 en Docker
 
docker.pdf
docker.pdfdocker.pdf
docker.pdf
 
Docker 2014 v2
Docker 2014 v2Docker 2014 v2
Docker 2014 v2
 
Docker 101 Workshop - WomenWhoCode Buenos Aires
Docker 101 Workshop - WomenWhoCode Buenos AiresDocker 101 Workshop - WomenWhoCode Buenos Aires
Docker 101 Workshop - WomenWhoCode Buenos Aires
 
Dockerparadesarrollo
DockerparadesarrolloDockerparadesarrollo
Dockerparadesarrollo
 
Game of pods - Kubernetes
Game of pods - KubernetesGame of pods - Kubernetes
Game of pods - Kubernetes
 
Curso gratuito de Docker
Curso gratuito de DockerCurso gratuito de Docker
Curso gratuito de Docker
 
FROM lost to the Docker 2020
FROM lost to the Docker 2020FROM lost to the Docker 2020
FROM lost to the Docker 2020
 
Dockers y wp
Dockers y wpDockers y wp
Dockers y wp
 
De desarrollo a producción usando docker
De desarrollo a producción usando dockerDe desarrollo a producción usando docker
De desarrollo a producción usando docker
 
Taller docker _es-cl
Taller docker _es-clTaller docker _es-cl
Taller docker _es-cl
 
Docker como la máxima expresión de Devops - WISIT 2015
Docker como la máxima expresión de Devops - WISIT 2015Docker como la máxima expresión de Devops - WISIT 2015
Docker como la máxima expresión de Devops - WISIT 2015
 
Usando Docker con sistemas Asterisk
Usando Docker con sistemas AsteriskUsando Docker con sistemas Asterisk
Usando Docker con sistemas Asterisk
 
Usando Docker con sistemas Asterisk
Usando Docker con sistemas AsteriskUsando Docker con sistemas Asterisk
Usando Docker con sistemas Asterisk
 
Open Build Service
Open Build ServiceOpen Build Service
Open Build Service
 
ASP.NET 5 en Linux y Mac OS X: herramientas e integración
ASP.NET 5 en Linux y Mac OS X: herramientas e integraciónASP.NET 5 en Linux y Mac OS X: herramientas e integración
ASP.NET 5 en Linux y Mac OS X: herramientas e integración
 

Último

pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...JohnRamos830530
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxJorgeParada26
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estossgonzalezp1
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxFederico Castellari
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxMiguelAtencio10
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIhmpuellon
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxAlan779941
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativanicho110
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanamcerpam
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.FlorenciaCattelani
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21mariacbr99
 

Último (12)

pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptx
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXI
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 

Docker en el entorno de desarrollo

  • 1. Docker en el entorno de desarrollo
  • 2. Alejandro Hernández (@aleherse) Desarrollador de aplicaciones web, consultor y formador. Trabajando actualmente en un juego web de estrategia por turnos ambientado en la antigua Grecia +info: http://about.me/aleherse
  • 3. ¿Qué es Docker? Software Open Source que automatiza el despliegue de aplicaciones dentro de contenedores
  • 4. ¿Qué hay en un contenedor? • Sistema de ficheros completo • Cualquier cosa que pueda instalarse en linux • Nuestra aplicación
  • 5. Contenedores vs Máquinas Virtuales • Ejecución en espacio de usuario sobre el kernel del SO
  • 6. Contenedores vs Máquinas Virtuales • Ejecución en espacio de usuario sobre el kernel del SO • Menor sobrecarga de la máquina anfitrión
  • 7. Contenedores vs Máquinas Virtuales • Ejecución en espacio de usuario sobre el kernel del SO • Menor sobrecarga de la máquina anfitrión • Permite multiples instancias aisladas
  • 8. Contenedores vs Máquinas Virtuales • Ejecución en espacio de usuario sobre el kernel del SO • Menor sobrecarga de la máquina anfitrión • Permite multiples instancias aisladas • Requiere un kernel de Linux
  • 9.
  • 10. Tecnología detrás de Docker • Linux Kernel Control Groups (cgroups)
  • 11. Tecnología detrás de Docker • Linux Kernel Control Groups (cgroups) • Linux Kernel Namespaces
  • 12. Tecnología detrás de Docker • Linux Kernel Control Groups (cgroups) • Linux Kernel Namespaces • Union Mount
  • 13. Tecnología detrás de Docker • Linux Kernel Control Groups (cgroups) • Linux Kernel Namespaces • Union Mount • Docker libcontainer
  • 14. Objetivos de Docker • Forma fácil y rápida de modelar la realidad
  • 15. Objetivos de Docker • Forma fácil y rápida de modelar la realidad • Segregación lógica de tareas
  • 16. Objetivos de Docker • Forma fácil y rápida de modelar la realidad • Segregación lógica de tareas • Ciclo de desarrollo eficiente y rápido
  • 17. Objetivos de Docker • Forma fácil y rápida de modelar la realidad • Segregación lógica de tareas • Ciclo de desarrollo eficiente y rápido • Promueve arquitectura orientada a servicios
  • 18. Componentes • Docker Engine • Docker Images • Docker Containers • Registries
  • 19. Instalación Guía muy completa en la web Existen aplicaciones para OSX y Windows Puedes descargar y ejecutar un script para Linux
  • 20. Docker containers • Un formato de imagen • Un conjunto de operaciones estándar • Un entorno de ejecución
  • 21. ¡Manos a la obra! Contenedores
  • 22. ¿Funciona? $ docker info Ejecutemos nuestro primer contenedor $ docker run -i -t ubuntu /bin/bash Juguemos un poco # hostname # ls -la # cat /etc/hosts # ps -aux # exit
  • 23. ¿Qué ha pasado con nuestro contenedor? $ docker ps -a $ docker start <container_name> $ docker ps $ docker attach <container_name>
  • 24. Ejecutar contenedores en segundo plano $ docker run --name daemon -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done" $ docker ps $ docker logs -f deamon [Ctrl-C] $ docker exec -d daemon touch /new_file $ docker exec -t -i daemon /bin/bash # ls -la [Ctrl-C] $ docker stop daemon $ docker rm daemon
  • 25. Docker Images Base image contiene el sistema operativo mínimo (debian < 150mb) Gracias a union mount docker superpone varios sistema de ficheros de solo lectura Añade al final un sistema de ficheros de lectura-escritura
  • 26. ¡Manos a la obra! Imágenes
  • 27. Repositorio de imágenes oficial: https://hub.docker.com/ ¿Cómo construir nuestra propia imagen?
  • 28. Creamos un fichero Dockerfile conteniendo: FROM ubuntu:16.04 RUN apt-get update; apt-get install -y nginx RUN echo 'Soy un fichero dentro del contenedor' > /var/www/html/index.html EXPOSE 80
  • 29. Comandos relacionados con imágenes $ docker build -t aleherse/static_web . $ docker images $ docker rmi aleherse/static_web
  • 30. Docker Compose Inicia una serie de contenedores definidos en un fichero YAML Incluido en Docker para OSX y Windows Para usar en linux seguir los pasos de instalación de: https://github.com/docker/compose/releases
  • 31. ¡Manos a la obra! Orquestración
  • 32. Funcionalidades de nuestra aplicación de ejemplo • Muestra un formulario con destinatario, asunto y contenido • Envía el contenido del formulario en un correo electrónico • Almacena los datos del correo con la fecha de envío • Lista todo los correos que se han enviado
  • 33. ¿Qué software tenemos en producción? • Aplicación PHP 7.1.0 • Servidor web Nginx 1.11.6 • Base de datos MySQL 5.7.16 • Servidor SMTP Postfix 3.5
  • 34. Aplicación PHP 7.1.0 FROM php:7.1.0-fpm RUN apt-get update && apt-get install -yq git vim zip && docker-php-ext-install mysqli pdo pdo_mysql && apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* ENV COMPOSER_ALLOW_SUPERUSER=1 ... COPY local.ini /usr/local/etc/php/conf.d/ WORKDIR /app VOLUME /app EXPOSE 9000 CMD ["php-fpm", "-F"]
  • 35. Un inciso sobre los volúmenes • Comparten ficheros del anfitrión en el contenedor
  • 36. Un inciso sobre los volúmenes • Comparten ficheros del anfitrión en el contenedor • Se saltan el Union Mount
  • 37. Un inciso sobre los volúmenes • Comparten ficheros del anfitrión en el contenedor • Se saltan el Union Mount • Puede compartirse y reutilizarse entre contenedores
  • 38. Un inciso sobre los volúmenes • Comparten ficheros del anfitrión en el contenedor • Se saltan el Union Mount • Puede compartirse y reutilizarse entre contenedores • Puede ser compartido sin estar en ejecución el contenedor
  • 39. Un inciso sobre los volúmenes • Comparten ficheros del anfitrión en el contenedor • Se saltan el Union Mount • Puede compartirse y reutilizarse entre contenedores • Puede ser compartido sin estar en ejecución el contenedor • Existen hasta que no haya ningún contenedor que lo use
  • 40. Servidor web Nginx 1.11.6 FROM nginx:1.11.6 COPY nginx.conf /etc/nginx/ COPY web.conf /etc/nginx/conf.d/ RUN echo "upstream php-upstream { server app:9000; }" > /etc/nginx/conf.d/upstream.conf VOLUME /app EXPOSE 80 CMD ["nginx"]
  • 41. Fichero docker-compose.yml (1/2) version: '2' services: app: build: docker/php volumes: - ./app:/app server: build: docker/nginx ports: - "80:80" volumes_from: - app ...
  • 42. Fichero docker-compose.yml (2/2) ... db: image: mysql:5.7.16 ports: - "3306:3306" environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: web MYSQL_USER: web MYSQL_PASSWORD: password volumes: - ./docker/mysql/:/docker-entrypoint-initdb.d mailcatcher: image: schickling/mailcatcher ports: - "1080:1080"
  • 43. $ docker-compose build $ docker-compose up [Ctrl-C] $ docker-compose up -d Puntos de acceso desde el anfitrión • Nginx http://localhost/ • Aplicación http://local.dev/ • Mailcatcher http://local.dev:1080/ • MySQL localhost:3306
  • 44. Compose crea una red por defecto para la aplicación, cada servicio se une a esta red y son accesibles y detectable entre ellos usando el nombre del servicio $ docker network ls $ docker network inspect dockerfordevelopment_default $ docker-compose exec app /bin/bash # ping db [Ctrl-C] # ping server [Ctrl-C]
  • 45. $ docker-compose ps $ docker-compose logs $ docker-compose logs db $ docker-compose run app /bin/bash $ docker-compose stop $ docker-compose start $ docker-compose stop $ docker-compose ps $ docker-compose rm $ docker-compose ps
  • 46. ¡Manos a la obra! Aplicación de ejemplo https://github.com/aleherse/docker-for-development
  • 47. Ventajas de Docker en desarrollo • Mismo código, Sistema Operativo y aplicaciones
  • 48. Ventajas de Docker en desarrollo • Mismo código, Sistema Operativo y aplicaciones • Más ligero que una máquina virtual
  • 49. Ventajas de Docker en desarrollo • Mismo código, Sistema Operativo y aplicaciones • Más ligero que una máquina virtual • Independiente de la máquina del desarrollador
  • 50. Ventajas de Docker en desarrollo • Mismo código, Sistema Operativo y aplicaciones • Más ligero que una máquina virtual • Independiente de la máquina del desarrollador • Es muy fácil cambiar versiones de software (PHP 5.6 a PHP 7)
  • 51. Ventajas de Docker en desarrollo • Mismo código, Sistema Operativo y aplicaciones • Más ligero que una máquina virtual • Independiente de la máquina del desarrollador • Es muy fácil cambiar de versión (PHP 5.6 a PHP 7) • Es trivial reconstruir el entorno
  • 52. Ventajas de Docker en desarrollo • Mismo código, Sistema Operativo y aplicaciones • Más ligero que una máquina virtual • Independiente de la máquina del desarrollador • Es muy fácil cambiar de versión (PHP 5.6 a PHP 7) • Es trivial reconstruir el entorno • Si modificas el contenedor actualiza el Dockerfile
  • 53. ¿Por dónde continuar? • Documentación oficial (docs.docker.com) • Imágenes en Docker Hub (hub.docker.com) • The Docker book (dockerbook.com) • Búsqueda de Docker en YouTube • Crea contenedores para tus proyectos más sencillos • Usar docker para testeo y producción