El documento describe cómo usar AWS Elastic Beanstalk y Docker juntos para implementar aplicaciones de una manera fácil de configurar, desplegar, escalar y monitorear. Se explica cómo crear una imagen Docker, subirla a Docker Hub y luego configurar un servicio de Beanstalk para usar esa imagen, manejando automáticamente la infraestructura subyacente.
2. About me...
Mariano Germán Egui
Trabajo como desarrollador web
Me gustan las buenas prácticas
Me preocupa la seguridad de la aplicación
Participó de Meetups y voy a conferencias relacionadas a
desarrollo e Infraestructura
Soy 100% amateur, programo en muchos lenguajes y me
mande hacer el elefante de PHP
Twitter: @eguimariano
egui.mariano@gmail.com
@EguiMariano
4. Amazon Web Services (AWS) es una plataforma de servicios
cloud que ofrece potencia de cómputo, almacenamiento en
bases de datos, entrega de contenido y otra funcionalidad
para ayudar a la creación de aplicaciones o servicios más
flexibles, escalables y fiables.
¿Que es AWS?
Fuente: https://aws.amazon.com/es/what-is-aws/
@EguiMariano
5. ¿Que es Docker?
Docker permite empaquetar una aplicación con todas sus
dependencias en una unidad estandarizada para el desarrollo
de software.
Fuente: https://www.docker.com/what-docker
@EguiMariano
6. AWS Elastic Beanstalk
Con AWS Elastic Beanstalk, puede implementar y gestionar
aplicaciones en la nube de AWS de forma rápida sin
preocuparse por la infraestructura que ejecuta estas
aplicaciones. AWS Elastic Beanstalk reduce la complejidad de
la gestión sin restringir la elección o el control. Sólo
tiene que cargar su aplicación y AWS Elastic Beanstalk
gestiona automáticamente los detalles de aprovisionamiento
de capacidad, equilibrio de carga, la escala y vigilancia de
la salud de la aplicación.
Fuente: https://aws.amazon.com/en/documentation/elastic-beanstalk/
@EguiMariano
7. Beanstalk nos permite subir nuestras aplicaciones desentendiendo nos de su ambiente
(infraestructura) de ejecución, estrategia de escalabilidad y monitoreo. Podemos subir
directamente nuestro código PHP, Java, Node.Js, Python, Ruby e incluso “.NET”.
¿Pero es lo que realmente queremos?
Los que trabajamos en el caos (con VIM en producción) sabemos que la
pérdida de performance, la posible caída de nuestra aplicación o la
congestión de nuestro network, no siempre es la consecuencia de
nuestro código, la coexistencia con proceso en el servidor (BATCH) y la
configuración del mismo, nos recuerda que nuestra aplicación es
dependiente de nuestro ambiente (infraestructura).
@EguiMariano
9. ● Contiene la aplicación
con su ambiente (code,
runtime, system tools,
system libraries)
Nos garantiza que siempre se
ejecutará la misma aplicación,
independientemente del entorno en el
que se está ejecutando.
Beanstalk
● Configurable
● Sencillez para desplegar
● Facilidades para escalar
● Herramientas de monitoreo
Nos garantiza que nuestra aplicación
este uptime y performe en caso de
aumentar nuestro tráfico.
Docker
@EguiMariano
10. Beanstalk + Docker
● Facil de configurar
● Facil de desplegar
● Facil de escalar
● Facil de monitorear
● Garantiza el ambiente de ejecución
@EguiMariano
11. OK, let's go!
1. Instalar Docker
2. Crea una imagen de Docker
3. Subir imagen a Docker Hub
1. Crea una cuenta de AWS
2. Crea y configura un
servicio de Beanstalk
3. Adjunta el JSON que invoca
la imagen de Docker Hub
@EguiMariano
https://github.com/megui88/demo-docker
12. Instalar Docker, crear y subir una imagen a Docker Hub
~➤ sudo apt-get install docker.io
~➤ echo '
FROM ubuntu:14.04.4
MAINTAINER Mariano Egui <egui.mariano@gmail.com>
RUN apt-get update
RUN apt-get -y install apache2
EXPOSE 80
CMD /usr/sbin/apache2ctl -D FOREGROUND
' > Dockerfile
~➤ sudo docker build -t megui88/demo-apache .
Sending build context to Docker daemon
Step 0 : FROM ubuntu:14.04.4
14.04.4: Pulling from ubuntu
c5bd5ad78820: Downloading [=======================> ]
55.67 MB/65.69 MB
c0f170469eea: Download complete
be70b523781c: Download complete
~➤ sudo docker images
~➤ sudo docker run -p 8080:80 -ti megui88/demo-apache
~➤ sudo docker tag imageID megui88/demo-apache:latest
~➤ sudo docker push megui88/demo-apache:latest
The push refers to a repository [megui88/demo-apache] (len: 1)
bfd32ee9f6f3: Image push failed
Please login prior to push:
Username:
megui88
Password:
Email: egui.mariano@gmail.com
WARNING: login credentials saved in /home/megui/.dockercfg.
Login Succeeded
The push refers to a repository [megui88/demo-apache] (len: 1)
bfd32ee9f6f3: Image already exists
a800bc297d49: Image successfully pushed
a6ee75b6a5af: Pushing [==> ] 262.1 kB/5.274 MB
https://hub.docker.com/r/megui88/demo-apache/
@EguiMariano