Earlier quoted context omitted.
> If I want to rebuild my machine same as before, or deploy build 100s of servers at different points in time with the same setup, reproducibility is necessary. No it isn't. Reproducible is talking about the process or steps needed to make a machine. You do not need to repeat the steps to produce the first machine to produce the second machine. You can simply clone the first machine, and Docker makes this very easy t…
> Reproducible is talking about the process or steps needed to make a machine. You do not need to repeat the steps to produce the first machine to produce the second machine. You can simply clone the first machine, and Docker makes this very easy to do. Cloning is not the answer since it's all or nothing -- where reproducibility can be achieved piecemeal. Only offering cloning means that starting with the same initia…
What exactly do you mean by flexible reuse, and why is it good? What exactly do you mean by NON updated parts and what does it mean that they are "producible"?
I don't understand your words. Speak plainly!
I don't use a Dockerfile, and the interactive development approach means normally you start up your clone, work on it for a bit, then commit the clone.
Here's an example:
$ docker run -t -i debian:jessie bash
root@264b51d62d0e:/# apt-get install nvi
E: Unable to locate package nvi
root@264b51d62d0e:/# apt-get update
root@264b51d62d0e:/# apt-get install nvi
$ v=`docker commit 264b51d62d0e`
$ docker tag $v whatever
The mistake with the first line didn't mean I needed to start over. In a realistic example that could save me an hour of rebuilding. I can push my tag to other developers I'm working with, and they can use `docker diff` to find out what the differences are.> But until one reaches that, they have to experiment with various configurations (to end with the specific Docker image they want). Without reproducibility, they can't be guaranteed that their various test configurations under test are the same and only their latest changes differ. Perhaps another thing they left as is broke too.
This is a danger that requires discipline. Committing instances is very cheap, so it is good practice to commit often, and keep notes (commit messages). I think version control is common enough that most sysadmins know how to do this, and other packaging systems suffer from the exact same problem.
However because it's interactive, that need to experiment is satisfied fully and the sysadmin/user gets to use all of their tools to develop the working prototypes.
> But if you mess with the clone it's not a clone anymore. And if a whole team has to mess with the clone over some period of time to update or fix it, there's hell to keep track what went on.
This is not true.
With Docker you are encouraged to make many clones and branches and try different things out. The clones that are useful get tagged and forwarded to others.
A sysadmin who isn't using version control has other problems!
> Only offering cloning also means that when you need to update only a part (e.g. because of security reasons) you can't just use the same dockerfile with the changed component and be sure that you'll get an otherwise identical system. So you don't get flexible updating.
I don't understand this complaint, but it mentions dockerfiles again. Let me be clear: I never use dockerfiles.
If I want to update for security reasons (as I mentioned in my heartbleed example), then I will find it easier and faster to implement the fixes interactively. Having to write my recipe for nix-os and run it and wait while it runs is insecure because you are vulnerable longer.
> Besides, reproducibility doesn't preclude cloning as part of the process -- it's a superset of it, offering way more flexibility.
The non-interactive (and "reproducible") approach is slower, less secure, more prone to errors. I don't believe it can possibly be "more flexible" since the interactive approach can do everything the non-interactive approach can do and faster.
I do admit that Docker's build artefacts use more disk space and more Internet bandwidth than plain text nix configuration artefacts, but this is not fundamental to interactive development, which is specifically what I'm advocating.
> Any significant contribution you might have for software engineering in regards to that?
> That's just an argument from popularity. And not necessarily a popularity they opted for, while also being provided with the alternative.
Arguing that "nobody does it so it must be wrong" isn't any better than "just because everyone does it doesn't make it right".
I really think you need to learn about something and make up your own mind, instead of repeating "Docker is Bad" because you read something like that on a blog.
I also think you should really try to understand what I am suggesting before you go arguing against it.