Docker is for those who fear and don't understand packaging and wish it would just go away. It's the logical conclusion of the download everything and pipe it into a root shell until things start working approach. Docker automates this shotgun packaging and yields opaque binaries you can download automatically and run on your systems with no knowledge of how they were built or what they contain. What could possibly go wrong?
Unfortunately we don't have docker in FreeBSD, so from some comments, especially this one, we can conclude that quite a lot of people don't really know what docker is or think that it is equivalent to jails, however, it is not. Let's just not call it docker, let's say container. Docker is just one provider or runtime where you can run open-container-initiative (OCI) based containers. Docker is actually a bad example, rkt (dead) or podman are showing us how it is done right (my opinion). We have jails, so this is an amazing technology where we could base our own container solution. I am afraid I cannot clearly express what advantages containers have, but I will try in a few sentences.
Consider you have a repository to download your containers. Someone was offending docker.hub, but most commercial providers offer their own hub, so no need to worry when docker hub vanishes. A container is a layered "archive", with eg. a base layer (for instance ubuntu), then the application installed on another layer, then on top your own layer with scripts or other stuff - similar to unionfs, but all in a package. Also, most projects choose a minimal system, so there is no init in the container, no other tools, really just the basic service and the libraries. So running that package guarantees that you are running always the same container. The advantage? - I can run them unprivileged, restrict i/o per second, network, ram, cpu usage. It is testable: we commit our code to gitlab, gitlab-runner builds the container, the containers spins up, tests are being made, if the tests are ok the container is pushed to our docker repository. Clients then do a "docker pull" which is equivalent to "pkg upgrade" and be done. Upgrades are simple because just the delta is synced, the rest of the layers is already on the client machine running the old version. The cool thing about that is we run them on client servers as well as the cloud. Setting it up in this way is much less work than doing equivalent thing with jails. It guarantees that our client - no matter if they run ubuntu, red hat, gentoo, void or any other linux distribution can use the software. For jail? yeah, deliver a 12.1 release jail tarball and get a call from your client because they are still on 10.2. And good luck if you ship a bunch of services in 20 jails and you send your client the jail.conf who then realize that the network we tested it with cannot be used in their environment because it's their prod DMZ - ask the customer what network we can use to send them the right network jail? - no way. Just a short note ... I could write on and on but then I would rather make one of those gazillion blog posts describing the concept of application containers.
It's just sad that we don't have it in FreeBSD because FreeBSD would be perfect for such stuff ... the base technology is there. Why just use FreeBSD for traditional hosting when it would also be a great "cloud" hosting solution. Not everything in Linux land is bad, and not all container runtimes are bad. The market for this is huge, and some more attraction to FreeBSD would not be too bad.