You are on page 1of 5

How to install Docker on Mac OS using brew?

admin January 19, 2017

What is Docker?
Docker is the next step on long IT containerization way. What does it mean? Years ago, you could
run each application/process in particular container, that application couldn’t go outside the
container which it was run. It was very safe but difficult to manage and not sharable. So you
couldn’t easy share your container to other machine or to other developers to reuse for example by
open source community.

So, that solution was a little bit complicated and worked only on Linux. Today we have Docker,
which allows you to run containers on all operation systems. What is important, this tool is not only
modern but also easy to manage and easy to share to others developers.

1 What is Docker?
2 Other ways to install it
2.1 – first method
2.2 Docker Toolbox – second method
3 Install
4 Useful tools
4.1 docker-machine
4.2 docker-compose
5 How to use
5.1 Access by domain
6 Potential problems
6.1 Sharing files
6.2 Speed of I/O process
6.3 Access via domain/IP
6.4 Related posts:

Other ways to install it

In this post, I want to show you how to install Docker by using brew which installation process I
wrote last time. For me, it’s the easiest and safest way. But there are a few other possibilities to
install it on Mac OS. – first method

First what you have to do is to go to Docker website and just download and run the .dmg file.

This is probably the easiest way, but unfortunately not the best. Using native install method you
don’t have to install VirtualBox to run Linux, but sharing files between your Mac OS and systems in
containers are really slowly. I can recommend that solution only if you want to test something or
your project doesn’t use a framework with a lot of files.
Docker Toolbox – second method
It’s an app provided by Docker Company for Mac OS and Windows. The special feature in this
toolbox is the requirement for VirtualBox, which will be a supervisor to run Linux. So, Docker is
available as another machine in Docker environment. This toolbox contains also docker-compose
(more below) and Kinematic, which allow you to manage your container by using GUI than a
command line.

I guess you have installed brew if not just follow this page and do everything that I’ve described.

If you are ready, open your terminal and type something like this:

001 brew install docker docker-compose docker-machine xhyve docker-machine-driver-xhyve

If you have done it that you’ve received notice that docker-machine-driver-xhyve has to run as
root , so you have to execute that commands:

001 sudo chown root:wheel $(brew --prefix) /opt/docker-machine-driver-xhyve/bin/docker-

002 machine-driver-xhyve
sudo chmod u+s $(brew --prefix) /opt/docker-machine-driver-xhyve/bin/docker-machine-

Both commands will ask you for a password. Don’t worry to type it in a command line.

If everything goes ok then you can create your first docker machine, just type this command:

001 docker-machine create default --driver xhyve --xhyve-experimental-nfs-share

This command, as you suppose, creates a docker machine, using the xhyve driver.
--xhyve-experimental-nfs-share – this flag allows you to share each file in your /Users/ folder
between Mac OS and Linux run on Docker.

Because you can have a lot docker machine, you can type this command in your terminal:

001 eval $(docker-machine env default)

It registers a few variables, which allow you to use default docker machine without typing “default”
each time.

Useful tools
Probably, you’ve noticed that with docker you installed also docker-machine and docker-
compose . These tools are not required but they are the strength of docker.

This tool allows you to prepare a lot of docker machines on your Mac OS, so you can have a lot of
containers on many Linux distributions. You can dump all available commands just by typing
docker-machine --help but most likely you will use three of them:

001 docker-machine start default

docker-machine stop default
docker-machine restart default

I guess I don’t have to describe what exactly this commands do. It’s so obvious. One thing you need
to know, if something goes wrong, just try to restart your docker machine.

The main goal of docker: you can write like this “one process = one container”, but each app
requires a lot process it could be a PHP, HTTP server, some database etc. Of course, you can run
containers for each process manually, which is not a big deal with 3 containers, but trust me it
escalates very fast, so you need an easy tool to manage your container and to manage the
dependencies because one container can require access to another container. For example, PHP
app needs information from a database, but it doesn’t need access to HTTP server. Of course, and
HTTP server requires access to PHP.

To work with docker-compose you need to create an YAML file called docker-composer.yml
where you describe which container you want to create and how they are linked between each

That file can look like this:

001 version: '2'
003 image: mysql:5.7
004 volumes:
005 - db_data:/var/lib/mysql
006 restart: always
008 MYSQL_DATABASE: wordpress
009 MYSQL_USER: wordpress
010 MYSQL_PASSWORD: wordpress
011 wordpress:
012 - db
013 image: wordpress:latest
014 ports:
015 - "8000:80"
restart: always
017 WORDPRESS_DB_HOST: db:3306
019 volumes:
020 db_data:

As you can see, you are creating two containers, first, contains MySQL database and second one – a
WordPress instance. This example is flattened, in normal case you should split WordPress instance
to three another containers: PHP, HTTP server and one for WordPress files.

There is also created one volume, which contains files of MySQL database. This solution prevents
loosing data when you turn off your Mac, or just reset docker-machine or this particular container.

If you want to read something more about parameters available in docker-compose file, you can
just go to docker documentation.

docker-compose , as well as other tools, provides a lot of commands available from a terminal, the
number one is:

001 docker-compose up -d --build --remove-orphans

This command runs all containers defined in your docker-compose file. If it is needed – rebuild and
remove old unused containers.

How to use
Everything that you need is in the section above. You can manage of course each particular
container directly from command line using command docker . But it’s just wasting a time.

Access by domain
Probably you want to access to your container by your web browser using some domains. You need
to know what is IP of your docker machine and you can check it using command line just typing

001 docker-machine ip default

You see IP and then use that IP in your /etc/hosts file.

Potential problems
Because you are trying to run Linux environment on Mac OS you can some across a lot strange
problems if you want to use it in common work. Fortunately, you just need to follow some rules to
enjoy work with docker.

Sharing files
If you installed a docker as described above you can share only files from your /Users/ folder. You
can debug what is sharable directly on your docker machine, which can receive access directly from
command line, like this:

001 docker-machine ssh default

Now, you are logged on your Linux and can browse to / and check is there /Users/ folder which
contains files from your Mac OS. If you don’t see your files, just try to reinstall Docker and xhyve.

Speed of I/O process

Because docker needs transfer files between your Mac OS and Linux using the NFS it’s always more
slowly then operation directly on your disk. So, if you want to boost up your application you have to
remember to share only needed files. if you are backend develop you don’t share frontend
javascript libraries, just put in into inside container.

Don’t forget to ignore cache and logs files!

Access via domain/IP

Restarting Mac OS or docker-machine sometimes restarts also IP of the docker machine. If you
can’t connect to your docker just check the current IP using this command:

001 docker-machine ip default

If it doesn’t work, you have to update domains in your /etc/hosts file.