evbauer / MESA-Docker

MESA in a Docker Container for easy installation
MIT License
37 stars 8 forks source link

Docker Reproducable Builds #15

Open danieldjewell opened 4 years ago

danieldjewell commented 4 years ago

Hi Evan,

I was reading #11 and had to laugh about the confusion. Anyhoo, I'm definitely in the right place and am talking about the right MESA (mesa.sourceforge.net)

The ultimate point made in #11 still holds - it's beneficial/important on many levels to have 100% reproducable builds in a docker image (which is why the Dockerfile concept even exists and what makes Docker so powerful -- with the same Dockerfile as the input, the finished container should be 100% identical for everyone ... each and every time... Which is amazing for testing - i.e. ensuring that your environment is 100% pristine and 100% consistent so that you don't have that fun situation of making a seemingly unrelated change to the OS and having your code break! :grin: )

The other major advantage is the way that Docker builds the container as intermediate layers - for the most part, each statement in a Dockerfile creates a new layer. If you change a statement midway through the file, Docker re-uses the parts above it that were already built - potentially making a rebuild significantly faster (depending on where your change is).

Essentially, the difference is: instead of starting a container, editing it (through say docker exec <container> bash), and saving it, you just put all of your "editing" commands into the Dockerfile - anything you need to run/edit/compile/etc. goes right in there. Which makes it 100% reproducable and much easier to fix/upgrade/edit.

Thoughts?

evbauer commented 4 years ago

Hmm, good thoughts. It does sound like this would be the best practice. I just haven't invested the time to become an expert in building via Dockerfiles, so my habit is to build interactively. I'll leave this issue open for a rainy day. If I haven't gotten to it by the time the next MESA release rolls out, I'll at least try to build the new one using a Dockerfile.