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.

10a0e11595c04259f746f31bf0715e4b?s=128

Gustavo Leon

August 19, 2016
Tweet

Transcript

  1. Manejando Docker containers con Ruby y backticks Ejecutando comandos en

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

    CTO en CodePicnic desde 2015 • #6 en Ruby en Perú, según GitHub Awards
  3. Ejecutando comandos en Ruby Backticks, %x, system y exec

  4. 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"
  5. %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"
  6. system • Ejecuta el comando pero solo retorna true si

    se ejecutó correctamente o false si da error. directory = 'app' files = system("ls #{directory}") # … # => true
  7. 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}") # …
  8. CodePicnic ❤ Docker ¿Qué es Docker y cómo lo usamos?

  9. 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.
  10. 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.
  11. Docker • Docker tiene un comando, llamado docker, que permite

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

    (llamadas consolas) utilizando Docker, para editar y ejecutar código desde el navegador.
  13. 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.
  14. 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.
  15. Iniciar un contenedor system("docker start #{@container_name}")

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

  17. Obtener el estado de un contenedor state = `docker inspect

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

    exec -i #{@container_name} bash -c 'ls "#{@path}"'`
  20. ¡Gracias! gustavo@codepicnic.com github.com/hpneo github.com/CodePicnic