Using docker-machine

The Docker machine is a command tool created by the docker team to manage docker servers. It automatically creates hosts and installs docker engine on them and configures the docker client to talk.

If you install the docker machine tool,you can use it like below:

$docker-machine ls
NAME    ACTIVE   DRIVER       STATE     URL                        SWARM
host1            generic      Running   tcp://   host1 (master)
host2            generic      Running   tcp://   host1
host3            generic      Running   tcp://   host1
demo0            virtualbox   Stopped                              
demo1            virtualbox   Stopped                              
demo2            virtualbox   Stopped                              
demo3            virtualbox   Stopped                              
infra            virtualbox   Stopped      

$docker-machine ssh host1

$docker $(docker-machine config host1) ps 
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
ea13099c15d3        swarm:latest        "/swarm join --addr 1"   7 weeks ago         Up 4 days           2375/tcp            swarm-agent


It’s useful to use docker command with docker machine command to connect docker engine on multi hosts.

docker-machine config is just printed like below.

$docker-machine config host1
--tlsverify --tlscacert="/home/anarcher/.docker/machine/machines/host1/ca.pem" 
--tlskey="/home/anarcher/.docker/machine/machines/host1/key.pem" -H=tcp://

As you know,the bash command substitution can make the output of docker-machine command to replace the command itself. It’s one of the funny things using unix shell, too. :-)

Docker machine keeps the configuraion files which are information to connect on docker hosts to ~/.docker/machine/. If you want to share it with the others,you just copy it and share it.

Docker machine is based on ssh authentication to set up docker host nodes. So you can log in hosts to use docker-machine ssh [name].

Docker machine has many drivers that represent the virtual environments.The virtual environments are local linux,AWS,Digital ocean and many more. You can also add a existed Docker host to use driver none or if the host doesn’t has a docker engine,you can use the driver generic to install docker engine.

Docker machine has many options. So I have been using grep command with Unix pipe for searching the right command.

$docker-machine create -h | grep digi
   --digitalocean-access-token              Digital Ocean access token [$DIGITALOCEAN_ACCESS_TOKEN]
   --digitalocean-backups                   enable backups for droplet [$DIGITALOCEAN_BACKUPS]
   --digitalocean-image "ubuntu-14-04-x64"  Digital Ocean Image [$DIGITALOCEAN_IMAGE]
   --digitalocean-ipv6                      enable ipv6 for droplet [$DIGITALOCEAN_IPV6]
   --digitalocean-private-networking        enable private networking for droplet [$DIGITALOCEAN_PRIVATE_NETWORKING]
   --digitalocean-region "nyc3"             Digital Ocean region [$DIGITALOCEAN_REGION]
   --digitalocean-size "512mb"              Digital Ocean size [$DIGITALOCEAN_SIZE]

Basically It’s a convenience tool which looks like other docker tools. But unlike ansible or chef, It only care for Docker engine. If you want to host configuration, You should use other tools with docker-machine.