Coder Social home page Coder Social logo

www3838438 / foxy Goto Github PK

View Code? Open in Web Editor NEW

This project forked from davidholiday/foxy

0.0 2.0 0.0 207 KB

A basic dashboard for Docker that makes using Docker for local dev less fart-a-licious

License: MIT License

CSS 5.47% HTML 34.42% Python 60.11%

foxy's Introduction

foxy



obligatory screen shot

what is?

Foxy is a python-powered dashboard designed to make using docker for local development easier. While there are many other dashboards available for docker, they are all focused primarily on the needs of dev-ops personnel running a cluster. A developer using docker to create a sandbox production environment on her workstation has different needs. Foxy meets those needs by providing meaningful information on what containers are available on the system, what ports are available on the containers, links to open any web-accesible services in the container, and the means to start/stop containers from the dashboard. Ports are displayed along with a name indicating what service it's attached to, and may be grouped together in the dash. For example, the Hadoop ecosystem has many constitutent technologies, HDFS, Hadoop, Spark, Yarn, etc., each of which has one or more network ports used to interact with the service. Foxy can group all of the ports for a given service together on the display so you don't have to hunt around for them.


how to use?

associate meta-data with a docker file

The first thing you're going to need to do is associate metadata with the docker file you're planning on using to build your container. If you've already got a container(s), you can still use foxy to start, stop, or display the docker inspect report, but you won't be able to view the port resolution tables or have one-click access to available web services.

Foxy metadata is associated with the LABEL tag in a dockerfile. Below is an example of what this might look like for a containerized cloudera cdh stack:

LABEL \
      #
      # group jupyter
          foxy.6666.name="notebook" \
          foxy.6666.group="jupyter" \
          foxy.6666.attribute="web" \
      #
      # group HDFS
          foxy.8020.name="NameNode" \
          foxy.8020.group="HDFS" \
      
          foxy.50470.name="NameNode HTTPS UI" \
          foxy.50470.group="HDFS" \
          foxy.50470.attribute="web" \
      
          foxy.50075.name="DataNode UI" \
          foxy.50075.group="HDFS" \
          foxy.50075.attribute="web" \
      #
      # group Yarn
          foxy.8088.name="Resource Manager UI" \
          foxy.8088.group="Yarn" \
          foxy.8088.attribute="web" \
      
          foxy.8042.name="Node Manager" \
          foxy.8042.group="Yarn" \
          foxy.8042.attribute="web" \
      
          foxy.8040.name="Node Manager Localizer" \
          foxy.8040.group="Yarn" \
      #    
      # group Spark
          foxy.4040.name="Local Client Driver HTTP UI" \
          foxy.4040.group="Spark" \
          foxy.4040.attribute="web" \
      #
      # group Hadoop
          foxy.19888.name="MapReduce JobHistory UI" \
          foxy.19888.group="Hadoop" \
          foxy.19888.attribute="web" \
      #
      # group ZooKeeper
          foxy.2181.name="ZooKeeper Client" \
          foxy.2181.group="ZooKeeper" \
      #
      # group Hue
          foxy.8888.name="Server" \
          foxy.8888.group="Hue" \
      #      
      # group Oozie
          foxy.11000.name="Server HTTP interface" \
          foxy.11000.group="Oozie" \
      #   
      # group Other
          foxy.9090.name="Linux Cockpit (todo)" \
          foxy.9090.group="Other" \
       
          foxy.11443.name="Dogtag Port" \
          foxy.11443.group="Other" \
       
          foxy.22.name="ssh" \
          foxy.22.group="Other" 

In docker files, the \ character denotes a line-continuation and the # character denotes a commented line. Here's the breakdown of the metadata namespace:

  • foxy is how foxy knows what metadata to parse. This is why you're able to co-locate foxy metadata along with whatever else you might need/want to put into your container.
  • name is the name you want to associate with this port. You can call it whatever you want.
  • group the group you want to associate this port with. I haven't tested what happens if you try to associate a port with more than one group. It should work...
  • attribute allows you to associate a tag with a port. If the attribute is 'web', foxy will automatically render the label as a button whose target is whatever ip:port on your host the port has been associated with.

run foxy

Now that you've created your container, you'll need to fire up foxy. Create a virtual environment for python 2.7, activate it, then execute the setup script:

python setup.py install

Once you everything installed, start foxy by executing the following script:

python ../foxy/Web/foxydriver.py

then navigate your favorite web browser to localhost:1701

use foxy

Foxy will present you with a dashboard with a nav bar on top and a set of panels below; each panel representing a docker container.

  • Containers that are currently running will be highlighted blue wheras stopped containers will be grey.
  • Below the container name will be a bar with three buttons. Here you can start/stop the container, view the ports table, or view the results of a docker inspect {container-name} command.
  • If you make an out-of-band change to your docker environment (eg. build another container, remove a container, etc), simply refresh the foxy dash and foxy will pick up the changes.

known issues

  • the search feature is currently in development and is non-functional.
  • if you create metadata for a given port number then don't expose that port, foxy freaks out. so, yeah, don't do that.
  • I'm pretty sure you can only associate one tag with a port.
  • None of this has been unit tested.
  • Currently you need to start foxy from within the ./foxy directory -- this is probably an artifact of my not having packaged this correctly yet...
  • when you click on the 'help' button nothing happens.
  • anyone anal about PEP-8 will probably freak out (rightfully) about the state of the code. if this is you, maybe don't do that. or better yet, make a pull request.

foxy's People

Contributors

davidholiday avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.