A Decade of Docker Containers

(cacm.acm.org)

104 points | by zacwest 2 hours ago

12 comments

  • bmitch3020 1 hour ago
    I've seen countless attempts to replace "docker build" and Dockerfile. They often want to give tighter control to the build, sometimes tightly binding to a package manager. But the Dockerfile has continued because of its flexibility. Starting from a known filesystem/distribution, copying some files in, and then running arbitrary commands within that filesystem mirrored so nicely what operations has been doing for a long time. And as ugly as that flexibility is, I think it will remain the dominant solution for quite a while longer.
    • miladyincontrol 12 minutes ago
      The lack of docker registry-like solutions really does seem to be the chokepoint for many alternatives.

      Personally I love using mkosi and while it has all the composability and deployment options I'd care for, its clear not everyone wants to build starting only with a blank set of OS templates.

    • zbentley 1 hour ago
      > the Dockerfile has continued because of its flexibility

      I wish we had standardized on something other than shell commands, though. Puppet or terraform or something more declarative would have been such a better alternative to “everyone cargo cults ‘RUN apt-get upgrade’ onto the top of their dockerfiles”.

      Like, the layer/stage/caching behavior is fine. I just wish the actual execution parts had been standardized using something at a higher level of abstraction than shell.

      • bheadmaster 49 minutes ago
        > Puppet or terraform or something more declarative would have been such a better alternative

        Until you need to do something that isn't covered with its DSL, and you extend it with an external command execution declaration... At which point people will just write bash scripts anyway and use your declarative language as a glorified exec.

      • avsm 1 hour ago
        Docker broke out the build layer into a separate component called BuildKit (see HN discussion recently https://news.ycombinator.com/item?id=47166264).

        However, Dockerfiles are so popular because they run shell commands and permit 'socially' extending someone else shell commands; tacking commands onto the end of someone else's shell script is a natural process. /bin/sh is unreasonably effective at doing anything you need to a filesystem, and if the shell exposes a feature, it has probably been used in a Dockerfile somewhere.

        Every other solution, especially declarative ones, tend to come up short when _layering_ images quickly and easily. However, I agree they're good if you control the entire declarative spec.

      • mihaelm 53 minutes ago
        I'd say LLB is the "standard", Dockerfile is just one of human-friendly frontends, but you can always make one yourself or use an alternative. For example, Dagger uses BuildKit directly for building its containers instead of going through a Dockerfile.
  • politelemon 3 minutes ago
    Somewhere along the line they started prioritising docker desktop over docker. It's a bit jarring to see new features coming to desktop before it comes to Linux, such as the new sandbox features.

    Is there any insight into this, I would have thought the opposite where developers on the platform that made docker succeed are given first preview of features.

  • mrbluecoat 1 hour ago
    > Docker repurposed SLIRP, a 1990s dial-up tool originally for Palm Pilots, to avoid triggering corporate firewall restrictions by translating container network traffic through host system calls instead of network bridging.

    Genuinely fascinating and clever solution!

    • redhanuman 1 hour ago
      repurposing a Palm Pilot dial-up tool to sneak container traffic past enterprise firewalls is unhinged and yet it worked the best infrastructure hacks are never clever in the moment they are just desperate that the cleverness only shows up after someone else has to maintain it.
      • avsm 1 hour ago
        VPNKit (the SLIRP component) has been remarkably bug free over the years, and hasn't been much of a burden overall.

        There was another component that we didn't have room to cover in the article that has been very stable (for filesystem sharing between the container and the host) that has been endlessly criticised for being slow, but has never corrupted anyone's data! It's interesting that many users preferred potential-dataloss-but-speed using asynchronous IO, but only on desktop environments. I think Docker did the right thing by erring on the side of safety by default.

      • Normal_gaussian 1 hour ago
        Exactly. "so I hung the radiator out the window" vibes.
        • arcanemachiner 1 hour ago
          I am trying to decipher the meaning of your comment, to no avail.
  • talkvoix 1 hour ago
    A full decade since we took the 'it works on my machine' excuse and turned it into the industry standard architecture ('then we'll just ship your machine to production').
    • avsm 1 hour ago
      (coauthor of the article here)

      Well, before Docker I used to work on Xen and that possible future of massive block devices assembled using Vagrant and Packer has thankfully been avoided...

      One thing that's hard to capture in the article -- but that permeated the early Dockercons -- is the (positive) disruption Docker had in how IT shops were run. Before that going to production was a giant effort, and 'shipping your filesystem' quickly was such a change in how people approached their work. We had so many people come up to us grateful that they could suddenly build services more quickly and get them into the hands of users without having to seek permission slips signed in triplicate.

      We're seeing the another seismic cultural shift now with coding agents, but I think Docker had a similar impact back then, and it was a really fun community spirit. Less so today with the giant hyperscalars all dominating, sadly, but I'll keep my fond memories :-)

      • throwawaypath 22 minutes ago
        >massive block devices assembled using Vagrant and Packer has thankfully been avoided...

        Funny comment considering lightweight/micro-VMs built with tools like Packer are what some in the industry are moving towards.

      • talkvoix 1 hour ago
        Great point about coding agents! Back then, Docker gave us 'it works on my machine, let's ship the machine'. Now, AI agents are giving us 'I have no idea how this works, let's ship the prompt'. The early Docker community spirit really was legendary though—before every hyperscaler wrapped it in 7 layers of proprietary managed services. Thanks for the memories and the write-up!
        • avsm 54 minutes ago
          Thanks for the kind words! I've been prodding @justincormack to resurrect the single most fun OS unconference I've ever attended -- New Directions in Operating Systems (last held back in 2014). https://operatingsystems.io

          Some of those talks strangely make more sense today (e.g. Rump Kernels or unikernels + coding agents seems like a really good combination, as the agent could search all the way through the kernel layers as well).

    • chuckadams 1 hour ago
      It's the ultimate in static linking. Perhaps a question that should be asked is why that approach is so compelling?
      • blackcatsec 26 minutes ago
        I question that as well, it's also why Go is extremely popular. Could it just be a pendulum swing back towards static linking?

        Wonder when some enterprising OSS dev will rebrand dynamic linking in the future...

    • redhanuman 1 hour ago
      the real trick was making "ship your machine" sound like best practice and ten years later we r doing the same thing with ai "it works in my notebook" jst became "containerize the notebook and call it a pipeline" the abstraction always wins because fixing the actual problem is just too hard.
      • zbentley 1 hour ago
        > fixing the actual problem is just too hard.

        I think it’s laziness, not difficulty. That’s not meant to be snide or glib: I think gaining expertise in how to package and deploy non-containerized applications isn’t difficult or unattainable for most engineers; rather, it’s tedious and specialized work to gain that expertise, and Docker allowed much of the field to skip doing it.

        That’s not good or bad per se, but I do think it’s different from “pre-container deployment was hard”. Pre-container deployment was neglected and not widely recognized as a specialty that needed to be cultivated, so most shops sucked at it. That’s not the same as “hard”.

        • skydhash 23 minutes ago
          It's not even laziness or expertise. A lot of people are against learning conventions. They want their way, meaning what works on their computer. That's why they like the current scope of package managers, docker, flatpack,... They can do what they want in the sandbox provided however nonsensical and then ship the whole thing. And it will break if you look at it the wrong way.
      • goodpoint 1 hour ago
        ...while completely forgetting about security
    • curt15 37 minutes ago
      >'then we'll just ship your machine production'

      Minus the kernel of course. What is one to do for workloads requiring special kernel features or modules?

    • forrestthewoods 1 hour ago
      Linux user space is an abject disaster of a design. So so so bad. Docker should not need to exist. Running computer programs need not be so difficult.
      • esafak 1 hour ago
        Who does it right?
        • jjmarr 1 hour ago
          Nix and Guix.

          Good luck convincing people to switch!

          • zbentley 1 hour ago
            But they’re roughly the same paradigm as docker, right? My understanding of the Nix approach is that it’s still reproducing most of a user land/filesystem in a captive/separate/sandbox environment. Like, docker is using namespaces for more stuff, Nix has a heavier emphasis on reproducibility/determinism, but … they’re both still throwing in the towel on deploying directly on the underlying OS’s userland (unless you go all the way to nixOS) and shipping what amounts to a filesystem in a box, no?
            • jjmarr 42 minutes ago
              I daily drive NixOS. I don't have a global "userland". Packages are shipped from upstream and pull in the dependencies they need to function.

              That means unlike Gentoo, I've never dealt with a "slot conflict" where two packages want conflicting dependencies. And unlike Ubuntu, I have new versions of everything.

              Pick 2: share dependencies, be on the bleeding edge, or waste your time resolving conflicts.

          • abacate 1 hour ago
            Trying to convince people usually makes any resistance worse.

            Using it, solving problems with it, and building a real community around it tend to make a much greater impact in the long run.

            • NortySpock 1 hour ago
              Yeah, but if the problem you are solving is rare for most practitioners, effectively theoretical until it actually happens, then people won't switch until they get bit by that particular problem.
        • forrestthewoods 1 hour ago
          Windows is an order of magnitude better in this regard.
          • vanviegen 1 hour ago
            It used to be, but only in cases where your distro doesn't just package whatever software you require. Nowadays I prefer Flatpak or AppImage over crappy custom Windows installers for those cases. They allow for sandboxing and reliable updating/deinstallation.
            • skydhash 14 minutes ago
              These days, I equate anything that ships via docker/flatpak first as built by someone that only care about their own computer, especially if the project is opensource. As soon as a library or a tool update, they usually rush to add a hard condition on it for no reason other than to be on the "bleeding edge".
          • robmusial 1 hour ago
            And yet I'm constantly getting asked when we'll support Windows containers at my office.
            • avsm 58 minutes ago
              We've given up on native Windows containers in OCaml after trying to use them for our CI builds for many years. See https://www.tunbury.org/2026/02/19/obuilder-hcs/ for our recent switch to HCS instead. Compared to Linux containers, they're very much a second-class citizen in the Microsoft worldview of Docker.
        • whateverboat 1 hour ago
          Windows.
  • avsm 1 hour ago
    An extremely random fact I noticed when writing the companion article [1] to this (an OCaml experience report):

        "Docker, Guix and NixOS (stable) all had their first releases
        during 2013, making that a bumper year for packaging aficionados."
    
    Now we get coding agent updates every week, but has there been a similar year since 2013 where multiple great projects all came out at the same time?

    [1]: https://anil.recoil.org/papers/2025-docker-icfp.pdf

  • zacwest 2 hours ago
    The historic information in here was really interesting, and a great example of an article rapidly expanding in scope and detail. How they combatted corporate IT “security” software by pretending to be a VPN is quite unexpected.
  • the__alchemist 1 hour ago
    I'm optimistic we will succeed in efforts to simplify linux application / dependency compatibility instead of relying on abstractions that which work around them.
    • __MatrixMan__ 1 hour ago
      Agreed.

      I've recently switched from docker compose to process compose and it's super nice not to have to map ports or mount volumes. What I actually needed from docker had to do less with containers and more with images, and nix solves that problem better without getting in the way at runtime.

      • onei 30 minutes ago
        Assuming I've found the right process-compose [1], it struck me as having much overlap with the features of systemd. Or at least, I would tend to reach for systemd if I wanted something to run arbitrary processes. Is there something additional/better that process-compose does for you?

        [1]: https://github.com/F1bonacc1/process-compose

    • Joker_vD 1 hour ago
      I am also optimistic we will succeed in efforts to properly annotate the data on the Internet with useful and accurate meta-data and achieve the semantic web vision instead of relying on search engines and LLMs.
    • mihaelm 1 hour ago
      Maybe if you only look at it through the lens of building an app/service, but containers offer so much more than that. By standardizing their delivery through registries and management through runtimes, a lot of operational headaches just go away when using a container orchestrator. Not to mention better utilization of hardware since containers are more lightweight than VMs.
      • the__alchemist 1 hour ago
        Hah indeed that's my perspective. I'm used to being able to compile program, distribute executable, "just works", across win, Linux, MacOs. (With appropriate compile targets set)
  • arikrahman 28 minutes ago
    I'm hoping the next decade introduces more declarative workflows with Nix and work with docker to that end.
  • INTPenis 1 hour ago
    I thought it was 2014 when it launched? The article says the command line interface hasn't changed since 2013.
    • avsm 1 hour ago
      We first submitted the article to the CACM a while ago. The review process takes some time and "Twelve years of Docker containers" didn't have quite the same vibe.
  • brcmthrowaway 46 minutes ago
    I dont use Dockerfile. Am i slumming it?
  • user3939382 29 minutes ago
    It solves a practical problem that’s obvious. And on one hand the practical where-were-at-now is all that matters, that’s a legitimate perspective.

    There’s another one, at least IMHO, that this entire stack from the bottom up is designed wrong and every day we as a society continue marching down this path we’re just accumulating more technical debt. Pretty much every time you find the solution to be, “ok so we’ll wrap the whole thing and then…” something is deeply wrong and you’re borrowing from the future a debt that must come due. Energy is not free. We tend to treat compute like it is.

    Maybe I’m in a big club but I have a vision for a radically different architecture that fixes all of this and I wish that got 1/2 the attention these bandaids did. Plan 9 is an example of the theme if not the particular set of solutions I’m referring to.

  • bluepeter 48 minutes ago
    Docker containerized SOC2 bypass. Kinda like how graft apparently optimizes the Chinese economy (because it allows red tape shortcuts). Docker lets engineers otherwise escape hatch from company bureaucracty to get things done.