News for hackers. Stuff that matters.
Re:My VM is lighter and safer than your container by koolba on Thursday November 02, 2017 @12:59PM (#15612140)
Putting aside deployment, Docker has been a sheer joy for local development. It provides a complete wrapper for the voodoo and tribal knowledge required to run packaged apps.

Gone are the days of building a VM from scratch, following instructions for a previous version of the OS, installing 10 dependencies, installing the app, cursing when it fails half way through, installing another missing dependency, installing the app again, bouncing the server, and then having it all fall apart again because the app isn't registered to run as a service at startup (because you missed that step).

All of this was possible before Docker through Vagrantfiles and the like but Docker made it much cleaner and significantly less resource intensive (i.e. no longer need a VM per item).

Re:My VM is lighter and safer than your container by apple4ever on Thursday November 02, 2017 @01:26PM (#15612361)
This is why you do config management. Here, our Vagrant builds are exactly like our development and production servers. Its literally the same config to run them both, with just variables to differentiate as needed.
Re:My VM is lighter and safer than your container by derefr on Thursday November 02, 2017 @03:40PM (#15613556)
Your argument falls down when it's not your development-time build, but some third-party's. Docker allows you to basically treat "other people's daemons" the way most programming runtimes treat "other people's libraries": as something you can just toss into a dependency spec file and have "pulled in" to your program during build.

With Vagrant, I still need to figure out how to install e.g. Postgres, or Redis, or whatever, into the Vagrant VM (usually using salt/chef/ansible/etc.), or—much more rarely, because this isn't "idiomatic"—I'll find a Vagrantfile for someone else's virtual Postgres appliance VM. Which I then need to integrate into my virtual-network architecture as its own separate VM with its own lifecycle management et al.

With Docker, my app's image just depends on the postgres:9.6 Docker image, and so when I start my app, a copy of Postgres is downloaded and started as well. My app "owns" this container: the config management for what version of Postgres is running is done by my app (just like a library dependency), rather than the resulting container being thought of as a separate "piece" of my system to be managed by the ops team. The ops team manages my service, which contains Postgres as a component. Same as if I had built a VM that contained both my app and Postgres.

In short, containers (and especially the higher-level abstraction of container "services" or "pods") allow you to build and plan your service as a set of separate black-boxes, rather than owning their build processes; but then allow you to run your service as a unit and upgrade it as a unit, rather than each build-time component resulting in a separate runtime consideration.

---

And yes, all this could be accomplished just as well with VMs. There's nothing specifically about containers that makes them able to do things that VMs cannot. It's just how the two ecosystems have evolved.

If you:

• built an equivalent of Docker's "public registry" and "private URL-accessible registries" for VMs—maybe by generalizing AWS's AMI registry

• ensured that all common VM software could start VMs using a spec that pointed at an AMI URN/URL, downloading and caching AMIs from wherever in the process

• encouraged a public stance toward having a Vagrantfile in your project root that will—with no configuration—build a public-usable virtual appliance out of your project

• added automatic-build-from-Vagrantfile support to your public AMI registry

• encouraged an 'immutable infrastructure' approach to the resulting Vagrant VMs, such that they'd put all their state into hypervisor-provided stateful mounts (of SAN disks or NFS or what-have-you)

• enforced a common semantics for services/pods of VMs in hypervisors

...then you could treat VMs the way you treat containers, using the VM-management client tooling to push out a version-upgrade of your service, that would replace various VMs with VMs based on a newer AMI—without losing any state.

It's all a matter of changing the culture and idioms. That doesn't mean it's easy.

Re:My VM is lighter and safer than your container by djb_hackernews on Thursday November 02, 2017 @02:38PM (#15613054)
Docker doesn't imply not having config management. In fact for our infrastructure that was using puppet to build vms, we just run puppet as part of `docker build` instead. Still using config management and our prod, staging and dev environments run the same exact blobs.
Re:My VM is lighter and safer than your container by geerlingguy on Thursday November 02, 2017 @09:11PM (#15615955)
Sometimes; and tools like Ansible Container can help have the best of both worlds.

But for every time I see someone using actual configuration management and best practices for reproducible Docker architecture, I see a hundred times when there are brittle and convoluted shell scripts or worse, entire application definitions in a 500+ line Dockerfile (which is neither configuration management nor scripts. At least the scripts are somewhat more portable and maintainable!)

Re:My VM is lighter and safer than your container by jjawssd on Thursday November 02, 2017 @01:05PM (#15612190)
Instead of writing a build script to put everything together from a solid foundation, Docker implicitly encourages you to perform a succession of random undocumented changes on the original foundation endlessly. Also known as "tribal knowledge." And this is all somehow "cleaner" than build scripts. "Putting aside deployment" means discouraging reproducibility and encouraging book burning.
Re:My VM is lighter and safer than your container by kenforthewin on Thursday November 02, 2017 @01:25PM (#15612357)
No, putting aside deployment means he was talking about the benefits of Docker for local development instead of the benefits of Docker for deployment. As to your talk of a build script, this is what the Dockerfile is for, and it is heavily documented.
Re:My VM is lighter and safer than your container by jjawssd on Thursday November 02, 2017 @02:07PM (#15612730)
Correct, but a Dockerfile is not the only way to create a docker image.
Re:My VM is lighter and safer than your container by unsignedinteger on Thursday November 02, 2017 @03:16PM (#15613387)
Packer has a docker-builder which constructs docker images without a dockerfile, found it useful for quickly converting between creating AMIs and Docker images for EC2.
Re:My VM is lighter and safer than your container by amcca029 on Thursday November 02, 2017 @01:20PM (#15612315)
can you describe this solid foundation in more detail?
Re:My VM is lighter and safer than your container by nur0n on Thursday November 02, 2017 @01:39PM (#15612463)
I think depends on the project, no? You first specify your dependencies, then provide a way to use the dependencies to build the end project.

If you don't have to specify the dependencies or the build process to the user, then you can get away with the build process not being well defined. Docker is a win for 'easy installation', but I wonder if it degrades the quality of projects which rely on it?

Re:My VM is lighter and safer than your container by berdario on Friday November 03, 2017 @05:18AM (#15617738)
> Gone are the days of building a VM from scratch, following instructions for a previous version of the OS, installing 10 dependencies, installing the app, cursing when it fails half way through, installing another missing dependency, installing the app again, bouncing the server, and then having it all fall apart again because the app isn't registered to run as a service at startup (because you missed that step).

Weird, You wouldn't have to deal with Nginx and services for local development

What you describe doesn't sound like local development... But rather acceptance/manual integration or product/feature review/approval

But in places with good automation there's tools or a pipeline that automatically spins up instances (potentially containers) with your branch/feature and automatically link them to other services and exposes them

From this point of view, docker can be useful for deployments... But it's mostly useless for development, since it doesn't help with keeping prod/Dev environments identical to each other

Re:My VM is lighter and safer than your container by koolba on Friday November 03, 2017 @07:49AM (#15618383)
> What you describe doesn't sound like local development... But rather acceptance/manual integration or product/feature review/approval

> ...

> But it's mostly useless for development, since it doesn't help with keeping prod/Dev environments identical to each other

If you're working on a feature that integrates with LDAP, you need an LDAP accessible locally. Docker lets you spin one up near instantly. The alternative I'm describing is to install the LDAP server locally or in a VM. Both are definitely options, but they're significantly more intrusive or involve (or both).

Ditto for a Postgres DB, a Redis server, or any other external resource needed by your app. It's not just for integration tests. You need them available to develop against and Docker provides a consistent way for everybody to spin up those resources quickly.

Re:My VM is lighter and safer than your container by chaostheory on Thursday November 02, 2017 @01:25PM (#15612350)
Yes, imo Docker makes it possible to migrate to Windows 10 from Mac OS and Linux
Re:My VM is lighter and safer than your container by SubuSS on Thursday November 02, 2017 @05:42PM (#15614544)
I have just barely fiddled with docker/kube - run into vagrant in one instance. I thought it was the reverse -https://www.quora.com/What-is-the-difference-between-Docker-...

Vagrant can mimic multiple OSs while containers are stuck to host os - What am I missing?

Re:My VM is lighter and safer than your container by mastax on Thursday November 02, 2017 @07:15PM (#15615247)
Docker for Windows/macOS run containers inside of a Linux VM, so nothing changes there. There's also Windows Server Containers which are what they sound like.
Re:My VM is lighter and safer than your container by jazoom on Thursday November 02, 2017 @05:07PM (#15614304)
Plus WSL. That makes so much pain go away.