brew cask install docker-machine
$ docker-machine create --help | wc -l
117
$ docker-machine create --help | grep digitalocean
--digitalocean-access-token
Digital Ocean access token [$DIGITALOCEAN_ACCESS_TOKEN]
--digitalocean-image "ubuntu-14-04-x64"
Digital Ocean Image [$DIGITALOCEAN_IMAGE]
--digitalocean-region "nyc3"
Digital Ocean region [$DIGITALOCEAN_REGION]
--digitalocean-size "512mb"
Digital Ocean size [$DIGITALOCEAN_SIZE]
--driver, -d "none"
Driver to create machine with. Available drivers: amazonec2, azure,
digitalocean, google, none, openstack, rackspace, softlayer, virtualbox,
vmwarefusion, vmwarevcloudair, vmwarevsphere
$ docker-machine create -d digitalocean \
--digitalocean-access-token $(cat .do_token) \
--digitalocean-image docker \
--digitalocean-region sgp1 \
docker-machine-test
INFO[0000] Creating SSH key...
INFO[0002] Creating Digital Ocean droplet...
INFO[0006] Waiting for SSH...
INFO[0075] Configuring Machine...
INFO[0091] "docker-machine-test" has been created and is now the active machine.
INFO[0091] To point your Docker client at it, run this in your shell:
$(docker-machine env docker-machine-test)
$ docker-machine ls
NAME ACTIVE DRIVER STATE
docker-machine-test * digitalocean Running
URL SWARM
tcp://128.199.65.118:2376$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
$ cat Dockerfile
FROM python:3.4-onbuild
CMD ["python", "app.py"]
$ cat requirements.txt
Flask
$ cat app.py
import os
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return "Hello from {}".format(os.environ['HOSTNAME'])
app.run(host='0.0.0.0')$ docker build --rm -t marksteve/flask-app .
...
$ docker run -d \
--name flask-app \
-h flask-app \
-p 5000:5000 \
marksteve/flask-app
$ docker ps
...
$ curl $(docker-machine ip):5000
Hello from flask-app
$ docker rm -f flask-app
flask-app$ docker run --rm swarm create
fcdc4eeff9c6e809e7863b08bc1c8252
$ docker-machine create \
-d digitalocean \
--digitalocean-access-token $(cat .do_token) \
--digitalocean-image docker \
--digitalocean-region sgp1 \
--swarm \
--swarm-discovery \
token://fcdc4eeff9c6e809e7863b08bc1c8252 \
docker-swarm-test
$ docker-machine create \
-d digitalocean \
--digitalocean-access-token $(cat .do_token) \
--digitalocean-image docker \
--digitalocean-region sgp1 \
--swarm \
--swarm-master \
--swarm-discovery \
token://fcdc4eeff9c6e809e7863b08bc1c8252 \
docker-swarm-master
$ $(docker-machine env --swarm docker-swarm-master)$ docker info
Containers: 3
Nodes: 2
docker-swarm-master: 128.199.198.38:2376
└ Containers: 2
└ Reserved CPUs: 0 / 1
└ Reserved Memory: 0 B / 490 MiB
docker-swarm-test: 128.199.65.118:2376
└ Containers: 1
└ Reserved CPUs: 0 / 1
└ Reserved Memory: 0 B / 490 MiB$ docker run -d -p 5000:5000 marksteve/flask-app
$ docker run -d -p 5000:5000 marksteve/flask-app
$ docker ps
... PORTS
... 128.199.65.118:5000->5000/tcp
... 128.199.198.38:5000->5000/tcp
$ docker run -d -p 5000:5000 marksteve/flask-app
FATA[0000] Error response from daemon: unable to
find a node with port 5000 availabledocker --label tag=something
docker run -e constraint:storage==ssd
docker run -e affinity:container==container_name
docker run -e affinity:image==redis
docker rm $(docker ps -aq)
docker-machine rm $(docker ls -q)