class Object

Public Instance Methods

compose() click to toggle source
# File bin/rainbow, line 41
def compose
        compose = %{
version: '2'
services:
    frontend:
        image: {imagename}
        ports:
            - "8080"
        environment:
            - KEY=value
        volumes:
            - /home/user/data:/opt/rainbow
        networks:
            rainbow:
                aliases:
                    - frontend

    backend:
        image: {imagename}
        hostname: gateway
        environment:
            KEY: value
        networks:
            rainbow:
                aliases:
                    - backend
networks:
    rainbow:
        driver: bridge
}
        IO.write("docker-compose.yml", compose)
end
image() click to toggle source
# File bin/rainbow, line 21
def image
        yaml = IO.read("Rainbowfile")
    obj = YAML.load(yaml)

        dependencies = obj["dependencies"]
        run = obj["run"]

        binding.local_variable_set(:dependencies, dependencies)

        template = %{
FROM ubuntu:14.04
RUN apt-get update && apt-get install -y --force-yes <% dependencies.each do |dependency| %><%= dependency %> <% end %>\n
CMD <%= run %>
        }
        docker_file = ERB.new(template, 0, '>').result(binding).strip

        IO.write("Dockerfile", docker_file)
        system("docker build -t rainbow .")
end
init() click to toggle source

Create a template Rainbowfile

# File bin/rainbow, line 9
def init
  rainbow_file = %{
#Rainbowfile template
dependencies:
  - openjdk-7-jre
  - ruby

run: ruby /opt/rainbow/rainbow.rb
}
  IO.write("Rainbowfile", rainbow_file)
end
run() click to toggle source
# File bin/rainbow, line 74
def run
        system("docker-compose up -d")
end