Skip to content

Instantly share code, notes, and snippets.

@rootart
Forked from wsargent/docker_cheat.md
Created June 30, 2014 16:00
Show Gist options
  • Save rootart/8ac5f35b3561a645a074 to your computer and use it in GitHub Desktop.
Save rootart/8ac5f35b3561a645a074 to your computer and use it in GitHub Desktop.

Revisions

  1. @wsargent wsargent revised this gist Jun 27, 2014. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion docker_cheat.md
    Original file line number Diff line number Diff line change
    @@ -1,6 +1,6 @@
    # Docker Cheat Sheet

    NOTE: 534 stars, 106 forks. I love you all. Please contribute tips and edits back to this cheat sheet -- email's [email protected] and you can do git clones of gists as well.
    NOTE: 534 stars, 106 forks. I love you all. Please contribute tips and edits back to this cheat sheet -- email's [email protected] and you can treat gists like git repositories and send git diffs.

    * [Why](https://gist.github.com/wsargent/7049221#why)
    * [I just want a dev environment](https://gist.github.com/wsargent/7049221#tldr-i-just-want-a-dev-environment)
  2. @wsargent wsargent revised this gist Jun 27, 2014. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion docker_cheat.md
    Original file line number Diff line number Diff line change
    @@ -1,6 +1,6 @@
    # Docker Cheat Sheet

    NOTE: 500 stars, 106 forks. I love you all. Please contribute tips and edits back to this cheat sheet -- email's [email protected] and you can do git clones of gists as well.
    NOTE: 534 stars, 106 forks. I love you all. Please contribute tips and edits back to this cheat sheet -- email's [email protected] and you can do git clones of gists as well.

    * [Why](https://gist.github.com/wsargent/7049221#why)
    * [I just want a dev environment](https://gist.github.com/wsargent/7049221#tldr-i-just-want-a-dev-environment)
  3. @wsargent wsargent revised this gist Jun 27, 2014. 1 changed file with 2 additions and 0 deletions.
    2 changes: 2 additions & 0 deletions docker_cheat.md
    Original file line number Diff line number Diff line change
    @@ -1,5 +1,7 @@
    # Docker Cheat Sheet

    NOTE: 500 stars, 106 forks. I love you all. Please contribute tips and edits back to this cheat sheet -- email's [email protected] and you can do git clones of gists as well.

    * [Why](https://gist.github.com/wsargent/7049221#why)
    * [I just want a dev environment](https://gist.github.com/wsargent/7049221#tldr-i-just-want-a-dev-environment)
    * [Prerequisites](https://gist.github.com/wsargent/7049221#prequisites)
  4. @wsargent wsargent revised this gist Jun 27, 2014. 1 changed file with 7 additions and 2 deletions.
    9 changes: 7 additions & 2 deletions docker_cheat.md
    Original file line number Diff line number Diff line change
    @@ -181,8 +181,7 @@ Docker.io hosts its own [index](https://index.docker.io/) to a central registry

    ### Tutorial

    * [Dockerfile tutorial, level 1](http://www.docker.io/learn/dockerfile/level1/)
    * [Dockerfile tutorial, level 2](http://www.docker.io/learn/dockerfile/level2/)
    * [Flux7's Dockerfile Tutorial](http://flux7.com/blogs/docker/docker-tutorial-series-part-3-automation-is-the-word-using-dockerfile/)

    ### Examples

    @@ -309,6 +308,12 @@ cd jq-1.3
    docker inspect `dl` | jq -r '.[0].NetworkSettings.IPAddress'
    ```

    or (this is unverified)

    ```
    docker inspect -f '{{ .NetworkSettings.IPAddress }}' <container_name>
    ```

    ### Get Environment Settings

    ```
  5. @wsargent wsargent revised this gist May 27, 2014. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion docker_cheat.md
    Original file line number Diff line number Diff line change
    @@ -45,7 +45,7 @@ brew cask install virtualbox
    brew cask install vagrant
    ```

    I personally don't use boot2docker because I already know how to use Vagrant, and I don't like how boot2docker doesn't give me control over my Vagrant instances. So this is the real way to do it.
    I personally don't use boot2docker because I already know how to use Vagrant, and I don't like how boot2docker doesn't give me control over my Vagrant instances (especially the lack of port forwarding). So this is the real way to do it.

    We use the [Open Vagrant files](https://github.com/phusion/open-vagrant-boxes) defined by Phusion, which have better default settings:

  6. @wsargent wsargent revised this gist May 27, 2014. 1 changed file with 1 addition and 0 deletions.
    1 change: 1 addition & 0 deletions docker_cheat.md
    Original file line number Diff line number Diff line change
    @@ -3,6 +3,7 @@
    * [Why](https://gist.github.com/wsargent/7049221#why)
    * [I just want a dev environment](https://gist.github.com/wsargent/7049221#tldr-i-just-want-a-dev-environment)
    * [Prerequisites](https://gist.github.com/wsargent/7049221#prequisites)
    * [Installation](https://gist.github.com/wsargent/7049221#installation)
    * [Containers](https://gist.github.com/wsargent/7049221#containers)
    * [Images](https://gist.github.com/wsargent/7049221#images)
    * [Registry and Repository](https://gist.github.com/wsargent/7049221#registry--repository)
  7. @wsargent wsargent revised this gist May 27, 2014. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion docker_cheat.md
    Original file line number Diff line number Diff line change
    @@ -1,7 +1,7 @@
    # Docker Cheat Sheet

    * [Why](https://gist.github.com/wsargent/7049221#why)
    * [TL;DR](https://gist.github.com/wsargent/7049221#tldr-i-just-want-a-dev-environment)
    * [I just want a dev environment](https://gist.github.com/wsargent/7049221#tldr-i-just-want-a-dev-environment)
    * [Prerequisites](https://gist.github.com/wsargent/7049221#prequisites)
    * [Containers](https://gist.github.com/wsargent/7049221#containers)
    * [Images](https://gist.github.com/wsargent/7049221#images)
  8. @wsargent wsargent revised this gist May 27, 2014. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion docker_cheat.md
    Original file line number Diff line number Diff line change
    @@ -1,7 +1,7 @@
    # Docker Cheat Sheet

    * [Why](https://gist.github.com/wsargent/7049221#why)
    * [TLDR](https://gist.github.com/wsargent/7049221#tldr-i-just-want-a-dev-environment)
    * [TL;DR](https://gist.github.com/wsargent/7049221#tldr-i-just-want-a-dev-environment)
    * [Prerequisites](https://gist.github.com/wsargent/7049221#prequisites)
    * [Containers](https://gist.github.com/wsargent/7049221#containers)
    * [Images](https://gist.github.com/wsargent/7049221#images)
  9. @wsargent wsargent revised this gist May 25, 2014. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion docker_cheat.md
    Original file line number Diff line number Diff line change
    @@ -97,7 +97,7 @@ If you want to run and then interact with a container, `docker start` then `dock

    If you want a transient container, `docker run -rm` will remove the container after it stops.

    If you want to poke around in an image, `docker run -t -i <myshell>` to open a tty.
    If you want to poke around in an image, `docker run -t -i <myimage> <myshell>` to open a tty.

    If you want to map a directory on the host to a docker container, `docker run -v $HOSTDIR:$DOCKERDIR` (also see Volumes section).

  10. @wsargent wsargent revised this gist May 25, 2014. 1 changed file with 3 additions and 0 deletions.
    3 changes: 3 additions & 0 deletions docker_cheat.md
    Original file line number Diff line number Diff line change
    @@ -1,5 +1,8 @@
    # Docker Cheat Sheet

    * [Why](https://gist.github.com/wsargent/7049221#why)
    * [TLDR](https://gist.github.com/wsargent/7049221#tldr-i-just-want-a-dev-environment)
    * [Prerequisites](https://gist.github.com/wsargent/7049221#prequisites)
    * [Containers](https://gist.github.com/wsargent/7049221#containers)
    * [Images](https://gist.github.com/wsargent/7049221#images)
    * [Registry and Repository](https://gist.github.com/wsargent/7049221#registry--repository)
  11. @wsargent wsargent revised this gist May 25, 2014. 1 changed file with 8 additions and 0 deletions.
    8 changes: 8 additions & 0 deletions docker_cheat.md
    Original file line number Diff line number Diff line change
    @@ -1,5 +1,13 @@
    # Docker Cheat Sheet

    * [Containers](https://gist.github.com/wsargent/7049221#containers)
    * [Images](https://gist.github.com/wsargent/7049221#images)
    * [Registry and Repository](https://gist.github.com/wsargent/7049221#registry--repository)
    * [Dockerfile](https://gist.github.com/wsargent/7049221#dockerfile)
    * [Layers](https://gist.github.com/wsargent/7049221#layers)
    * [Links](https://gist.github.com/wsargent/7049221#links)
    * [Volumes](https://gist.github.com/wsargent/7049221#volumes)

    ## Why

    [Why Should I Care (For Developers)](https://www.docker.io/the_whole_story/#Why-Should-I-Care-\(For-Developers\))
  12. @wsargent wsargent revised this gist May 25, 2014. 1 changed file with 23 additions and 0 deletions.
    23 changes: 23 additions & 0 deletions docker_cheat.md
    Original file line number Diff line number Diff line change
    @@ -152,9 +152,32 @@ Docker.io hosts its own [index](https://index.docker.io/) to a central registry

    [The configuration file](http://docs.docker.io/introduction/working-with-docker/#working-with-the-dockerfile). Sets up a Docker container when you run `docker build` on it. Vastly preferable to `docker commit`.

    ### Instructions

    * [FROM](http://docs.docker.io/reference/builder/#from)
    * [MAINTAINER](http://docs.docker.io/reference/builder/#maintainer)
    * [RUN](http://docs.docker.io/reference/builder/#run)
    * [CMD](http://docs.docker.io/reference/builder/#cmd)
    * [EXPOSE](http://docs.docker.io/reference/builder/#expose)
    * [ENV](http://docs.docker.io/reference/builder/#env)
    * [ADD](http://docs.docker.io/reference/builder/#add)
    * [ENTRYPOINT](http://docs.docker.io/reference/builder/#entrypoint)
    * [VOLUME](http://docs.docker.io/reference/builder/#volume)
    * [USER](http://docs.docker.io/reference/builder/#user)
    * [WORKDIR](http://docs.docker.io/reference/builder/#workdir)
    * [ONBUILD](http://docs.docker.io/reference/builder/#onbuild)

    ### Tutorial

    * [Dockerfile tutorial, level 1](http://www.docker.io/learn/dockerfile/level1/)
    * [Dockerfile tutorial, level 2](http://www.docker.io/learn/dockerfile/level2/)

    ### Examples

    * [Examples](http://docs.docker.io/reference/builder/#dockerfile-examples)

    ### Best Practices

    Best to look at [http://github.com/wsargent/docker-devenv](http://github.com/wsargent/docker-devenv) and the [best practices](http://crosbymichael.com/dockerfile-best-practices.html) / [take 2](http://crosbymichael.com/dockerfile-best-practices-take-2.html) for more details.

    If you use [jEdit](http://jedit.org), I've put up a syntax highlighting module for [Dockerfile](https://github.com/wsargent/jedit-docker-mode) you can use.
  13. @wsargent wsargent revised this gist May 25, 2014. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion docker_cheat.md
    Original file line number Diff line number Diff line change
    @@ -27,7 +27,7 @@ This is all MacOS specific.
    Install VirtualBox and Vagrant using [Brew Cask](https://github.com/phinze/homebrew-cask).

    ```
    brew tap phinze/homebrew-cask
    brew tap caskroom/homebrew-cask
    brew install brew-cask
    brew cask install virtualbox
    brew cask install vagrant
  14. @wsargent wsargent revised this gist May 25, 2014. 1 changed file with 2 additions and 2 deletions.
    4 changes: 2 additions & 2 deletions docker_cheat.md
    Original file line number Diff line number Diff line change
    @@ -212,10 +212,10 @@ First expose the port in your Dockerfile:
    EXPOSE <CONTAINERPORT>
    ```

    Then map the container port to the host port:
    Then map the container port to the host port (only using localhost interface):

    ```
    docker run -p $HOSTPORT:$CONTAINERPORT -name CONTAINER -t someimage
    docker run -p 127.0.0.1:$HOSTPORT:$CONTAINERPORT -name CONTAINER -t someimage
    ```

    If you're running Docker in Virtualbox, you then need to forward the port there as well. It can be useful to define something in Vagrantfile to expose a range of ports so that you can dynamically map them:
  15. @wsargent wsargent revised this gist May 22, 2014. 1 changed file with 2 additions and 0 deletions.
    2 changes: 2 additions & 0 deletions docker_cheat.md
    Original file line number Diff line number Diff line change
    @@ -157,6 +157,8 @@ Docker.io hosts its own [index](https://index.docker.io/) to a central registry

    Best to look at [http://github.com/wsargent/docker-devenv](http://github.com/wsargent/docker-devenv) and the [best practices](http://crosbymichael.com/dockerfile-best-practices.html) / [take 2](http://crosbymichael.com/dockerfile-best-practices-take-2.html) for more details.

    If you use [jEdit](http://jedit.org), I've put up a syntax highlighting module for [Dockerfile](https://github.com/wsargent/jedit-docker-mode) you can use.

    ## Layers

    The [versioned filesystem](http://en.wikipedia.org/wiki/Aufs) in Docker is based on layers. They're like [git commits or changesets for filesystems](http://docker.readthedocs.org/reference/terms/layer/).
  16. @wsargent wsargent revised this gist May 22, 2014. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion docker_cheat.md
    Original file line number Diff line number Diff line change
    @@ -163,7 +163,7 @@ The [versioned filesystem](http://en.wikipedia.org/wiki/Aufs) in Docker is based

    ## Links

    Links are how Docker containers talk to each other [through TCP/IP ports](http://docs.docker.io/use/working_with_links_names/). [Linking into Redis](http://docs.docker.io/examples/linking_into_redis/) and [Atlassian](http://blogs.atlassian.com/2013/11/docker-all-the-things-at-atlassian-automation-and-wiring/) show worked examples.
    Links are how Docker containers talk to each other [through TCP/IP ports](http://docs.docker.io/use/working_with_links_names/). [Linking into Redis](http://docs.docker.io/use/working_with_links_names/#links-service-discovery-for-docker) and [Atlassian](http://blogs.atlassian.com/2013/11/docker-all-the-things-at-atlassian-automation-and-wiring/) show worked examples. You can also (in 0.11) resolve [links by hostname](http://docs.docker.io/use/working_with_links_names/#resolving-links-by-name).

    NOTE: If you want containers to ONLY communicate with each other through links, start the docker daemon with `-icc=false` to disable inter process communication.

  17. @wsargent wsargent revised this gist May 22, 2014. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion docker_cheat.md
    Original file line number Diff line number Diff line change
    @@ -155,7 +155,7 @@ Docker.io hosts its own [index](https://index.docker.io/) to a central registry
    * [Dockerfile tutorial, level 1](http://www.docker.io/learn/dockerfile/level1/)
    * [Dockerfile tutorial, level 2](http://www.docker.io/learn/dockerfile/level2/)

    Best to look at [http://github.com/wsargent/docker-devenv](http://github.com/wsargent/docker-devenv) and the [best practices](http://crosbymichael.com/dockerfile-best-practices.html) for more details.
    Best to look at [http://github.com/wsargent/docker-devenv](http://github.com/wsargent/docker-devenv) and the [best practices](http://crosbymichael.com/dockerfile-best-practices.html) / [take 2](http://crosbymichael.com/dockerfile-best-practices-take-2.html) for more details.

    ## Layers

  18. @wsargent wsargent revised this gist May 22, 2014. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion docker_cheat.md
    Original file line number Diff line number Diff line change
    @@ -150,7 +150,7 @@ Docker.io hosts its own [index](https://index.docker.io/) to a central registry

    ## Dockerfile

    [The configuration file](http://docs.docker.io/use/builder/#dockerbuilder). Sets up a Docker container when you run `docker build` on it. Vastly preferable to `docker commit`.
    [The configuration file](http://docs.docker.io/introduction/working-with-docker/#working-with-the-dockerfile). Sets up a Docker container when you run `docker build` on it. Vastly preferable to `docker commit`.

    * [Dockerfile tutorial, level 1](http://www.docker.io/learn/dockerfile/level1/)
    * [Dockerfile tutorial, level 2](http://www.docker.io/learn/dockerfile/level2/)
  19. @wsargent wsargent revised this gist May 22, 2014. 1 changed file with 5 additions and 5 deletions.
    10 changes: 5 additions & 5 deletions docker_cheat.md
    Original file line number Diff line number Diff line change
    @@ -64,12 +64,12 @@ I use [Oh My Zsh](https://github.com/robbyrussell/oh-my-zsh) with the [Docker pl

    ## Containers

    [Your basic isolated Docker process](http://docker.readthedocs.org/reference/terms/container/#container-def). Containers are to Virtual Machines as threads are to processes. Or you can think of them as chroots on steroids.
    [Your basic isolated Docker process](http://docker.readthedocs.org/terms/container/#container-def). Containers are to Virtual Machines as threads are to processes. Or you can think of them as chroots on steroids.

    Some common misconceptions it's worth correcting:

    * __Containers are not transient__. `docker run` doesn't do what you think.
    * __Containers are not limited to running a single command or process.__ You can use [supervisord](http://docs.docker.io/reference/examples/using_supervisord/) or [runit](https://github.com/phusion/baseimage-docker).
    * __Containers are not limited to running a single command or process.__ You can use [supervisord](http://docs.docker.io/examples/using_supervisord/) or [runit](https://github.com/phusion/baseimage-docker).

    ### Lifecycle

    @@ -90,7 +90,7 @@ If you want to poke around in an image, `docker run -t -i <myshell>` to open a t

    If you want to map a directory on the host to a docker container, `docker run -v $HOSTDIR:$DOCKERDIR` (also see Volumes section).

    If you want to integrate a container with a [host process manager](http://docs.docker.io/reference/use/host_integration/), start the daemon with `-r=false` then use `docker start -a`.
    If you want to integrate a container with a [host process manager](http://docs.docker.io/use/host_integration/), start the daemon with `-r=false` then use `docker start -a`.

    If you want to expose container ports through the host, see the [exposing ports](https://gist.github.com/wsargent/7049221#exposing-ports) section.

    @@ -192,7 +192,7 @@ To delete links, use `docker rm -link `.

    ## Volumes

    Docker volumes are [free-floating filesystems](http://docs.docker.io/reference/use/working_with_volumes/). They don't have to be connected to a particular container.
    Docker volumes are [free-floating filesystems](http://docs.docker.io/use/working_with_volumes/). They don't have to be connected to a particular container.

    Volumes are useful in situations where you can't use links (which are TCP/IP only). For instance, if you need to have two docker instances communicate by leaving stuff on the filesystem.

    @@ -202,7 +202,7 @@ See [advanced volumes](http://crosbymichael.com/advanced-docker-volumes.html) fo

    ## Exposing ports

    Exposing ports through the host container is [fiddly but doable](http://docs.docker.io/reference/use/port_redirection/#binding-a-port-to-an-host-interface).
    Exposing ports through the host container is [fiddly but doable](http://docs.docker.io/use/port_redirection/#binding-a-port-to-an-host-interface).

    First expose the port in your Dockerfile:

  20. @wsargent wsargent revised this gist May 22, 2014. 1 changed file with 3 additions and 3 deletions.
    6 changes: 3 additions & 3 deletions docker_cheat.md
    Original file line number Diff line number Diff line change
    @@ -139,7 +139,7 @@ Images are just [templates for docker containers](http://docker.readthedocs.org/

    A repository is a *hosted* collection of tagged images that together create the file system for a container.

    A registry is a *host* -- a server that stores repositories and provides an HTTP API for [managing the uploading and downloading of repositories](http://docs.docker.io/reference/use/workingwithrepository/).
    A registry is a *host* -- a server that stores repositories and provides an HTTP API for [managing the uploading and downloading of repositories](http://docs.docker.io/use/workingwithrepository/).

    Docker.io hosts its own [index](https://index.docker.io/) to a central registry which contains a large number of repositories.

    @@ -150,7 +150,7 @@ Docker.io hosts its own [index](https://index.docker.io/) to a central registry

    ## Dockerfile

    [The configuration file](http://docs.docker.io/reference/use/builder/#dockerbuilder). Sets up a Docker container when you run `docker build` on it. Vastly preferable to `docker commit`.
    [The configuration file](http://docs.docker.io/use/builder/#dockerbuilder). Sets up a Docker container when you run `docker build` on it. Vastly preferable to `docker commit`.

    * [Dockerfile tutorial, level 1](http://www.docker.io/learn/dockerfile/level1/)
    * [Dockerfile tutorial, level 2](http://www.docker.io/learn/dockerfile/level2/)
    @@ -163,7 +163,7 @@ The [versioned filesystem](http://en.wikipedia.org/wiki/Aufs) in Docker is based

    ## Links

    Links are how Docker containers talk to each other [through TCP/IP ports](http://docs.docker.io/reference/use/working_with_links_names/). [Linking into Redis](http://docs.docker.io/reference/examples/linking_into_redis/) and [Atlassian](http://blogs.atlassian.com/2013/11/docker-all-the-things-at-atlassian-automation-and-wiring/) show worked examples.
    Links are how Docker containers talk to each other [through TCP/IP ports](http://docs.docker.io/use/working_with_links_names/). [Linking into Redis](http://docs.docker.io/examples/linking_into_redis/) and [Atlassian](http://blogs.atlassian.com/2013/11/docker-all-the-things-at-atlassian-automation-and-wiring/) show worked examples.

    NOTE: If you want containers to ONLY communicate with each other through links, start the docker daemon with `-icc=false` to disable inter process communication.

  21. @wsargent wsargent revised this gist May 22, 2014. 1 changed file with 41 additions and 41 deletions.
    82 changes: 41 additions & 41 deletions docker_cheat.md
    Original file line number Diff line number Diff line change
    @@ -64,23 +64,23 @@ I use [Oh My Zsh](https://github.com/robbyrussell/oh-my-zsh) with the [Docker pl

    ## Containers

    [Your basic isolated Docker process](http://docker.readthedocs.org/en/latest/terms/container/#container-def). Containers are to Virtual Machines as threads are to processes. Or you can think of them as chroots on steroids.
    [Your basic isolated Docker process](http://docker.readthedocs.org/reference/terms/container/#container-def). Containers are to Virtual Machines as threads are to processes. Or you can think of them as chroots on steroids.

    Some common misconceptions it's worth correcting:

    * __Containers are not transient__. `docker run` doesn't do what you think.
    * __Containers are not limited to running a single command or process.__ You can use [supervisord](http://docs.docker.io/en/latest/examples/using_supervisord/) or [runit](https://github.com/phusion/baseimage-docker).
    * __Containers are not limited to running a single command or process.__ You can use [supervisord](http://docs.docker.io/reference/examples/using_supervisord/) or [runit](https://github.com/phusion/baseimage-docker).

    ### Lifecycle

    * [`docker run`](http://docs.docker.io/en/latest/commandline/cli/#run) creates a container.
    * [`docker stop`](http://docs.docker.io/en/latest/commandline/cli/#stop) stops it.
    * [`docker start`](http://docs.docker.io/en/latest/commandline/cli/#start) will start it again.
    * [`docker restart`](http://docs.docker.io/en/latest/commandline/cli/#restart) restarts a container.
    * [`docker rm`](http://docs.docker.io/en/latest/commandline/cli/#rm) deletes a container.
    * [`docker kill`](http://docs.docker.io/en/latest/commandline/cli/#kill) sends a SIGKILL to a container. [Has issues](https://github.com/dotcloud/docker/issues/197).
    * [`docker attach`](http://docs.docker.io/en/latest/commandline/cli/#attach) will connect to a running container.
    * [`docker wait`](http://docs.docker.io/en/latest/commandline/cli/#wait) blocks until container stops.
    * [`docker run`](http://docs.docker.io/reference/commandline/cli/#run) creates a container.
    * [`docker stop`](http://docs.docker.io/reference/commandline/cli/#stop) stops it.
    * [`docker start`](http://docs.docker.io/reference/commandline/cli/#start) will start it again.
    * [`docker restart`](http://docs.docker.io/reference/commandline/cli/#restart) restarts a container.
    * [`docker rm`](http://docs.docker.io/reference/commandline/cli/#rm) deletes a container.
    * [`docker kill`](http://docs.docker.io/reference/commandline/cli/#kill) sends a SIGKILL to a container. [Has issues](https://github.com/dotcloud/docker/issues/197).
    * [`docker attach`](http://docs.docker.io/reference/commandline/cli/#attach) will connect to a running container.
    * [`docker wait`](http://docs.docker.io/reference/commandline/cli/#wait) blocks until container stops.

    If you want to run and then interact with a container, `docker start` then `docker attach` to get in.

    @@ -90,67 +90,67 @@ If you want to poke around in an image, `docker run -t -i <myshell>` to open a t

    If you want to map a directory on the host to a docker container, `docker run -v $HOSTDIR:$DOCKERDIR` (also see Volumes section).

    If you want to integrate a container with a [host process manager](http://docs.docker.io/en/latest/use/host_integration/), start the daemon with `-r=false` then use `docker start -a`.
    If you want to integrate a container with a [host process manager](http://docs.docker.io/reference/use/host_integration/), start the daemon with `-r=false` then use `docker start -a`.

    If you want to expose container ports through the host, see the [exposing ports](https://gist.github.com/wsargent/7049221#exposing-ports) section.

    ### Info

    * [`docker ps`](http://docs.docker.io/en/latest/commandline/cli/#ps) shows running containers.
    * [`docker inspect`](http://docs.docker.io/en/latest/commandline/cli/#inspect) looks at all the info on a container (including IP address).
    * [`docker logs`](http://docs.docker.io/en/latest/commandline/cli/#logs) gets logs from container.
    * [`docker events`](http://docs.docker.io/en/latest/commandline/cli/#events) gets events from container.
    * [`docker port`](http://docs.docker.io/en/latest/commandline/cli/#port) shows public facing port of container.
    * [`docker top`](http://docs.docker.io/en/latest/commandline/cli/#top) shows running processes in container.
    * [`docker diff`](http://docs.docker.io/en/latest/commandline/cli/#diff) shows changed files in the container's FS.
    * [`docker ps`](http://docs.docker.io/reference/commandline/cli/#ps) shows running containers.
    * [`docker inspect`](http://docs.docker.io/reference/commandline/cli/#inspect) looks at all the info on a container (including IP address).
    * [`docker logs`](http://docs.docker.io/reference/commandline/cli/#logs) gets logs from container.
    * [`docker events`](http://docs.docker.io/reference/commandline/cli/#events) gets events from container.
    * [`docker port`](http://docs.docker.io/reference/commandline/cli/#port) shows public facing port of container.
    * [`docker top`](http://docs.docker.io/reference/commandline/cli/#top) shows running processes in container.
    * [`docker diff`](http://docs.docker.io/reference/commandline/cli/#diff) shows changed files in the container's FS.

    `docker ps -a` shows running and stopped containers.

    ### Import / Export

    There doesn't seem to be a way to use docker directly to import files into a container's filesystem.

    * [`docker cp`](http://docs.docker.io/en/latest/commandline/cli/#cp) copies files or folders out of a container's filesystem.
    * [`docker export`](http://docs.docker.io/en/latest/commandline/cli/#export) turns container filesystem into tarball.
    * [`docker cp`](http://docs.docker.io/reference/commandline/cli/#cp) copies files or folders out of a container's filesystem.
    * [`docker export`](http://docs.docker.io/reference/commandline/cli/#export) turns container filesystem into tarball.

    ## Images

    Images are just [templates for docker containers](http://docker.readthedocs.org/en/latest/terms/image/).
    Images are just [templates for docker containers](http://docker.readthedocs.org/reference/terms/image/).

    ### Lifecycle

    * [`docker images`](http://docs.docker.io/en/latest/commandline/cli/#images) shows all images.
    * [`docker import`](http://docs.docker.io/en/latest/commandline/cli/#import) creates an image from a tarball.
    * [`docker build`](http://docs.docker.io/en/latest/commandline/cli/#build) creates image from Dockerfile.
    * [`docker commit`](http://docs.docker.io/en/latest/commandline/cli/#commit) creates image from a container.
    * [`docker rmi`](http://docs.docker.io/en/latest/commandline/cli/#rmi) removes an image.
    * [`docker insert`](http://docs.docker.io/en/latest/commandline/cli/#insert) inserts a file from URL into image. (kind of odd, you'd think images would be immutable after create)
    * [`docker load`](http://docs.docker.io/en/latest/commandline/cli/#load) loads an image from a tar archive as STDIN, including images and tags (as of 0.7).
    * [`docker save`](http://docs.docker.io/en/latest/commandline/cli/#save) saves an image to a tar archive stream to STDOUT with all parent layers, tags & versions (as of 0.7).
    * [`docker images`](http://docs.docker.io/reference/commandline/cli/#images) shows all images.
    * [`docker import`](http://docs.docker.io/reference/commandline/cli/#import) creates an image from a tarball.
    * [`docker build`](http://docs.docker.io/reference/commandline/cli/#build) creates image from Dockerfile.
    * [`docker commit`](http://docs.docker.io/reference/commandline/cli/#commit) creates image from a container.
    * [`docker rmi`](http://docs.docker.io/reference/commandline/cli/#rmi) removes an image.
    * [`docker insert`](http://docs.docker.io/reference/commandline/cli/#insert) inserts a file from URL into image. (kind of odd, you'd think images would be immutable after create)
    * [`docker load`](http://docs.docker.io/reference/commandline/cli/#load) loads an image from a tar archive as STDIN, including images and tags (as of 0.7).
    * [`docker save`](http://docs.docker.io/reference/commandline/cli/#save) saves an image to a tar archive stream to STDOUT with all parent layers, tags & versions (as of 0.7).

    `docker import` and `docker commit` only set up the filesystem, not Dockerfile info like CMD or ENTRYPOINT or EXPOSE. See [bug](https://github.com/dotcloud/docker/issues/1141).

    ### Info

    * [`docker history`](http://docs.docker.io/en/latest/commandline/cli/#history) shows history of image.
    * [`docker tag`](http://docs.docker.io/en/latest/commandline/cli/#tag) tags an image to a name (local or registry).
    * [`docker history`](http://docs.docker.io/reference/commandline/cli/#history) shows history of image.
    * [`docker tag`](http://docs.docker.io/reference/commandline/cli/#tag) tags an image to a name (local or registry).

    ## Registry & Repository

    A repository is a *hosted* collection of tagged images that together create the file system for a container.

    A registry is a *host* -- a server that stores repositories and provides an HTTP API for [managing the uploading and downloading of repositories](http://docs.docker.io/en/latest/use/workingwithrepository/).
    A registry is a *host* -- a server that stores repositories and provides an HTTP API for [managing the uploading and downloading of repositories](http://docs.docker.io/reference/use/workingwithrepository/).

    Docker.io hosts its own [index](https://index.docker.io/) to a central registry which contains a large number of repositories.

    * [`docker login`](http://docs.docker.io/en/latest/commandline/cli/#login) to login to a registry.
    * [`docker search`](http://docs.docker.io/en/latest/commandline/cli/#search) searches registry for image.
    * [`docker pull`](http://docs.docker.io/en/latest/commandline/cli/#pull) pulls an image from registry to local machine.
    * [`docker push`](http://docs.docker.io/en/latest/commandline/cli/#push) pushes an image to the registry from local machine.
    * [`docker login`](http://docs.docker.io/reference/commandline/cli/#login) to login to a registry.
    * [`docker search`](http://docs.docker.io/reference/commandline/cli/#search) searches registry for image.
    * [`docker pull`](http://docs.docker.io/reference/commandline/cli/#pull) pulls an image from registry to local machine.
    * [`docker push`](http://docs.docker.io/reference/commandline/cli/#push) pushes an image to the registry from local machine.

    ## Dockerfile

    [The configuration file](http://docs.docker.io/en/latest/use/builder/#dockerbuilder). Sets up a Docker container when you run `docker build` on it. Vastly preferable to `docker commit`.
    [The configuration file](http://docs.docker.io/reference/use/builder/#dockerbuilder). Sets up a Docker container when you run `docker build` on it. Vastly preferable to `docker commit`.

    * [Dockerfile tutorial, level 1](http://www.docker.io/learn/dockerfile/level1/)
    * [Dockerfile tutorial, level 2](http://www.docker.io/learn/dockerfile/level2/)
    @@ -159,11 +159,11 @@ Best to look at [http://github.com/wsargent/docker-devenv](http://github.com/wsa

    ## Layers

    The [versioned filesystem](http://en.wikipedia.org/wiki/Aufs) in Docker is based on layers. They're like [git commits or changesets for filesystems](http://docker.readthedocs.org/en/latest/terms/layer/).
    The [versioned filesystem](http://en.wikipedia.org/wiki/Aufs) in Docker is based on layers. They're like [git commits or changesets for filesystems](http://docker.readthedocs.org/reference/terms/layer/).

    ## Links

    Links are how Docker containers talk to each other [through TCP/IP ports](http://docs.docker.io/en/latest/use/working_with_links_names/). [Linking into Redis](http://docs.docker.io/en/latest/examples/linking_into_redis/) and [Atlassian](http://blogs.atlassian.com/2013/11/docker-all-the-things-at-atlassian-automation-and-wiring/) show worked examples.
    Links are how Docker containers talk to each other [through TCP/IP ports](http://docs.docker.io/reference/use/working_with_links_names/). [Linking into Redis](http://docs.docker.io/reference/examples/linking_into_redis/) and [Atlassian](http://blogs.atlassian.com/2013/11/docker-all-the-things-at-atlassian-automation-and-wiring/) show worked examples.

    NOTE: If you want containers to ONLY communicate with each other through links, start the docker daemon with `-icc=false` to disable inter process communication.

    @@ -192,7 +192,7 @@ To delete links, use `docker rm -link `.

    ## Volumes

    Docker volumes are [free-floating filesystems](http://docs.docker.io/en/latest/use/working_with_volumes/). They don't have to be connected to a particular container.
    Docker volumes are [free-floating filesystems](http://docs.docker.io/reference/use/working_with_volumes/). They don't have to be connected to a particular container.

    Volumes are useful in situations where you can't use links (which are TCP/IP only). For instance, if you need to have two docker instances communicate by leaving stuff on the filesystem.

    @@ -202,7 +202,7 @@ See [advanced volumes](http://crosbymichael.com/advanced-docker-volumes.html) fo

    ## Exposing ports

    Exposing ports through the host container is [fiddly but doable](http://docs.docker.io/en/latest/use/port_redirection/#binding-a-port-to-an-host-interface).
    Exposing ports through the host container is [fiddly but doable](http://docs.docker.io/reference/use/port_redirection/#binding-a-port-to-an-host-interface).

    First expose the port in your Dockerfile:

  22. @wsargent wsargent revised this gist May 22, 2014. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion docker_cheat.md
    Original file line number Diff line number Diff line change
    @@ -43,7 +43,7 @@ vagrant up
    vagrant ssh
    ```

    Once you're in the Vagrant instance, pull the ubuntu repository:
    Once you're in the Vagrant instance, install Docker like any other package:

    ```
    sudo apt-get update
  23. @wsargent wsargent revised this gist May 22, 2014. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion docker_cheat.md
    Original file line number Diff line number Diff line change
    @@ -47,7 +47,7 @@ Once you're in the Vagrant instance, pull the ubuntu repository:

    ```
    sudo apt-get update
    sudo apt-get install -qy python-software-properties aptitude # needed for add-apt-repository etc
    sudo apt-get install -qy software-properties-common # needed for add-apt-repository etc
    sudo apt-get install -qy docker.io
    sudo ln -sf /usr/bin/docker.io /usr/local/bin/docker
    ```
  24. @wsargent wsargent revised this gist May 22, 2014. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion docker_cheat.md
    Original file line number Diff line number Diff line change
    @@ -47,7 +47,7 @@ Once you're in the Vagrant instance, pull the ubuntu repository:

    ```
    sudo apt-get update
    sudo apt-get install -qy python-software-properties # this always gets me
    sudo apt-get install -qy python-software-properties aptitude # needed for add-apt-repository etc
    sudo apt-get install -qy docker.io
    sudo ln -sf /usr/bin/docker.io /usr/local/bin/docker
    ```
  25. @wsargent wsargent revised this gist May 22, 2014. 1 changed file with 2 additions and 1 deletion.
    3 changes: 2 additions & 1 deletion docker_cheat.md
    Original file line number Diff line number Diff line change
    @@ -47,7 +47,8 @@ Once you're in the Vagrant instance, pull the ubuntu repository:

    ```
    sudo apt-get update
    sudo apt-get install docker.io
    sudo apt-get install -qy python-software-properties # this always gets me
    sudo apt-get install -qy docker.io
    sudo ln -sf /usr/bin/docker.io /usr/local/bin/docker
    ```

  26. @wsargent wsargent revised this gist May 22, 2014. 1 changed file with 4 additions and 6 deletions.
    10 changes: 4 additions & 6 deletions docker_cheat.md
    Original file line number Diff line number Diff line change
    @@ -38,25 +38,23 @@ I personally don't use boot2docker because I already know how to use Vagrant, an
    We use the [Open Vagrant files](https://github.com/phusion/open-vagrant-boxes) defined by Phusion, which have better default settings:

    ```
    vagrant init phusion/ubuntu-12.04-amd64
    vagrant init phusion/ubuntu-14.04-amd64
    vagrant up
    vagrant ssh
    ```

    Once you're in the Vagrant instance, pull the ubuntu repository:

    ```
    sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
    sudo sh -c "echo deb https://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list"
    sudo apt-get update
    sudo apt-get install lxc-docker
    docker pull ubuntu
    sudo apt-get install docker.io
    sudo ln -sf /usr/bin/docker.io /usr/local/bin/docker
    ```

    Then start up a container:

    ```
    docker run -i -t ubuntu /bin/bash
    sudo docker run -i -t ubuntu /bin/bash
    ```

    That's it, you have a running Docker container.
  27. @wsargent wsargent revised this gist May 22, 2014. 1 changed file with 4 additions and 0 deletions.
    4 changes: 4 additions & 0 deletions docker_cheat.md
    Original file line number Diff line number Diff line change
    @@ -46,6 +46,10 @@ vagrant ssh
    Once you're in the Vagrant instance, pull the ubuntu repository:

    ```
    sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
    sudo sh -c "echo deb https://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list"
    sudo apt-get update
    sudo apt-get install lxc-docker
    docker pull ubuntu
    ```

  28. @wsargent wsargent revised this gist May 22, 2014. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion docker_cheat.md
    Original file line number Diff line number Diff line change
    @@ -22,7 +22,7 @@ ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)"

    ## Installation

    UPDATE (2/5/2014): Docker 0.8 supports MacOS.
    This is all MacOS specific.

    Install VirtualBox and Vagrant using [Brew Cask](https://github.com/phinze/homebrew-cask).

  29. @wsargent wsargent revised this gist May 22, 2014. 1 changed file with 7 additions and 1 deletion.
    8 changes: 7 additions & 1 deletion docker_cheat.md
    Original file line number Diff line number Diff line change
    @@ -35,9 +35,15 @@ brew cask install vagrant

    I personally don't use boot2docker because I already know how to use Vagrant, and I don't like how boot2docker doesn't give me control over my Vagrant instances. So this is the real way to do it.

    We use the [Open Vagrant files](https://github.com/phusion/open-vagrant-boxes) defined by Phusion, which have better default settings:

    ```
    vagrant init phusion/ubuntu-12.04-amd64
    vagrant up
    vagrant ssh
    ```

    Pull the ubuntu repository:
    Once you're in the Vagrant instance, pull the ubuntu repository:

    ```
    docker pull ubuntu
  30. @wsargent wsargent revised this gist May 22, 2014. 1 changed file with 1 addition and 31 deletions.
    32 changes: 1 addition & 31 deletions docker_cheat.md
    Original file line number Diff line number Diff line change
    @@ -33,39 +33,9 @@ brew cask install virtualbox
    brew cask install vagrant
    ```

    Then we follow the instructions from [http://docs.docker.io/en/latest/installation/mac/](http://docs.docker.io/en/latest/installation/mac/):
    I personally don't use boot2docker because I already know how to use Vagrant, and I don't like how boot2docker doesn't give me control over my Vagrant instances. So this is the real way to do it.

    Install boot2docker:

    ```
    mkdir -p $HOME/bin
    cd $HOME/bin
    curl https://raw.github.com/boot2docker/boot2docker/master/boot2docker > $HOME/bin/boot2docker
    chmod +x $HOME/bin/boot2docker
    ```

    Install the docker daemon:

    ```
    curl -o docker https://get.docker.io/builds/Darwin/x86_64/docker-latest
    chmod +x docker
    export DOCKER_HOST=tcp://127.0.0.1:4243
    sudo cp docker /usr/local/bin/
    ```

    If you have trouble with port numbers (4243 is taken on my machine):

    ```
    echo "export DOCKER_HOST=tcp://127.0.0.1:9111" >> "$HOME/.zshenv"
    echo "DOCKER_PORT=9111" >> "$HOME/.boot2docker/profile"
    ```

    Then start up the daemon:

    ```
    $HOME/bin/boot2docker init
    $HOME/bin/boot2docker up
    ```

    Pull the ubuntu repository: