diff --git a/libnetwork/docs/overlay.md b/libnetwork/docs/overlay.md index ec48618c22..47168c10a3 100644 --- a/libnetwork/docs/overlay.md +++ b/libnetwork/docs/overlay.md @@ -1,6 +1,153 @@ -Overlay Driver -============== +# Overlay Driver -## Configuration +### Design +TODO -## Usage +### Multi-Host Overlay Driver Quick Start + +This example is to provision two Docker Hosts with the **experimental** Libnetwork overlay network driver. + +### Pre-Requisites + +- Kernel >= 3.1.6 +- Experimental Docker client + +### Install Docker Experimental + +Follow Docker experimental installation instructions at: [https://github.com/docker/docker/tree/master/experimental](https://github.com/docker/docker/tree/master/experimental) + +To ensure you are running the experimental Docker branch, check the version and look for the experimental tag: + +``` +$ docker -v +Docker version 1.8.0-dev, build f39b9a0, experimental +``` + +### Install and Bootstrap K/V Store + + +Multi-host networking uses a pluggable Key-Value store backend to distribute states using `libkv`. +`libkv` supports multiple pluggable backends such as `consul`, `etcd` & `zookeeper` (more to come). + +In this example we will use `consul` + +Install: + +``` +$ curl -OL https://dl.bintray.com/mitchellh/consul/#0.5.2_linux_amd64.zip +$ unzip 0.5.2_linux_amd64.zip +$ mv consul /usr/local/bin/ +``` + +**host-1** Start Consul as a server in bootstrap mode: + +``` +$ consul agent -server -bootstrap -data-dir /tmp/consul -bind= +``` + +**host-2** Start the Consul agent: + +``` +$ consul agent -data-dir /tmp/consul -bind +$ consul join +``` + + +### Start the Docker Daemon with the Network Driver Daemon Flags + +**host-1** Docker daemon: + +``` +$ docker -d --kv-store=consul:localhost:8500 --label=com.docker.network.driver.overlay.bind_interface=eth0 +``` + +**host-2** Start the Docker Daemon with the neighbor ID configuration: + +``` +$ docker -d --kv-store=consul:localhost:8500 --label=com.docker.network.driver.overlay.bind_interface=eth0 --label=com.docker.network.driver.overlay.neighbor_ip= +``` + +### QuickStart Containers Attached to a Network + +**host-1** Start a container that publishes a service svc1 in the network dev that is managed by overlay driver. + +``` +$ docker run -i -t --publish-service=svc1.dev.overlay debian +root@21578ff721a9:/# ip add show eth0 +34: eth0: mtu 1500 qdisc noqueue state UP group default + link/ether 02:42:ec:41:35:bf brd ff:ff:ff:ff:ff:ff + inet 172.21.0.16/16 scope global eth0 + valid_lft forever preferred_lft forever + inet6 fe80::42:ecff:fe41:35bf/64 scope link + valid_lft forever preferred_lft forever +``` + +**host-2** Start a container that publishes a service svc2 in the network dev that is managed by overlay driver. + +``` +$ docker run -i -t --publish-service=svc2.dev.overlay debian +root@d217828eb876:/# ping svc1 +PING svc1 (172.21.0.16): 56 data bytes +64 bytes from 172.21.0.16: icmp_seq=0 ttl=64 time=0.706 ms +64 bytes from 172.21.0.16: icmp_seq=1 ttl=64 time=0.687 ms +64 bytes from 172.21.0.16: icmp_seq=2 ttl=64 time=0.841 ms +``` +### Detailed Setup + +You can also setup networks and services and then attach a running container to them. + +**host-1**: + +``` +docker network create -d overlay prod +docker network ls +docker network info prod +docker service publish db1.prod +cid=$(docker run -itd -p 8000:8000 ubuntu) +docker service attach $cid db1.prod +``` + +**host-2**: + +``` +docker network ls +docker network info prod +docker service publish db2.prod +cid=$(docker run -itd -p 8000:8000 ubuntu) +docker service attach $cid db2.prod +``` + +Once a container is started, a container on `host-1` and `host-2` both containers should be able to ping one another via IP, service name, \.\ + + +View information about the networks and services using `ls` and `info` subcommands like so: + +``` +$ docker service ls +SERVICE ID NAME NETWORK CONTAINER +0771deb5f84b db2 prod 0e54a527f22c +aea23b224acf db1 prod 4b0a309ca311 + +$ docker network info prod +Network Id: 5ac68be2518959b48ad102e9ec3d8f42fb2ec72056aa9592eb5abd0252203012 + Name: prod + Type: overlay + +$ docker service info db1.prod +Service Id: aea23b224acfd2da9b893870e0d632499188a1a4b3881515ba042928a9d3f465 + Name: db1 + Network: prod +``` + +To detach and unpublish a service: + +``` +$ docker service detach $cid . +$ docker service unpublish . + +# Example: +$ docker service detach $cid db2.prod +$ docker service unpublish db2.prod +``` + +To reiterate, this is experimental, and will be under active development.