SlideShare una empresa de Scribd logo
1 de 44
Dockeriza Rails
Miguel Savignano
#madridrb
#TCKMeetupRB
The cocktail
Miguel Savignano
@MigueMasx
We are hiring!
@The_Cocktail
Dockeriza Rails
Índice
1. Construir imagen para desarrollo
1. Optimizar construcción de la imagen
1. Optimizar peso de la imagen
1. Configurar entorno de producción
1. Pruebas en Kubernetes (minikube)
Entornos
Development Test Production
Entorno de desarrollo Development ProductionTest
Entorno de desarrollo
● No necesita webserver (nginx)
● Los assets no se minifican (webpack-dev-server)
● Recarga de código sin reiniciar Rails
● Servicios externos (database, redis, etc...)
Development ProductionTest
Diferencias principales en nuestro entorno de desarrollo
Dockerfile Development ProductionTest
Dockerfile
ENV environments variables
Image
Tiempo de compilación
ARG (build arguments)
Container
Tiempo de ejecución
VOLUME persisted data
.dockerignore
Development ProductionTest
Construir imagen de Docker
app
assets
controllers
models
Docker compose Development ProductionTest
¿ localhost ?
Rails console
DebuggerRails generators
Database config
Development ProductionTest
Entorno de Test o CI
Develop Test
Deploy
Development ProductionTest
Capas de una imagen
Base
Librerias del sistema
Instalar gemas
Instalar módulos javascript
Copiar código fuente
Development ProductionTest
Capas de una imagen
Base
Librerias del sistema
Instalar gemas
Instalar módulos javascript
Copiar código fuente
Development ProductionTest
Compilación Development ProductionTest
Capas de cache
Base
Librerias del sistema
Copiar Gemfile.lock
Copiar package-lock.json
Instalar gemas
Instalar módulos javascript
Copiar código fuente
Development ProductionTest
Compilación rápida Development ProductionTestDevelopment ProductionTest
Construir imagen de Docker
● Crear .dockerignore (.gitignore)
● Utilizar una imagen base oficial
● Usar build arguments (ARG) para nuestras contraseñas
● Instalar o configurar dependencias del sistema
● Crear una capa de cache de las librerías (Gemfile.lock, package-lock.json)
● Copiar código fuente
Pasos necesarios para crear una Imagen consistente.
Development ProductionTestDevelopment ProductionTest
Entorno de producción Development ProductionTestDevelopment ProductionTest
Optimizar peso de la imagen
906 MB431 MB
Development ProductionTestDevelopment ProductionTest
Dockerfile
Base
Librerias del sistema
Copiar código fuente
Compilar assets
Cache de librerías
906 MB
Development ProductionTestDevelopment ProductionTest
Historial de compilación Development ProductionTestDevelopment ProductionTest
Docker multistage Development ProductionTestDevelopment ProductionTest
Docker multistage
Base
Librerias del sistema
Copiar gemas
Copiar Nodejs
431 MB
Copiar código fuente
Development ProductionTestDevelopment ProductionTest
Desplegar aplicación Rails Development ProductionTestDevelopment ProductionTest
Desplegar aplicación Rails
?????
Development ProductionTestDevelopment ProductionTest
Rails Kubernetes
Development ProductionTestDevelopment ProductionTest
● Aplicar entorno de producción en Rails
● Compilar assets
● No instalar gemas de desarrollo o test
● Gestión de logs
● Usuario no root
● Webserver para assets (nginx)
Entorno de producción Development ProductionTestDevelopment ProductionTest
Configuraciones que no pueden faltar en nuestro entorno de producción.
Gestión de logs
logs/production.log
Development ProductionTestDevelopment ProductionTest
Gestión de logs
logs/production.log
RAILS_LOG_TO_STDOUT=true
Development ProductionTestDevelopment ProductionTest
Webserver para assets
<html>
{
title: ‘title’,
body: ‘body’
}
Development ProductionTestDevelopment ProductionTest
Nginx Dockerfile
Base
nginx/conf.d/default.conf
Copiar Rails assets
Development ProductionTestDevelopment ProductionTest
Rails Dockerfile
Variables de entorno producción
Librerias del sistema
Copiar código fuente
Compilar assets
Caché de librerías de producción
Base
Usuario no root
Development ProductionTestDevelopment ProductionTest
Build and Push images
Development ProductionTestDevelopment ProductionTest
Listo para desplegar
Development ProductionTestDevelopment ProductionTest
Listo para desplegar
Development ProductionTestDevelopment ProductionTest
Kubernetes
Ingress
Services
Deployments
Pods
Development ProductionTestDevelopment ProductionTest
Docker stack
Kubernetes
Rails Nginx
Postgresql
Redis
Rails worker
Development ProductionTestDevelopment ProductionTest
Demo
Código fuente: https://github.com/MiguelSavignano/dockerize-rails.git
Imagen Rails: https://hub.docker.com/r/devmasx/dockerize-rails-production
Imagen Nginx: https://hub.docker.com/r/devmasx/dockerize-nginx-production
● https://github.com/FuriKuri/docker-best-practices
● https://kubernetes.io/docs/concepts/
● https://www.youtube.com/watch?v=kG2vxYn547E
● https://blog.codeship.com/running-rails-development-environment-docker/
Fin
Gracias
¿Alguna Pregunta?

Más contenido relacionado

La actualidad más candente

Presentación Docker
Presentación DockerPresentación Docker
Presentación DockerITPAMI
 
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
 
Kubernetes technical overview and our experience at Restorando :: Buenos Aire...
Kubernetes technical overview and our experience at Restorando :: Buenos Aire...Kubernetes technical overview and our experience at Restorando :: Buenos Aire...
Kubernetes technical overview and our experience at Restorando :: Buenos Aire...Restorando
 
Docker para aplicaciones angular
Docker para aplicaciones angularDocker para aplicaciones angular
Docker para aplicaciones angularGermán Küber
 
NetRaf 2017 - La plataforma .NET en el 2017
NetRaf 2017 - La plataforma .NET en el 2017NetRaf 2017 - La plataforma .NET en el 2017
NetRaf 2017 - La plataforma .NET en el 2017Diego Bersano
 
BEEVA | Introducción a Docker
BEEVA | Introducción a DockerBEEVA | Introducción a Docker
BEEVA | Introducción a DockerBEEVA_es
 
Docker introducción - Flisol 2015 Huancayo
Docker introducción - Flisol 2015 HuancayoDocker introducción - Flisol 2015 Huancayo
Docker introducción - Flisol 2015 HuancayoMario IC
 
Solapas principales Ver(solapa activa) Editar Gestionar present...
 Solapas principales      Ver(solapa activa)     Editar     Gestionar present... Solapas principales      Ver(solapa activa)     Editar     Gestionar present...
Solapas principales Ver(solapa activa) Editar Gestionar present...Software Guru
 
Software libre para videoconferencias
Software libre para videoconferenciasSoftware libre para videoconferencias
Software libre para videoconferenciasMicael Gallego
 
Cloud Native Mexico - Introducción a Kubernetes
Cloud Native Mexico - Introducción a KubernetesCloud Native Mexico - Introducción a Kubernetes
Cloud Native Mexico - Introducción a KubernetesDomingo Suarez Torres
 

La actualidad más candente (20)

Presentación Docker
Presentación DockerPresentación Docker
Presentación Docker
 
Docker containers-itb-2021
Docker containers-itb-2021Docker containers-itb-2021
Docker containers-itb-2021
 
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
 
Fury DevopsConf 2015
Fury DevopsConf 2015Fury DevopsConf 2015
Fury DevopsConf 2015
 
Contenedores como Servicio con Docker
Contenedores como Servicio con DockerContenedores como Servicio con Docker
Contenedores como Servicio con Docker
 
DevOps+[Chef/Docker]
 DevOps+[Chef/Docker] DevOps+[Chef/Docker]
DevOps+[Chef/Docker]
 
Kubernetes technical overview and our experience at Restorando :: Buenos Aire...
Kubernetes technical overview and our experience at Restorando :: Buenos Aire...Kubernetes technical overview and our experience at Restorando :: Buenos Aire...
Kubernetes technical overview and our experience at Restorando :: Buenos Aire...
 
Introducción a Docker
Introducción a DockerIntroducción a Docker
Introducción a Docker
 
Docker para aplicaciones angular
Docker para aplicaciones angularDocker para aplicaciones angular
Docker para aplicaciones angular
 
NetRaf 2017 - La plataforma .NET en el 2017
NetRaf 2017 - La plataforma .NET en el 2017NetRaf 2017 - La plataforma .NET en el 2017
NetRaf 2017 - La plataforma .NET en el 2017
 
Docker desde cero
Docker desde ceroDocker desde cero
Docker desde cero
 
Introduction to docker. Stratio
Introduction to docker. StratioIntroduction to docker. Stratio
Introduction to docker. Stratio
 
BEEVA | Introducción a Docker
BEEVA | Introducción a DockerBEEVA | Introducción a Docker
BEEVA | Introducción a Docker
 
Maven
MavenMaven
Maven
 
Introducción a ndk
Introducción a ndkIntroducción a ndk
Introducción a ndk
 
Docker introducción - Flisol 2015 Huancayo
Docker introducción - Flisol 2015 HuancayoDocker introducción - Flisol 2015 Huancayo
Docker introducción - Flisol 2015 Huancayo
 
Solapas principales Ver(solapa activa) Editar Gestionar present...
 Solapas principales      Ver(solapa activa)     Editar     Gestionar present... Solapas principales      Ver(solapa activa)     Editar     Gestionar present...
Solapas principales Ver(solapa activa) Editar Gestionar present...
 
Software libre para videoconferencias
Software libre para videoconferenciasSoftware libre para videoconferencias
Software libre para videoconferencias
 
Cloud Native Mexico - Introducción a Kubernetes
Cloud Native Mexico - Introducción a KubernetesCloud Native Mexico - Introducción a Kubernetes
Cloud Native Mexico - Introducción a Kubernetes
 
Presentación Docker
Presentación DockerPresentación Docker
Presentación Docker
 

Similar a Dokerize rails

Dynamics saturday madrid 2018 bc-on-docker - jakub
Dynamics saturday madrid 2018   bc-on-docker - jakubDynamics saturday madrid 2018   bc-on-docker - jakub
Dynamics saturday madrid 2018 bc-on-docker - jakubDemian Raschkovan
 
Microservices: Ya funciona en mi máquina… Y en producción, ¿qué?
Microservices: Ya funciona en mi máquina… Y en producción, ¿qué?Microservices: Ya funciona en mi máquina… Y en producción, ¿qué?
Microservices: Ya funciona en mi máquina… Y en producción, ¿qué?Plain Concepts
 
Docker 10 02_18
Docker 10 02_18Docker 10 02_18
Docker 10 02_18enyert
 
Infrastructure as Code
Infrastructure as CodeInfrastructure as Code
Infrastructure as CodeAngel Nuñez
 
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
 
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
 
Corriendo SQL Server en Docker
Corriendo SQL Server en DockerCorriendo SQL Server en Docker
Corriendo SQL Server en DockerJavier Villegas
 
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
 
Web App Container
Web App ContainerWeb App Container
Web App ContainerCDS
 
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
 
Breve introducción práctica al DevOps - (es) 2021_03_18
Breve introducción práctica al DevOps -  (es) 2021_03_18Breve introducción práctica al DevOps -  (es) 2021_03_18
Breve introducción práctica al DevOps - (es) 2021_03_18Young Suk Ahn Park
 
Docker - Sysmana 2014
Docker - Sysmana 2014Docker - Sysmana 2014
Docker - Sysmana 2014quaip
 
Sistemas de publicación de noticias y contenidos multimedia Web para Medios d...
Sistemas de publicación de noticias y contenidos multimedia Web para Medios d...Sistemas de publicación de noticias y contenidos multimedia Web para Medios d...
Sistemas de publicación de noticias y contenidos multimedia Web para Medios d...Leonardo J. Caballero G.
 
Iniciando con containers en azure
Iniciando con containers en azureIniciando con containers en azure
Iniciando con containers en azureOscar Gensollen
 

Similar a Dokerize rails (20)

Dynamics saturday madrid 2018 bc-on-docker - jakub
Dynamics saturday madrid 2018   bc-on-docker - jakubDynamics saturday madrid 2018   bc-on-docker - jakub
Dynamics saturday madrid 2018 bc-on-docker - jakub
 
Microservices: Ya funciona en mi máquina… Y en producción, ¿qué?
Microservices: Ya funciona en mi máquina… Y en producción, ¿qué?Microservices: Ya funciona en mi máquina… Y en producción, ¿qué?
Microservices: Ya funciona en mi máquina… Y en producción, ¿qué?
 
ATICA DevOps
ATICA DevOpsATICA DevOps
ATICA DevOps
 
Docker 10 02_18
Docker 10 02_18Docker 10 02_18
Docker 10 02_18
 
Infrastructure as Code
Infrastructure as CodeInfrastructure as Code
Infrastructure as Code
 
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
 
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
 
Fury devops conf (1)
Fury devops conf (1)Fury devops conf (1)
Fury devops conf (1)
 
Corriendo SQL Server en Docker
Corriendo SQL Server en DockerCorriendo SQL Server en Docker
Corriendo SQL Server en Docker
 
Docker ECS en AWS
Docker ECS en AWS Docker ECS en AWS
Docker ECS en AWS
 
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...
 
Jug málaga docker 101 - final
Jug málaga   docker 101 - finalJug málaga   docker 101 - final
Jug málaga docker 101 - final
 
Curso gratuito de Docker
Curso gratuito de DockerCurso gratuito de Docker
Curso gratuito de Docker
 
Web App Container
Web App ContainerWeb App Container
Web App Container
 
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]
 
Dockeriza tu SQL Server
Dockeriza tu SQL ServerDockeriza tu SQL Server
Dockeriza tu SQL Server
 
Breve introducción práctica al DevOps - (es) 2021_03_18
Breve introducción práctica al DevOps -  (es) 2021_03_18Breve introducción práctica al DevOps -  (es) 2021_03_18
Breve introducción práctica al DevOps - (es) 2021_03_18
 
Docker - Sysmana 2014
Docker - Sysmana 2014Docker - Sysmana 2014
Docker - Sysmana 2014
 
Sistemas de publicación de noticias y contenidos multimedia Web para Medios d...
Sistemas de publicación de noticias y contenidos multimedia Web para Medios d...Sistemas de publicación de noticias y contenidos multimedia Web para Medios d...
Sistemas de publicación de noticias y contenidos multimedia Web para Medios d...
 
Iniciando con containers en azure
Iniciando con containers en azureIniciando con containers en azure
Iniciando con containers en azure
 

Último

Act#3.2_Investigación_Bibliográfica_Comunicación_Equipo.pdf
Act#3.2_Investigación_Bibliográfica_Comunicación_Equipo.pdfAct#3.2_Investigación_Bibliográfica_Comunicación_Equipo.pdf
Act#3.2_Investigación_Bibliográfica_Comunicación_Equipo.pdfXimenaGonzlez95
 
Felipe González - eCommerce Day Chile 2024
Felipe González - eCommerce Day Chile 2024Felipe González - eCommerce Day Chile 2024
Felipe González - eCommerce Day Chile 2024eCommerce Institute
 
PRESENTACION EN SST, plan de trabajo del sistema de seguridad y salud en el t...
PRESENTACION EN SST, plan de trabajo del sistema de seguridad y salud en el t...PRESENTACION EN SST, plan de trabajo del sistema de seguridad y salud en el t...
PRESENTACION EN SST, plan de trabajo del sistema de seguridad y salud en el t...angierangel29072017
 
Presupuesto por Resultados de Seguridad Ciudadana .pptx
Presupuesto por Resultados de Seguridad Ciudadana .pptxPresupuesto por Resultados de Seguridad Ciudadana .pptx
Presupuesto por Resultados de Seguridad Ciudadana .pptxhugogabrielac1
 
Francisco Irarrazaval, Marcos Pueyrredon - eCommerce Day Chile 2024
Francisco Irarrazaval, Marcos Pueyrredon - eCommerce Day Chile 2024Francisco Irarrazaval, Marcos Pueyrredon - eCommerce Day Chile 2024
Francisco Irarrazaval, Marcos Pueyrredon - eCommerce Day Chile 2024eCommerce Institute
 
Sebastián Iturriaga - eCommerce Day Chile 2024
Sebastián Iturriaga - eCommerce Day Chile 2024Sebastián Iturriaga - eCommerce Day Chile 2024
Sebastián Iturriaga - eCommerce Day Chile 2024eCommerce Institute
 
Pablo Scasso - eCommerce Day Chile 2024
Pablo Scasso -  eCommerce Day Chile 2024Pablo Scasso -  eCommerce Day Chile 2024
Pablo Scasso - eCommerce Day Chile 2024eCommerce Institute
 
Expo Construir 2024 agenda-workshops (2).pdf
Expo Construir 2024 agenda-workshops (2).pdfExpo Construir 2024 agenda-workshops (2).pdf
Expo Construir 2024 agenda-workshops (2).pdfTamanaTablada
 
Guiaparacrearslideshareticsvirtual2024abril
Guiaparacrearslideshareticsvirtual2024abrilGuiaparacrearslideshareticsvirtual2024abril
Guiaparacrearslideshareticsvirtual2024abriljulianagomezm2
 
Nicolás von Graevenitz, Rodrigo Guajardo, Fabián Müller, Alberto Banano Pardo...
Nicolás von Graevenitz, Rodrigo Guajardo, Fabián Müller, Alberto Banano Pardo...Nicolás von Graevenitz, Rodrigo Guajardo, Fabián Müller, Alberto Banano Pardo...
Nicolás von Graevenitz, Rodrigo Guajardo, Fabián Müller, Alberto Banano Pardo...eCommerce Institute
 
Mercedes Tomas, Florencia Bianchini - eCommerce Day Chile 2024
Mercedes Tomas, Florencia Bianchini - eCommerce Day Chile 2024Mercedes Tomas, Florencia Bianchini - eCommerce Day Chile 2024
Mercedes Tomas, Florencia Bianchini - eCommerce Day Chile 2024eCommerce Institute
 
José Ignacio Calle, Nathalie Jacobs - eCommerce Day Chile 2024
José Ignacio Calle, Nathalie Jacobs - eCommerce Day Chile 2024José Ignacio Calle, Nathalie Jacobs - eCommerce Day Chile 2024
José Ignacio Calle, Nathalie Jacobs - eCommerce Day Chile 2024eCommerce Institute
 
Alexander Rubilar, Enzo Tapia - eCommerce Day Chile 2024
Alexander Rubilar, Enzo Tapia - eCommerce Day Chile 2024Alexander Rubilar, Enzo Tapia - eCommerce Day Chile 2024
Alexander Rubilar, Enzo Tapia - eCommerce Day Chile 2024eCommerce Institute
 
Suiwen He - eCommerce Day Chile 2024
Suiwen He  -  eCommerce  Day  Chile 2024Suiwen He  -  eCommerce  Day  Chile 2024
Suiwen He - eCommerce Day Chile 2024eCommerce Institute
 
Enrique Amarista Graterol - eCommerce Day Chile 2024
Enrique Amarista Graterol - eCommerce Day Chile 2024Enrique Amarista Graterol - eCommerce Day Chile 2024
Enrique Amarista Graterol - eCommerce Day Chile 2024eCommerce Institute
 

Último (15)

Act#3.2_Investigación_Bibliográfica_Comunicación_Equipo.pdf
Act#3.2_Investigación_Bibliográfica_Comunicación_Equipo.pdfAct#3.2_Investigación_Bibliográfica_Comunicación_Equipo.pdf
Act#3.2_Investigación_Bibliográfica_Comunicación_Equipo.pdf
 
Felipe González - eCommerce Day Chile 2024
Felipe González - eCommerce Day Chile 2024Felipe González - eCommerce Day Chile 2024
Felipe González - eCommerce Day Chile 2024
 
PRESENTACION EN SST, plan de trabajo del sistema de seguridad y salud en el t...
PRESENTACION EN SST, plan de trabajo del sistema de seguridad y salud en el t...PRESENTACION EN SST, plan de trabajo del sistema de seguridad y salud en el t...
PRESENTACION EN SST, plan de trabajo del sistema de seguridad y salud en el t...
 
Presupuesto por Resultados de Seguridad Ciudadana .pptx
Presupuesto por Resultados de Seguridad Ciudadana .pptxPresupuesto por Resultados de Seguridad Ciudadana .pptx
Presupuesto por Resultados de Seguridad Ciudadana .pptx
 
Francisco Irarrazaval, Marcos Pueyrredon - eCommerce Day Chile 2024
Francisco Irarrazaval, Marcos Pueyrredon - eCommerce Day Chile 2024Francisco Irarrazaval, Marcos Pueyrredon - eCommerce Day Chile 2024
Francisco Irarrazaval, Marcos Pueyrredon - eCommerce Day Chile 2024
 
Sebastián Iturriaga - eCommerce Day Chile 2024
Sebastián Iturriaga - eCommerce Day Chile 2024Sebastián Iturriaga - eCommerce Day Chile 2024
Sebastián Iturriaga - eCommerce Day Chile 2024
 
Pablo Scasso - eCommerce Day Chile 2024
Pablo Scasso -  eCommerce Day Chile 2024Pablo Scasso -  eCommerce Day Chile 2024
Pablo Scasso - eCommerce Day Chile 2024
 
Expo Construir 2024 agenda-workshops (2).pdf
Expo Construir 2024 agenda-workshops (2).pdfExpo Construir 2024 agenda-workshops (2).pdf
Expo Construir 2024 agenda-workshops (2).pdf
 
Guiaparacrearslideshareticsvirtual2024abril
Guiaparacrearslideshareticsvirtual2024abrilGuiaparacrearslideshareticsvirtual2024abril
Guiaparacrearslideshareticsvirtual2024abril
 
Nicolás von Graevenitz, Rodrigo Guajardo, Fabián Müller, Alberto Banano Pardo...
Nicolás von Graevenitz, Rodrigo Guajardo, Fabián Müller, Alberto Banano Pardo...Nicolás von Graevenitz, Rodrigo Guajardo, Fabián Müller, Alberto Banano Pardo...
Nicolás von Graevenitz, Rodrigo Guajardo, Fabián Müller, Alberto Banano Pardo...
 
Mercedes Tomas, Florencia Bianchini - eCommerce Day Chile 2024
Mercedes Tomas, Florencia Bianchini - eCommerce Day Chile 2024Mercedes Tomas, Florencia Bianchini - eCommerce Day Chile 2024
Mercedes Tomas, Florencia Bianchini - eCommerce Day Chile 2024
 
José Ignacio Calle, Nathalie Jacobs - eCommerce Day Chile 2024
José Ignacio Calle, Nathalie Jacobs - eCommerce Day Chile 2024José Ignacio Calle, Nathalie Jacobs - eCommerce Day Chile 2024
José Ignacio Calle, Nathalie Jacobs - eCommerce Day Chile 2024
 
Alexander Rubilar, Enzo Tapia - eCommerce Day Chile 2024
Alexander Rubilar, Enzo Tapia - eCommerce Day Chile 2024Alexander Rubilar, Enzo Tapia - eCommerce Day Chile 2024
Alexander Rubilar, Enzo Tapia - eCommerce Day Chile 2024
 
Suiwen He - eCommerce Day Chile 2024
Suiwen He  -  eCommerce  Day  Chile 2024Suiwen He  -  eCommerce  Day  Chile 2024
Suiwen He - eCommerce Day Chile 2024
 
Enrique Amarista Graterol - eCommerce Day Chile 2024
Enrique Amarista Graterol - eCommerce Day Chile 2024Enrique Amarista Graterol - eCommerce Day Chile 2024
Enrique Amarista Graterol - eCommerce Day Chile 2024
 

Dokerize rails

Notas del editor

  1. Esta no es la típica charla de docker, para ver las ventajas o explicar como funciona docker, me enfocare en explicar las técnicas necesarias para poder construir una buena imagen de docker y poder desplegarla en kubernetes.
  2. Objetivos de la sesión o índice
  3. En un entorno de desarrollo queremos que sea igual para todos los desarrolladores, mismas versiones y entorno. Ruby tiene herramientas para que en el entorno de desarrollo ej gestor de versiones de ruby, gestor de librerías bundle. Pero cada vez nuestras aplicaciones son más complejas y se vuelve más complicado que todos los desarrolladores tengamos el mismo entorno. En the cocktail usamos docker para poder levantar un entorno de desarrollo de manera más estándar y fácil.
  4. Dockerfile es nuestra receta para crear nuestro contenedor de rails, pero antes tenemos que ver cómo se construye una imagen de rails
  5. contexto de docker, build arguments y docker ignore, no se pueden usar volúmenes al construir imagen. docker run -it dockerize-rails bash
  6. Con docker compose podemos aplicar la receta del Dockerfile además de conectar una base de datos y tener recarga de código usando volumenes
  7. Pero no todo funciona a la primera, siempre nos podemos encontrar con algún problema
  8. simulamos un entorno de producción y Rails ya no está en nuestro localhost, utilizar las herramientas de desarrollo de rails son un poco más complicadas. Personalmente creo que tiene más ventajas que desventajas utilizar docker en local. sobretodo cuando tenemos un stack complicado.
  9. Hemos visto cómo construir una imagen de desarrollo pero queremos que al construir una imagen de docker se haga de forma automática y más estándar. para esto podemos usar cualquier servicio de integración continua para compilar nuestra imagen.
  10. Pero antes me gustaría entrar en detalle de cómo funcionan las capas de docker. Creamos un dockerfile de forma rápida,
  11. Para acelerar esta compilación de imagen es mejor agregar una capa donde tendremos las gemas y módulos de javascript, para ello debemos copiar solo los ficheros con las versiones de las librerias. así cuando cambiamos nuevo código las gemas estarán en una capa anterior.
  12. La idea es tener una imagen con toda la configuración y dependencias, aplicamos lo que aprendimos de cómo construir la imagen en desarrollo siguiendo estos pasos.
  13. Aunque ruby no sea un lenguaje compilado, podemos separar todas las dependencias que necesitamos para construir gemas y assets, y solo lo que necesitamos para su ejecución.
  14. Usando docker multi stage conseguimos que la imagen es casi la mitad. con multi stage nos quitamos las librerías como build essentials curl git y podemos seleccionar solo lo que necesitemos en runtime. 475MB menos
  15. La mayoría de aplicaciones rails las podemos desplegar usando capistrano que es una gema que nos ayuda con todo lo referente a desplegar nuestra aplicación en un entorno productivo.
  16. Capistrano es una gema y nos abstrae de muchos detalles de como despliega una aplicación rails. control de versiones, reinicio de servidor, instalación de dependencias.
  17. Aunque no tengamos una gema que nos abstraiga de todos estos pasos, kubernetes hace casi todas las tareas que podíamos hacer con capistrano, además la configuración y dependencias de nuestra aplicación estarán en la imagen de docker. capistrano si nos configuraba la aplicación rails para produccion
  18. Nuestra aplicación rails necesita una configuración especial para ejecutarse en el entorno de producción.
  19. Por defecto rails escribe los logs en un fichero, si tenemos nuestra aplicación en varias maquinas tendremos que gestionar estos ficheros.
  20. Kubernetes nos provee una forma de gestionar los logs si los imprimimos por stdout, además los proveedores de cloud de kubernetes tienen soluciones ya integradas.
  21. Por defecto Rails en modo producción no sirve los assets, necesitamos un web server como nginx para servir estos assets, ademas de que nginx nos ayudará a controlar las peticiones que se harán a nuestro backend rails.
  22. Podemos usar Docker Multistage para compilar los assets de la imagen de rails a una imagen de nginx, así nuestra imagen de nginx tendrá los assets de rails y los podrá servir fácilmente. Otra manera que nginx sirva los assets puede ser atraves de sistema de ficheros como volumenes, pero creo que es más consistente y mejor práctica crear una imagen de nginx.
  23. Este sería el Dockerfile final para construir nuestra imagen de producción con todas las configuraciones necesarias para producción
  24. No quiero profundizar mucho de cómo funciona kubernetes, pero estos conceptos son claves para poder desplegar nuestra aplicación rails