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:
- http://thenewstack.io/why-did-docker-catch-on-quickly-and-why-is-it-so-interesting/
- http://thenewstack.io/hypervisors-container-era/
- https://blog.codeship.com/why-docker/
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:
- Slow on Mac: https://github.com/docker/for-mac/issues/77
- Only recent latest versions of Window 10 (“Build 10586 or later”) are supported
- Slow on Windows: https://github.com/docker/for-win/issues/188
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:
- https://github.com/brikis98/docker-osx-dev
- https://github.com/blinkreaction/boot2docker-vagrant
- https://github.com/codekitchen/dinghy
- https://github.com/leighmcculloch/docker-unison
- https://github.com/gansbrest/hodor
- https://github.com/adlogix/docker-machine-nfs
- others…
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!