README.md in docker-spoon-0.0.1 vs README.md in docker-spoon-0.1.0
- old
+ new
@@ -1,22 +1,166 @@
-# Spoon
+# docker-spoon
-Spoon with another developer using Docker & tmux. This is being ported
-from another project and is functionaly incomplete right now
+## Overview
+Spoon creates on demand pairing environments using Docker.
+We pair a lot using tmux & emacs / vim and wanted a way to create
+pairing environments which met a few criteria:
+
+- Would contain all the updates folks have contributed to the dev setup
+- Can be created on-demand as needed instead of having dedicated pairing
+ environments and asking who's using what
+- Are console based to enable low latency remote pairing
+
+Spoon is intended to make this process as easy as possible.
+
+#### Why Spoon?
+[Learn more about spooning](https://www.youtube.com/watch?v=dYBjVTMUQY0)
+
+In the mean time - [learn more about spooning](https://www.youtube.com/watch?v=dYBjVTMUQY0)
+
## Installation
```
-$ gem install spoon
+$ gem install docker-spoon
```
+## Configuration
+
+Spoon has a number of options which you probably do not want to have to
+specify on the command line every time. The easiest way to set these for
+your environment is to add them to `~/.spoonrc`. This file is just
+parsed as ruby, so you can put all kinds of stuff in here, but the
+basics should look something like this:
+
+```ruby
+options[:url] = "tcp://192.168.1.3:4243"
+options[:image] = 'spoon-pairing'
+options["pre-build-commands"] = [
+ "cp -rp #{ENV['HOME']}/.chef #{options[:builddir]}/chef"
+]
+```
+
+All of the `options[]` parameters should map directly to the long form
+of options on the command line. They may be defined as either the
+`:symbol` form or as a string. The limitation is that ruby doesn't
+permit a dash in symbols, so when an option has a dash in it, it must be
+specified as a string.
+
+You may also specify a different config file with the `--config`
+argument.
+
## Usage
-Coming soon
+Spoon has 4 major operations it can perform:
+- Connect/Create, Connect to an existing spoon container or create a new
+ container
+- List, List existing containers
+- Build, Build an image for use as a spoon container
+- Destroy, Destroy an existing spoon container
+
+### Connect/Create
+
+By default when you call spoon with no options it will try to connect to
+the spoon container that you specify. If that container doesn't exist,
+spoon will create it for you. Once spoon either creates a container or
+determines that one already exists it will start an ssh connection to
+the host. This will shell out to ssh and should honor your ssh
+configuration locally.
+
+Example (container doesn't exist):
+```shell
+$ spoon fortesting
+The `spoon-fortesting` container doesn't exist, creating...
+Connecting to `spoon-fortesting`
+pairing@dockerhost's password:
+```
+
+Example (container exists):
+```shell
+$ spoon fortesting
+Connecting to `spoon-fortesting`
+pairing@dockerhost's password:
+```
+
+#### Options
+
+- `--url`, The url of the Docker API endpoint. This is in the format
+ supported by the docker -H option. This will also read from the
+ environment variable `DOCKER_HOST` if this argument is not specified
+ and that env var exists.
+- `--image`, The image name to use when starting a spoon container.
+- `--prefix`, The prefix to use for creating, listing & destroying
+ containers.
+
+### List
+
+The `--list` argument will list any containers on the destination Docker
+host which have the same prefix as specified by `--prefix` (default
+'spoon-'). Images are listed without the prefix specified so that you
+can see only the containers you are interested in.
+
+```shell
+$ spoon -l
+List of available spoon containers:
+fortesting
+```
+
+### Destroy
+
+The `--destroy NAME` option will destroy the specified spoon container.
+
+```shell
+$ spoon -d fortesting
+Destroying spoon-fortesting
+Done!
+```
+
+### Build
+
+The `--build` option will build a docker image from the build directory
+specified by `--builddir` (default '.'). This has the same expectations
+as the [docker
+build](https://docs.docker.com/reference/commandline/cli/#build)
+command.
+
+#### Options
+
+- `--builddir`, This is the directory where the build process will look
+ for a Dockerfile and any content added to the container using `ADD`.
+
+- `--pre-build-commands`, This is a list of commands to run before
+ actually kicking off the build process (see below).
+
+pre-build-commands:
+
+Because docker-spoon is special, we also support running some
+commands in advance of the build process. This allows for things like
+copying stuff into the container which you don't want to have committed
+to the repository. An example of this is that in our environment we need
+chef credentials inside of our container & we use this mechanism to copy
+those credentials into the builddir at build time without adding them to
+our repository containing the Dockerfile.
+
+Here's an example of how we copy our chef configuration into place:
+```ruby
+options["pre-build-commands"] = [
+ "cp -rp #{ENV['HOME']}/.chef #{options[:builddir]}/chef"
+]
+```
+
+#### Container expectations
+
+When building a container for use with docker-spoon you must build a
+container which runs an ssh daemon. An example of a Dockerfile which
+creates a container which runs ssh is included in the `docker/`
+directory inside this repository
+
## Contributing
1. Fork it ( https://github.com/adnichols/spoon/fork )
2. Create your feature branch (`git checkout -b my-new-feature`)
3. Commit your changes (`git commit -am 'Add some feature'`)
4. Push to the branch (`git push origin my-new-feature`)
5. Create a new Pull Request
+