Run Docker in VirtualBox with Vagrant on Mac OS X
Update (Oct 16, 2014): Docker 1.3 and the
corresponding update to boot2docker
obsoletes this workaround by allowing you
to mount directories directy from OS X to Docker containers.
Docker used to include a nice Vagrantfile, and this was the preferred way
to run Docker on OS X. Since version 0.8.1 (PR #4281), though, the
Docker documentation refers Mac OS X users to boot2docker
. boot2docker
runs
the Docker daemon in a VirtualBox VM, but the Docker client runs from the
host Mac OS X machine. That’s super cool, and props to the Docker
developers for getting that to all work. That said, I can’t stand it for
doing any sort of application development because when you run docker run -v
,
host directories refer to the machine running the Docker daemon, not the
client. This means that I can’t easily mount directories right from
my Mac.
I advocate instead running both the Docker client and server in a virtual
machine in VirtualBox using Vagrant. If you haven’t done so already,
download and install both VirtualBox and Vagrant. Vagrant uses a
text file named Vagrantfile
to configure new virtual machines. By default,
Vagrant will synchronize the contents of the directory in which a Vagrantfile
resides to the VM’s /vagrant
directory. This is very helpful if you’d like to
modify source files on your Mac with your favorite tools and run corresponding
Docker containers on the VM. Here’s a Vagrantfile
to get you started:
# -*- mode: ruby -*-
# vi: set ft=ruby :
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "precise64"
config.vm.box_url = "http://files.vagrantup.com/precise64.box"
config.vm.provision "docker"
for i in 49000..49900
config.vm.network "forwarded_port", guest: i, host: i
end
end
This specifies a new 64-bit Ubuntu 12.04 virtual machine with Docker and
conveniently forwards all ports in the range 49000..49900
from the host to
the virtual machine. That way, if you run a web server (for example) from your
VM, you can open a web browser from your Mac and see your site.
Then, we just start up the VM, establish an SSH connection with it, and start using Docker.
Your-Mac:docker-vm$ vagrant up
Your-Mac:docker-vm$ vagrant ssh
vagrant@precise64:~$ docker ps
Vagrant’s Docker Provisioner, by the way, can do some pretty neat tricks like building Docker images upon provisioning. Check out the docs.
blog comments powered by Disqus