Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Manejando Docker containers con Ruby y backticks

Manejando Docker containers con Ruby y backticks

Cómo usar Ruby para ejecutar comandos de shell directamente en containers de Docker.

Gustavo Leon

August 19, 2016
Tweet

More Decks by Gustavo Leon

Other Decks in Programming

Transcript

  1. @hpneo • 26 años • Desarrollador Ruby desde 2011 •

    CTO en CodePicnic desde 2015 • #6 en Ruby en Perú, según GitHub Awards
  2. 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"
  3. %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"
  4. system • Ejecuta el comando pero solo retorna true si

    se ejecutó correctamente o false si da error. directory = 'app' files = system("ls #{directory}") # … # => true
  5. 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}") # …
  6. 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.
  7. 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.
  8. Docker • Docker tiene un comando, llamado docker, que permite

    controlar las imágenes y contenedores que existen en nuestra máquina.
  9. Docker en CodePicnic • CodePicnic permite crear pequeñas máquinas virtuales

    (llamadas consolas) utilizando Docker, para editar y ejecutar código desde el navegador.
  10. 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.
  11. 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.
  12. Obtener el estado de un contenedor state = `docker inspect

    -f '{{json .State}}' #{@container_name}`.chomp JSON.parse(state)
  13. 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 ":"' `
  14. Ejecutar un comando dentro de un contenedor output = `docker

    exec -i #{@container_name} bash -c 'ls "#{@path}"'`