How's life without Docker?

What you dislike about Docker? I ask because its interesting to hear dissenting voices when in most places Docker is almost only praised.
I had a particularly bad time with layers on a docker instance that was our build machine. It had accumulated thousands of them, and we only discovered that when the build stopped working. A whole day of no-fun for me. ZFS is so, so much better.

...On the other hand Docker's hub filled with turnkey containers which allows you to spin up a service with a single command...always felt like an huge productivity booster to me...
So it's super easy to launch something you don't understand with flaws and vulnerabilities you don't know about? One person's productivity is another's technical debt.
 
I go out of my way to avoid projects involving docker. It always seemed to me to be "cool kid hype". I mean if I want a VM then I'll install a full VM. If not then I'm happy to do stuff natively on the host. I don't like needlessly complicating things: KISS...KEEP IT SIMPLE, STUPID
 
I mostly made this topic to hear about other people's experience with BSD jails or bare metal compared to Docker on Linux and eventually to collect some tips & tricks to get started with this new approach after years of Docker.
I did a nginx/PHP/MariaDB set-up from Windows to FreeBSD last night bare-metal. Prior to that was years of Linux. nginx/PHP/MariaDB sets up mostly the same everywhere.

I've never touched a container or Docker nor would consider it, hosted stuff on Windows, FreeBSD, and 3 Linux distros since around 2016, and the one time I technically used a VM was when I used a temp VPS for a couple months :p (but still custom installed a regular AMD64 install image)
 
Docker is not a hype.

FreeBSD Jails are the best primitives for OCI style containers.

Podman is the best way to play with Jails. I prefer to run Linux images with podman that setting up a chroot jail.
 
There's no such thing as "OCI style containers". Much like "Cloud Native", or "Serverless". It's marketing rubbish.
Exactly. The definition of Docker or OCI containers is "Linux binaries".

The marketing trollop confuses people into thinking "Docker" can run on non-Linux operating systems without virtualization, which is daft. Docker *is* Linux.
 
OCI doesn't define the ABI of executables.

There are OCI images of FreeBSD available on the official website.
Technically, yes (OCI spec is just a document after-all). But when people talk about the ecosystem, they really just mean pulling crap off Docker Hub and expecting it to work. Which of course it won't if not using x86_64 Linux (the default).
 
OCI doesn't define the ABI of executables.

There are OCI images of FreeBSD available on the official website.

It's a BS governance model to tame the inherent fragmentation issue with Linux. OCI exists because GNU/Linux has no concept of a base system. It's an attempt for companies to sell compliance. OCI, like Flatpak/AppImages, etc. is more of the same bandaid nonsense. Outside of the mess that is Linux; it does not exist. FreeBSD just has a simple jail.conf file.

Technically, yes (OCI spec is just a document after-all). But when people talk about the ecosystem, they really just mean pulling crap off Docker Hub and expecting it to work. Which of course it won't if not using x86_64 Linux (the default).

Precisely.
 
Technically, yes (OCI spec is just a document after-all). But when people talk about the ecosystem, they really just mean pulling crap off Docker Hub and expecting it to work. Which of course it won't if not using x86_64 Linux (the default).
People don't pull from DockerHub anymore because of the rate limits, and all kinds of architectures are supported in registries. Pople don't pull random crap but mostly official images. A jail.conf is not enough to ship applications.
 
People don't pull from DockerHub anymore because of the rate limits, and all kinds of architectures are supported in registries.
Mostly x86_64 architecture, especially if you stick to official images they don't even offer or test other architectures.

And as for OS; since Docker *is* Linux by definition, it uses:
  • cgroups (control groups)
  • namespaces (PID, network, mount, etc.)
  • seccomp
  • aufs / overlayfs
  • Linux syscall ABI
This has to be emulated by other operating systems. OCI as a standard only exists as Linux/Docker. Its purely marketing to pretend it is a viable cross platform solution. An OCI Image for FreeBSD won't run on Linux and vice versa. So what is the point? Might as well be a tarball.

Pople don't pull random crap but mostly official images. A jail.conf is not enough to ship applications.
Official images are included as "random crap". You know your use-case better than some other group's bundled set of software. Its basically the same issue as NPM/crates.io/PIP/CPAN. Its a very "technical debty" way of working.

A tarball and a jail.conf is certainly good enough to ship applications.

People don't pull from DockerHub anymore because of the rate limits
The latest trendy place will be no different.
 
Mostly x86_64 architecture, especially if you stick to official images they don't even offer or test other architectures.

I can build, push & download images for amd64, arm64, ppc64le & s390x from Github Container Registry and others.

And as for OS; since Docker *is* Linux by definition, it uses:
  • cgroups (control groups)
  • namespaces (PID, network, mount, etc.)
  • seccomp
  • aufs / overlayfs
  • Linux syscall ABI
This has to be emulated by other operating systems. OCI as a standard only exists as Linux/Docker. Its purely marketing to pretend it is a viable cross platform solution. An OCI Image for FreeBSD won't run on Linux and vice versa. So what is the point? Might as well be a tarball.

You can run Linux container in FreeBSD with sysutils/podman. I haven't tried yet but in theory you can run FreeBSD images with the Kata OCI runtime that uses virtualization.

FreeBSD Jails may be the best primitives for containerization and for that we need to dispel the FUD & lies about containers.

Official images are included as "random crap". You know your use-case better than some other group's bundled set of software. Its basically the same issue as NPM/crates.io/PIP/CPAN. Its a very "technical debty" way of working.

With the difference that with containers there's true isolation and the whole thing is reproducible if you pin the versions.

A tarball and a jail.conf is certainly good enough to ship applications.

It's not good enough. Wait til podman can be run as rootless.
 
You can call pkg to install packages into a Jail. This can be done automatically with templates using a jail management tool. You don't ship applications with containers; that's a vector for compromise. Certainly not with an unvetted registry also. FreeBSD has a community vetted repository of applications called the Ports Tree. A Unix Container (ie. Jails) was designed to securely separate and compartmentalize processes. A better way to deploy applications at scale is to use something like Ansible. Separation of concerns here.
 
I can build, push & download images for amd64, arm64, ppc64le & s390x from Github Container Registry and others.
Not if they require any kind of blob or proprietary component (which is very important within the industry)

You can run Linux container in FreeBSD with sysutils/podman. I haven't tried yet but in theory you can run FreeBSD images with the Kata OCI runtime that uses virtualization.
Virtualization means you are running Linux. As mentioned Docker *is* Linux so this isn't a very interesting solution.

Qemu / Bhyve has existed for many years. Just use that. Kata and OCI runtimes are unnecessary.

It's not good enough. Wait til podman can be run as rootless.
It can't even be run rootless? Why do people even talk about it.

With the difference that with containers there's true isolation and the whole thing is reproducible if you pin the versions.
Then people will complain its "old" and "insecure" if you pin old versions.
 
So the question I'd like to ask to BSD community is: when you're on BSD do you miss Docker and in its absence what's your favorite way to spin up and manage services on a server?
Hello,
I would also like to leave my opinion.
On FreeBSD I use Jails.
I have Jail for VPN, FTP, WWW services and so on...

I don't want to say that something is bad because new technologies have the right to exist and there is no escape from them.
But also I don’t quite understand all these new trends like docker.

I can see what happening at my company.
Many departments are migrating their services to docker.
But when something doesn't work right, no one knows why.
No one wants to adapt a service in a container to our network and IT infrastructure.
Docker and container are a "black box" and no one wants to open it.
I notice that many specialists are very good at deploying containers, raising services, but few have deep knowledge of the operating system and networking.
I have seen that to use Netcat people install docker and a container with Netcat inside.
They download tens of gigabytes or even more.
They reserve the network 172.17.0.0/16, raise virtual interfaces, bridges, firewall
And all this for using Netcat.
After using docker on the server, all disk space is filled with dead containers and images.
All containers are launched as root.
Then the services in these containers try to interact with our infrastructure, for example with NAS Isilon (by the way, the Isilon operating system is FreeBSD) a lot of problems arise, but no one wants to change anything in the container because it is a "black box".
I could go on and on, but I think that's enough...
 
You can call pkg to install packages into a Jail. This can be done automatically with templates using a jail management tool. You don't ship applications with containers; that's a vector for compromise. Certainly not with an unvetted registry also. FreeBSD has a community vetted repository of applications called the Ports Tree. A Unix Container (ie. Jails) was designed to securely separate and compartmentalize processes. A better way to deploy applications at scale is to use something like Ansible. Separation of concerns here.
Exactly my thoughts as well. At best, I think sharing "set up scripts" is a somewhat acceptable alternative solution because then at least there is some accountability and transparency vs blindly loading black boxes. The "download and launch this (with root privileges)" mindset just makes me cringe.
 
You can call pkg to install packages into a Jail. This can be done automatically with templates using a jail management tool. You don't ship applications with containers; that's a vector for compromise. Certainly not with an unvetted registry also. FreeBSD has a community vetted repository of applications called the Ports Tree. A Unix Container (ie. Jails) was designed to securely separate and compartmentalize processes. A better way to deploy applications at scale is to use something like Ansible. Separation of concerns here.
Containers run in sandboxes. In the case of FreeBSD it would be even better with runj that uses Jails.
 
Not if they require any kind of blob or proprietary component (which is very important within the industry)


Virtualization means you are running Linux. As mentioned Docker *is* Linux so this isn't a very interesting solution.

Qemu / Bhyve has existed for many years. Just use that. Kata and OCI runtimes are unnecessary.


It can't even be run rootless? Why do people even talk about it.


Then people will contain its "old" and "insecure" if you pin old versions.
podman can be run rootless only on Linux ATM. Virtualization doesn't solve the packaging problem.
 
Exactly my thoughts as well. At best, I think sharing "set up scripts" is a somewhat acceptable alternative solution because then at least there is some accountability and transparency vs blindly loading black boxes. The "download and launch this (with root privileges)" mindset just makes me cringe.
It's not a black box if you can build it yourself with `docker build`.
 
podman can be run rootless only on Linux ATM.
Makes sense since Docker/podman is specifically implemented for the Linux kernel and can never run on another platform by design.

Its like complaining that Linux can't run Jails, Zones, WPARs.

Virtualization doesn't solve the packaging problem.
Ports solves the packaging problem, Virtualization/Emulation solves the ABI problem.

Docker is an aggregator, not a packager.
 
Exactly my thoughts as well. At best, I think sharing "set up scripts" is a somewhat acceptable alternative solution because then at least there is some accountability and transparency vs blindly loading black boxes. The "download and launch this (with root privileges)" mindset just makes me cringe.

You can sort of do this with SMF. You can specify a service instance (a configuration of a service), and all of it's dependencies using an SMF manifest, then boot a Jail/Zone from that manifest. This is all optional though; instead of it being a terrible mish-mash of functions like Docker.

SMF would be an awesome feature in FreeBSD vanilla.
 
It's not a black box if you can build it yourself with `docker build`.
Wait. how is that different than building a jail and tar'ing it up? Seriously, I'm not an expert in docker or even all that smart. If I build a jail, tar it up, send it to my other server how is this not the same as "an image"?

You can sort of do this with SMF. You can specify a service instance (a configuration of a service), and all of it's dependencies using an SMF manifest, then boot a Jail/Zone from that manifest. This is all optional though; instead of it being a terrible mish-mash of functions like docker.
Oh? You got my attention. what's SMF?

EDIT: I found this:
 
Makes sense since Docker/podman is specifically implemented for the Linux kernel and can never run on another platform by design.
This is not true.

Ports solves the packaging problem, Virtualization/Emulation solves the ABI problem.
Ports solves nothing. Packaging is a mess in all Linux distros. Virtualization comes with overhead and is meant to ship operating systems, not packages.

Docker is an aggregator, not a packager.
An aggregator can be anything. With Docker you can package any application.
 
Back
Top