Writing About Running a local Docker Machine at startup on OSX
The world of containers shifts rapidly. At the time of writing the former recommended method of running Docker on OSX - using the boot2docker CLI to configure a Virtual Box provisioned Linux VM that runs the Docker host - appears to be set to be deprecated. Its replacement is a new CLI called Docker Machine that offers the same functionality as boot2docker, but adds the ability to create and control multiple Docker hosts on a wide variety of providers - such as AWS EC2 instances or DigitalOcean droplets - and to allow these to be used interchangably with the local Docker client.
This is a quick guide on how to get Docker Machine running on OSX, but more importantly how to get a Virtual Box provisioned Docker host running at startup.
Install latest Docker Machine, Docker & Virtual Box
I suggest using brew and brew cask.
$ brew install docker-machine docker
$ brew cask install virtualbox
Create a local Docker host using the Virtual Box driver
If you installed Docker & Docker Machine with Docker Toolkit, this step can be achieved by running the Docker Quickstart Terminal.
$ docker-machine create --driver virtualbox default
Load the local Docker host settings into your environment
$ eval "$(docker-machine env default | tee -a ~/.bash_profile)"
or .bashrc or .zshrc or whatever else you use.
Create a plist file to start the local Docker host
Put this file in ~/Library/LaunchAgents/com.docker.machine.default.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>EnvironmentVariables</key>
<dict>
<key>PATH</key>
<string>/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin</string>
</dict>
<key>Label</key>
<string>com.docker.machine.default</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/docker-machine</string>
<string>start</string>
<string>default</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
Update the entry /usr/local/bin/docker-machine
in the plist with the value of the following command if it’s different on your system. This should only be the case if you didn’t use brew, or use a non-standard brew installation dir. If this applies to you, make sure the PATH value reflects your PATH as docker-machine
attempts to invoke VBoxManage
which will need to be available on one of those paths.
$ which docker-machine
Use launchctl to load the plist file into launchd
$ launchctl load ~/Library/LaunchAgents/com.docker.machine.default.plist
Done.
Alternate Ending for the lazy
This gist provides a way to do the last two steps without having to do any text editing yourself.