Working in VMs or containers adds a ton of complexity, for very little benefit.
Installing databases is trivial, with any of `brew`, `yum`, or `apt-get`.
Your `bin/setup` script can take care of automating that for onboarding new developers. The same script gets used in your Dockerfile.
And your CI system is there to as-perfectly-as-possible replicate production, to run your comprehensive test suite (you do practice TDD, right?) and catch things like "forgot to add a library dependency to the setup script" and "app broke because of a library version difference".
Since switching to local-only development, plus containers and CI/CD, my life has gotten a lot nicer.
We would love to see better virtualization disk performance so it is easier for non-team members to contribute. We're happy that despite that people are still able to contribute https://gitlab.com/gitlab-org/gitlab-ce/merge_requests?scope...
I mean that's basically why I moved my self hosted virtual servers from KVM, which was abysmal on regular desktop spinning disks, to LXC/Docker which is comparably fast to native -- plus I can fit a lot more containers than full VMs.
It makes a lot more sense now, thanks!
The whole point of using docker containers is to have the same development experience locally, in CI and in prod.. not have some unknown system libraries on your box which don't match other environments.
Want a database? docker run mysql/mysql-server
Your argument for switching away from containers, seems to actually be arguing for using containers.
It's better to make the environment as close as possible to prod without adding massive inconvenience but docker both adds inconvenience and forces you to use it in production (which entails a whole other set of headaches) if you want close environmental parity, and even then, since it's lightweight virtualization there are hundreds of things which can behave differently between dev and prod.
IMHO you either want very close environmental parity (in which case full virtualization is the way to go) or you don't, in which case running locally is fine.
Plenty of people don't. The main reason being that staging is never quite the same as production...
It is, but I'm not particularly keen on docker as a solution to this problem. It provides a low level of isolation/realism for these services and the tooling surrounding it is relatively poor.
yes. For once database version and one single data set. If you handle multiple customers, multiple versions of a software suite to support which target specific versions of a DB, containers or VMs are handy.
I don't do my dev in a container. That always seemed stupid for me. But my dependencies are in containers.
Here's the related thread on the docker forums. https://forums.docker.com/t/file-access-in-mounted-volumes-e...
Docker outside of Linux is another story. I've run into config issues, VM memory problems, proxy issues, ect. Painful.
I don't even miss iterm2 anymore. i3 tiling WM is iterm2 for the whole desktop on steroids.
They should just open source the whole thing so people could help fix issues or understand how and why it works.
It's also likely impossible to make them work as expected on Windows where the host volume is NTFS and the container is Linux.
So don't use shared volumes for code.
At Convox we offer a Docker development environment in the "convox start" command.
We manage syncing code into the container by watching the host file system and periodically doing a "docker cp" to get source changes into the container.
It works great and shows the power of the Docker API for taking control of your containers.
A bit more info is available here: https://convox.com/guide/reloading/
http://docs.confluent.io/3.0.1/cp-docker-images/docs/intro.h...
/ # uname -a
Linux moby 4.9.4-moby #1 SMP Wed Jan 18 17:04:43 UTC 2017 x86_64 Linux
/ # mount | grep osxfs
osxfs on /Users type fuse.osxfs (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other,max_read=1048576)
osxfs on /Volumes type fuse.osxfs (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other,max_read=1048576)
osxfs on /tmp type fuse.osxfs (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other,max_read=1048576)
osxfs on /private type fuse.osxfs (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other,max_read=1048576)
osxfs on /host_docker_app type fuse.osxfs (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other,max_read=1048576)Now that file just loves growing to 40 GB+ and there is no supported way to reclaim that space.
You can delete the file (or click Reset to factory defaults in the GUI), but then you loose all your Docker's storage, like data volumes.
That's one of the things addressed in the latest stable release. It now reclaims space on startup.
I develop on a Macbook and push things to Linux Servers.