Skip to content

Instantly share code, notes, and snippets.

@termie
Created May 13, 2016 20:23
Show Gist options
  • Save termie/4b693e0d317c1b53c09c969a704851cc to your computer and use it in GitHub Desktop.
Save termie/4b693e0d317c1b53c09c969a704851cc to your computer and use it in GitHub Desktop.
Please rise for Andy Smith, CTO in the Holy Order of Wercker, First
Father to Openstack, the Lightly Bearded, Tamer of Gophers, Catcher of Pythons,
Friend to Computer Wizards and Server Wrastlers.
[PHOTO church]
Hi -waves-. You may be seated. Thank you to coming today to this first meeting
of the Church of Reproducibility.
Please pull out your wikipedia, turn to page Reproducibility ... and read
along with me:
[PHOTO hella words]
If reality is governed by Superdeterminism or other forms of hard determinism, no experiment is Truly Reproducible as the exact global patch of that event in spacetime (i.e.: reality) only occurs once. Locally, the same spatio-temporal patterns appear to occur everywhere, but this is only a local observation. This result follows as, in order to Exactly Reproduce an event, ALL the variables that cause the event have to be the same AND the event has to be the same, Superdeterminism implies that this can only happen if it is predetermined to happen, and not otherwise.
[PHOTO monkey]
And lo it was that some cryptic sounding philosophical text was added to this
presentation without much bearing on the actual topic being discussed but
does reference the state of reality at any given moment as being a patch,
which is pretty cool, and also talks about variables, so basically it is
about programming and systems.
[PHOTO simulacra]
Systems are, at their heart, simulacra of reality without many of the pesky
variables, and they strive failingly for determinism. Systems are our way of
stripping away all the context of the cosmos until only those things that we
may control still exist, and then we attempt to set them in motion that they
might enact our vision. We fight the Halting Problem in all its forms and
drive our foundations ever lower in hopes that this time, at last, there is
no way they will break.
[PHOTO leaky]
Systems are leaky vessels perfect only in that unreachable country that is the
mind, and it is our greatest work to toil endlessly to fill them. To say a
system works is only to say it is working right now, but reproducibility
strives to allow every future to be the same as now. Immortality does not
exist, but perhaps there is a way never to die for long. Idempotency may
absolve many sins.
[PHOTO pot maker]
By working towards reproducibility in all our actions, from the local
development environment all the way through build, testing and deployment, we
begin to fill our lives and the lives around us with truth rather than hope,
with foreknowledge rather than hindsight. There is comfort and strength
knowing that another who interacts with your system will produce the same
reaction, confidence in seeing that repeatedly.
[PHOTO plug]
As CTO of the Holy Order of Wercker, I am tasked as a shepherd towards these
truths and implore you to join me in seeking them out. Our container-centric
automation platform provides ample tooling for developing, building and
deploying your multi-service cloud-native application. It works both locally,
via a single go binary, and on our platform in the cloud, via the same
binary.
[PHOTO forrest]
The path to reproducibility that we all must walk is many-fold and is
beset on all sides by the tyrannies of entropy, short-term vision, legacy
systems and other people's code. Certainly not your own nor any member of this
congregation's code. But they are the paths we must walk nonetheless, for
only that which is reproducible can be true, only that which is reproducible
can be stable.
[PHOTO heat death]
We of the Church aim for stability of the system within our own lifetimes,
that is to say prior to the Great Stabilization that will be the heat death
of the universe. The unknown may never fully be known, but 5 nines is a pretty
damn good milestone to strive for, and 4 nines ain't too shabby. Let your
system be filled with nines and grow in their light.
[PHOTO savannah]
Much like the fire that warmed our ancient ancestors on cold savannah nights
[PHOTO alexandria]
but also destroyed so much knowledge and culture when it burned down
the Library of Alexandria,
[PHOTO]
lately many have begun to handle a new
tool in the fight for determinism, and many have been burned.
[PHOTO rosetta stone]
To assist in the prevention of further injury, the Church has drafted a
series of commandments on the usage of this tool, Docker, and I will
share them with you now.
[PHOTO lightning]
Thou Shalt Not Run Containers Without --rm
While in many ways Docker appears to be a tool for reproducibility, its
path differs quite drastically from the Church's. The Docker Syndicate's true
goal is to use all available disk space on all drives everywhere.
Besides even the disk space mission, not removing a container after running
implies something even more insidious: that you cannot generate the same
container again at will.
[PHOTO lightning]
Thou Shalt Not Use Data Volumes
In more recent versions, members of the Church have forced The Docker
Syndicate to include the ability to list created volumes and delete them.
Previously, this was not the case and having your disk fill with unfindable
data volumes goes a long way towards the disk suffocation of the world.
In current times, however, data volumes will not be automatically cleaned up
or garbage collected and represent an additional out-of-sight system to
manage.
There do exist a variety of alternative volume backends that may alleviate
much of the pain, and simply using host mounts will keep your data in a
predictable location.
[PHOTO lightning]
Thou Shalt Not Push Twice to the Same Tag
Docker tags are an abomination to reproducibility. They are designed with no
implicit responsibility towards immutability and as such go directly against
the tenets of this Church. Unfortunately, tags are deeply ingrained in the
psyche of Docker so to be a truthful citizen one must work around them.
Your containers are releases not streams, let your systems get what they ask
for. Use version numbers or branch-commit pairs.
[PHOTO lightning]
Thou Shalt Not Pull From a Tag Somebody Else Pushed to Twice
Though you might try to be a good and truthly citizen yourself, it is quite
easy to become entangled in the lies of others. Nowadays one can pull an
image via a content addressable image ID and be significantly less prone to
lapses of truth from others.
This path can be taken quite far, through to package management with tools
like nix, but that is the subject for another time.
[PHOTO lightning]
Thou Shalt Not Trust That Docker Will Remain Responsive
The Docker Syndicate, like us all, is fallible, and like a teenager it can
be fallible quite often. Despite sometime appearing otherwise, Docker is not
a system service and should not be treated with the trust that is reserved
for the mature software in that category.
Keep a close eye on Docker, be prepared for it to hang. Know how to find out
what it did, restart it, kill containers manually, or just kill the system
it is running on. A new favorite of mine is to use rkt to run tooling to
inspect Docker problems.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment