168 points psxuaw 3 hours ago 74 comments
shykes 2 hours ago | parent
I'm happy to answer any questions you may have.
irishcoffee 2 hours ago | parent
skinfaxi 2 hours ago | parent
shykes 1 hour ago | parent
gradus_ad 2 hours ago | parent
shykes 2 hours ago | parent
So, not only did I not anticipate this kind of success, I did not even have a reference frame for what success might even look like. All I knew was, I had an itch that I had to scratch, and I had nothing better to do :)
Waterluvian 2 hours ago | parent
ak217 1 hour ago | parent
I think the breakthrough with Docker was bundling the AUFS-based image layer format with a centralized container image sharing registry. This was revolutionary at the time. But another huge element of success was Solomon and others evangelizing the technology relentlessly at meetups and conferences. I distinctly remember attending a demo in 2012 where the crowd was very excited to see the Docker workflow that we now take for granted, in large part because Solomon was so good at presenting it. At the time, I was working at a cloud PaaS company where we developed a similar technology on top of LXC and BTRFS (but no image registry). Docker really made me think hard about what we were doing, although I didn't end up making any moves.
https://jpetazzo.github.io/2017/02/24/from-dotcloud-to-docke...
hack1312 1 hour ago | parent
memset 12 minutes ago | parent
https://news.ycombinator.com/item?id=2032821
Then it pivoted to docker:
ecliptik 1 hour ago | parent
When Docker came out it solved so many issues we were having. Thank you for scratching that itch.
xtracto 1 hour ago | parent
I didnt get it at that time haha.
layer8 2 hours ago | parent
figmert 2 hours ago | parent
You may have already answered this somewhere, so feel free to tell me what to search for or if you have a link to hand, that works too :)
bijmtir 1 hour ago | parent
iJohnDoe 1 hour ago | parent
miladyincontrol 1 hour ago | parent
iJohnDoe 52 minutes ago | parent
I went down the rabbit hole of Incus and once I realized it requires the full network aspects to be configured, then I figured using KVM, QEMU, Libvirt was more practical. Then stumbled into nspawn and it was basically ready to go.
Although, I haven’t done enough research to know if Incus provides certain useful capabilities.
radlad 35 minutes ago | parent
It includes project-level resource separation, advanced networking, clustering, snapshots, and more. Plus, Stéphane Graber is super responsive on the forums and issue tracker. I bounced off of Proxmox, and can't recommend Incus more for hypervisor-type scenarios.
lostlogin 1 hour ago | parent
shykes 1 hour ago | parent
Docker in its earlier incarnations was based on openvz, which predates lxc. The lxc project was initially a kernel development project: a collection of kernel patches to add container support. The userland tool was just a companion. When it became apparent that these patches would "win" the race to be upstreamed even though openvz was much more mature, we switched our tooling to lxc. The patches matured over time, but the userland tool (what we now know as "lxc") was finicky.
The original open-source release of Docker wrapped lxc for low-level container operations. But it was just too unreliable and we swapped it out for an in-house Go implementation called "libcontainer".
As for "commercializing": Docker was famously bad at commercializing anything, we open sourced so much (maybe too much) and still people complained that we were not open enough.
bijmtir 58 minutes ago | parent
And just because you do something bad doesn’t mean we can’t call it what it was. A bad attempt at lying is still a bad attempt for example.
shykes 55 minutes ago | parent
js2 55 minutes ago | parent
stingraycharles 40 minutes ago | parent
Developers are a tough market to please, especially when your business revolves around open source software.
Unless you have an option to do private cloud hosting (like all these databases and other platforms do), it’s incredibly difficult to monetize.
In the case of docker, I think it’s in the nature of the product that it’s difficult to monetize. Best you can do is enterprise support contracts, but those aren’t good enough to justify all that VC funding.
zoeysmithe 24 minutes ago | parent
okanat 2 hours ago | parent
shykes 2 hours ago | parent
None of these things can be transposed today, so I guess I can't answer...
For what it's worth, my current project (dagger) is written in Go.
Tenemo 2 hours ago | parent
craftkiller 1 hour ago | parent
xyzzy_plugh 1 hour ago | parent
Docker syntax is one of those things that just immediately falls out of my head when I close the editor. I don't care about it at all.
Even better: there are many, many tools that build OCI images without using the Docker syntax. I haven't hand-written a Dockerfile in at least six years.
LLMs have not loved the needle here in my sphere, it was already bouncing off of the zero on the gauge.
edit: this isn't to say the syntax is good or bad (though there are several questionable parts of it) but extremely simple, and concise enough that you can just look up literally any command with great ease. It's surely a large part of its success, for better or for worse.
davnicwil 2 hours ago | parent
I remember my first time trying to use a container was about 2015 on a beach cafe's wifi in Bocas del Toro, Panama. You can imagine how it went...
After a brief hiatus though I was back to it and since then it's been a core part of many a local dev stack and even production stack (compose) I've set up. I recall the magic moment for me being when I first realised you could mount src to use all your local native dev tools while completely virtualising everything else, including and especially whatever combo of runtimes and dependencies you need.
It was just a lightbulb moment, like it entirely solves 'works on my machine', setting new people up on a project, it just seems like how software engineering ought to work and once you have experienced it it's difficult to go back.
I'm curious, as its creator are you still using it, or as someone who can clearly look ahead to experimental ways of doing things are you on to the next thing whatever that may be? If so, what is it? :-)
Fabricio20 1 hour ago | parent
999900000999 1 hour ago | parent
For one, did you get rich beyond all comprehension and did you start a band with your wealth?
Second, do you still program ?
I was lucky enough to get in this industry when Docker was new. Sure beats trying to figure out why X happens on machine A and doesn’t on machine B.
shykes 58 minutes ago | parent
I did not start a band, but I did build a nice house, help my family etc.
I still program everyday, working on my second startup, https://dagger.io (please forgive the plug). We have a very active discord if you want to come say hi.
999900000999 41 minutes ago | parent
I guess my follow up question is once you’re financially independent, what continues to motivate you?
Is it fun?
Do you feel like you’re creating tools that the industry needs.
I imagine if I ever get rich I’d work on music and small games.
Video games that you buy once and get to play forever, self host, etc. With a full open source commitment within 5 years or so. I’d probably create a game studio in a lower cost of living country though.
operator-name 1 hour ago | parent
I’ve been following dagger and it’s been really interesting to see the evolution of the design, and new set of abstractions. There’s also nix which has seen popularity, with their approach of building layered oci containers.
potsandpans 59 minutes ago | parent
> If WASM+WASI existed in 2008, we wouldn't have needed to created Docker. That's how important it is. Webassembly on the server is the future of computing. A standardized system interface was the missing link. Let's hope WASI is up to the task!
How are you feeling about WASI today?
cole_dev 56 minutes ago | parent
stroebs 49 minutes ago | parent
verdverm 47 minutes ago | parent
memset 19 minutes ago | parent
suprjami 2 hours ago | parent
Knowing this, you might find rootless Podman's fork-exec method of starting containers to be more sensible. I certainly do. No root, no daemon, no socket.
If you want to learn more about the Linux Kernel namespaces which work together to make a container, this LWN series is really good: https://lwn.net/Articles/531114/
QGQBGdeZREunxLe 2 hours ago | parent
Containers From Scratch • Liz Rice • GOTO 2018
tyingq 2 hours ago | parent
[1] "Docker implemented in around 100 lines of bash" https://github.com/p8952/bocker
gzapp 2 hours ago | parent
One of the gnarliest issues I recall was where network namespaces could occasionally not be cleaned up correctly. So "randomly" (but more likely under certain loads) the networking of a reused thread would get jacked and Docker could no longer pull images.
dboreham 1 hour ago | parent
(rule broken by almost every language in common use, unfortunately)
creata 12 minutes ago | parent
j16sdiz 1 hour ago | parent
Everything in that list feel natural when you know how things evolves over many years. Maybe it is just me getting older and less curious.
paxy 1 hour ago | parent
stingraycharles 1 hour ago | parent
slowin 1 hour ago | parent
modeless 1 hour ago | parent
schmichael 8 minutes ago | parent
rkt (2013) was CoreOS's alternative to Docker and was daemon-less and failed.
Podman came along relatively late (2018) and benefited from a lot of Linux kernel and systemd improvements since Docker was designed.
So while arguably the client/server model is outdated for container management tools, I'm not sure it's weird. This is my workstation for example:
schmichael@fedora:~$ ps -e -o comm= | rg 'd$' | wc -l
67
Daemons are maybe the least weird paradigm you can choose for a Unix program.assimpleaspossi 1 hour ago | parent
And folders are graphical representations of directories--sometimes, not always--and not directories themselves. When will the newbies get this?
sophacles 1 hour ago | parent
altcognito 57 minutes ago | parent
I know a lot about how http works, and it comes in handy, but I can understand how juniors get away with not knowing it as fully as I do.
slowin 1 hour ago | parent
kvirani 18 minutes ago | parent
kazinator 1 hour ago | parent
This is very important for debugging! Not just that process, but the processes running in that Docker can be found in /proc.
Why this is useful is that you can run gdb outside of that docker and point it to a process in the docker, including setting the file system root to the docker one, so that it gdb reads the correct objects from the correct paths, to get the right symbols and addresses.
miladyincontrol 1 hour ago | parent
And implying the system kernel still has to run the container kinda ignores kata containers and gvisor runtimes.
0x457 11 minutes ago | parent
0xbadcafebee 53 minutes ago | parent
Other weird facts about OSes: a filesystem is a database, the Linux kernel is a monolithic program, "hidden" dot-files were a Unix bug that got carried forward, deleting a file doesn't remove the file from your machine, virtual memory is a lie, your computer can't run multiple programs at once (it's just running one at a time real fast), in 12 years most systems will crash due to one number getting too big, you technically never need to reboot because you can launch a different version of Linux while already running Linux, you can freeze a program to a file and then later resume running that same program in the same state (but nobody uses it), files aren't actually stored in directories, there's a maximum number of files (and size of file) on most filesystems (which you can use to lock up a machine, despite file quotas existing and nobody using them), you can lock up most systems by forking too many times / using too much RAM / accessing disk too much, there's a default number of open files and/or TCP ports which is artificially low and you can use to again lock up a machine, pipes are just two file descriptors connected to one memory buffer, an IP address is just one long number split up into bytes, etc.
fulafel 31 minutes ago | parent
Try to make your own VM runtime next, you might be surprised!
schmichael 18 minutes ago | parent
I love Go and use it for everything I can but will absolutely concede this point. It's clearly possible to write the most successful container runtimes on earth in Go, but you absolutely have to fight the language/runtime sometimes. Since containers are based on processes, handing off a container spec to a minimal rust runtime seems like what we should all be doing by now. crun has just proven good enough that AFAIK no one has RIIR.
adrianlee_dev 14 minutes ago | parent
thayne 7 minutes ago | parent