Teracy's Blog

Get experience shared!

Teracy-dev - the Only Truly Universal Productive Development Platform With Docker on macOS, Linux and Windows

Docker is great to work with, it solves a lot of problems on development, distribution, and production deployment.

Why Docker? You can find the answer here:

Docker works great on Linux, however, it’s very challenging to make it work universal and consistent on Mac and Windows. There are lots of efforts to solve this problem, from Docker themselves and from Docker community, too. However, we haven’t achieved that stage yet (until teracy-dev).

These are some of the problems that Docker community has to deal with on Mac and Windows:

  • No consistent universal development environment and workflow on Linux, Windows, Mac. This is a very important factor for team collaboration so that anyone from any OS platforms could collaborate and help each other with no differences in the development environment.

  • Mounted volumes on VirtualBox use vboxsf, which is extremely slow. This is true for Boot2Docker and Vagrant default file sync mechanism on Virtualbox.

  • Native Docker applications offered by Docker:

  • File watching is broken on VirtualBox since vboxsf does not trigger the inotify file watching mechanism. nodemon, hello?

There are a lot of Docker community projects trying to solve those problems:

However, those existing projects do not really resolve all the problems or do not reflect our vision for a productive development platform.

You can check out our vision for teracy-dev for such the productive development platform.

That is the reason why we created teracy-dev. We’ve been using and loving it for more than 3 years and counting.

teracy-dev reflects our vision for a truly universal productive development platform that anyone can use to develop software easily. It’s very easy to customize any OS that you can use for your VM. It brings development and production environment closer and closer.

It is very important for a distributed team like us to work with everyone from different teams all over the world on different projects with different stacks and teracy-dev helps us a lot.

Moreover, teracy-dev is not tightly coupled with anything, you’re free to choose anything to build up your development VM machine. You can choose different OS platforms, choose different software packages to be automatically installed with the help of different configuration management tools. It’s up to you to choose anything other than default settings.

With default settings, teracy-dev chooses Ubuntu as the base OS with docker and docker-compose installed to start developing software with Docker right away after $ vagrant up.

teracy-dev v0.5.0 is leveraging Docker for development as we believe in the future of containers and Docker.

Let’s have some comparisons between teracy-dev and other solutions:

Criteria teracy-dev docker-osx-dev Docker Toolbox Docker native app
same workflow on Linux, Mac, Windows
native speed on mounted volumes
2-way file sync
file watching (inotify)
open source
customization 🚫 🚫

✅: fully support

❌: no or partial support

🚫: can be achieved but not encouraged

Let me explain the criteria:

  • “same workflow on Linux, Mac, Windows”: the usage should be the same on Mac, Linux, Windows. Docker native app only supports >= Windows 10, that’s why it’s marked as ❌.

  • “native speed on mounted volumes”: the speed should be as fast and native as on Linux

  • “2-way file sync”: for syncing back and forth on mounted volumes, this is mandatory for development

  • “file watching (inotify)”: for auto reload when files change

  • “customization”: you have full control and are encouraged to change anything that you want to suit your need, no hidden stuff, no lock-in and can still upgrade seamlessly.

Let’s see what the same workflow means when developing a simple hello world nodejs application from scratch with teracy-dev by watching the following videos:

On Linux (Ubuntu):

On Windows:

On macOS:

They all contain the same steps, that’s the meaning of the “same workflow”.

teracy-dev is not perfect, though. There are some improvements that we’d like to address.

The first thing we’d like to improve is to reduce the setup time. It takes time (around 20-30 mins) to download the vagrant box (Ubuntu 16.04) for the first time. This is for the first time only, however. After the first time, you can destroy and provision the same VM within some minutes. We could use some other smaller boxes (for example, boot2docker base box) but we’d like to stick to the most popular Linux OS that is widely used in production. We try to make development and production environment as close as possible. This is by default, you can choose different base boxes as you wish.

teracy-dev v0.5.0 is under preview stage, we need to add more documentation and get more community feedback.

teracy-dev is created to give back to open source community as we learn and get a lot from our amazing open source community.

And we need you, please try and let us know your feedback and we’ll together fix any problems.

You should get started with teracy-dev here: http://dev.teracy.org/docs/develop/getting_started.html

In summary, teracy-dev brings Docker closer to Vagrant = love.

Thank you and happy hacking with teracy-dev!