Slide 1

Slide 1 text

Manejando Docker containers con Ruby y backticks Ejecutando comandos en Ruby

Slide 2

Slide 2 text

@hpneo • 26 años • Desarrollador Ruby desde 2011 • CTO en CodePicnic desde 2015 • #6 en Ruby en Perú, según GitHub Awards

Slide 3

Slide 3 text

Ejecutando comandos en Ruby Backticks, %x, system y exec

Slide 4

Slide 4 text

Backticks (``) • Es la forma más sencilla de ejecutar comandos. • Devuelve el resultado del comando ejecutado en forma de cadena. • Permite interpolar cadenas. files = `ls` # => "Capfile\nGemfile\nGemfile.lock\nREA DME.md\nREADME.rdoc\nRakefile\napp\n bin\nconfig\nconfig.ru\ncontainer_po rts\ncontainer_ssl\ndb\ndoc\ndocker\ ngulpfile.js\nicons.pxm\nlib\nlog\nm ain_files\nmodels\npem\npublic\nscri pt\nsharejs.js\nssl\ntest\ntmp\nupst art_service\nvendor\nvhost\n"

Slide 5

Slide 5 text

%x • Hace lo mismo que los backticks, pero usa delimitadores al igual que %q o %w. • Así como los backticks, permite interpolar cadenas. directory = 'app' files = %x{ls #{directory}} # => "admin\nassets\nchannels\nc ontrollers\nhelpers\njobs\n mailers\nmodels\nserializer s\nviews\nworkers\n"

Slide 6

Slide 6 text

system • Ejecuta el comando pero solo retorna true si se ejecutó correctamente o false si da error. directory = 'app' files = system("ls #{directory}") # … # => true

Slide 7

Slide 7 text

exec • Ejecuta el comando y reemplaza el proceso actual por el proceso generado por el comando. • Con exec se termina la ejecución de Ruby e imprime el resultado del comando. directory = 'app' files = exec("ls #{directory}") # …

Slide 8

Slide 8 text

CodePicnic ❤ Docker ¿Qué es Docker y cómo lo usamos?

Slide 9

Slide 9 text

Docker • Es una plataforma que permite correr máquinas virtuales ligeras (llamados containers o contenedores). • Podemos usarlo para levantar ambientes de desarrollo, pruebas o producción.

Slide 10

Slide 10 text

Docker • Podemos crear imágenes en un momento determinado y crear miles de copias a partir de ese punto en el tiempo. • También podemos crear imágenes a partir de recetas, llamadas Dockerfiles.

Slide 11

Slide 11 text

Docker • Docker tiene un comando, llamado docker, que permite controlar las imágenes y contenedores que existen en nuestra máquina.

Slide 12

Slide 12 text

Docker en CodePicnic • CodePicnic permite crear pequeñas máquinas virtuales (llamadas consolas) utilizando Docker, para editar y ejecutar código desde el navegador.

Slide 13

Slide 13 text

Docker en CodePicnic • Cada consola tiene una interfaz gráfica con un sidebar con archivos, un editor de código y una terminal conectada a su propio contenedor de Docker.

Slide 14

Slide 14 text

Docker en CodePicnic • Para integrar las consolas con sus respectivos contenedores necesitamos utilizar la API de Docker en sus dos formas: REST API y el comando docker.

Slide 15

Slide 15 text

Iniciar un contenedor system("docker start #{@container_name}")

Slide 16

Slide 16 text

Detener un contenedor system("docker stop #{@container_name}")

Slide 17

Slide 17 text

Obtener el estado de un contenedor state = `docker inspect -f '{{json .State}}' #{@container_name}`.chomp JSON.parse(state)

Slide 18

Slide 18 text

Listar archivos dentro de un contenedor con sus MIME types files_list = `docker exec -i #{@container_name} bash -c 'cd "/app/#{@path}" && ls -A1 > /tmp/file.txt && file --mime-type -f /tmp/file.txt -F ":"' `

Slide 19

Slide 19 text

Ejecutar un comando dentro de un contenedor output = `docker exec -i #{@container_name} bash -c 'ls "#{@path}"'`

Slide 20

Slide 20 text

¡Gracias! [email protected] github.com/hpneo github.com/CodePicnic