> Only offering cloning means that starting with the same initial Dockerfile and making some needed updates to it, one can't be sure that the NON updated parts will be producible. So you don't get flexible reuse.

> What exactly do you mean by flexible reuse, and why is it good?

I already explained. What exactly don't you understand?

It's about being able to reuse a recipe (dockerfile, etc.) for creating your final artifact while ALSO being able to change it -- as opposed to the "take it or leave it" case with cloning some binary blob.

> What exactly do you mean by NON updated parts

I wrote "Only offering cloning means that starting with the same initial Dockerfile and making some needed updates to it, one can't be sure that the NON updated parts will be (re)producible".

My typo aside, the meaning is clear: with cloning available but no reproducibility, when you want to only change part of a container (e.g. update a specific piece of software there), you don't know (when you re-create the container) that the other parts you didn't change are as they were before.

Basically that's the very definition of non-reproducibility.

> 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.

That's neither a good, nor a new process. That's like 90's sysadmin work. For one, you're doing all this work manually. Second, if you want to revert/change something you made, you have to mess with your clone, potentially putting it in some weirdo state -- you basically remove the scriptability part and just mess with your clone manually. Or you write some custom scripts or use some provisioning software -- which brings you right back to the reproducibility discussion.

With reproducibility you wouldn't have to commit the clone -- just the "recipe" to make. And you would still COULD commit the clone if you wanted (as I said, reproducibility is a superset of merely working with clones).

> 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.

Doesn't save you anything over reproducibility -- since the latter does not prevent cloning. But having only cloning (which is what the parent lamented) does deprive you of the benefits of reproducibility.

"In a realistic example", for example, things could get much more hairy (and many more tests and changes could be needed), beyond merely forgetting to update apt before installing nvi.

And all of these changes and process would be totally opaque to your clonable blob.

> 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.

The can use docker diff and try to guess what the differences are -- and what the intention was, etc. Because docker diff is just a record of file changes, not of procedures followed and the intentions behind them.

> This is a danger that requires discipline.

And that's (part) of the whole problem. Anything that requires discipline on the human part and that could be automated is busy-work -- and error prone.

> With Docker you are encouraged to make many clones and branches and try different things out.

Yes, but that's meant for safe-keeping, like vm-snapshots. It doesn't replacing actually having a written record of what you did, what's supposed to be istalled inside, and why.

> I don't understand this complaint, but it mentions dockerfiles again. Let me be clear: I never use dockerfiles.

So again, a throwback to the manual devops age.

> 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".

Perhaps. But I fail to see where I did that.

> repeating "Docker is Bad"

Who said Docker is bad? Docker is great. It's non reproducibility that's the issue.